/** * Return true if we're on an old version */ private MigrationRelationship<MvccLogEntrySerializationStrategy> getMigrationRelationShip() { return this.versions .getMigrationRelationship( migrationInfoCache.getVersion( CollectionMigrationPlugin.PLUGIN_NAME ) ); } }
@Override public void resetToVersion( final String pluginName, final int version ) { Preconditions.checkNotNull( pluginName, "pluginName cannot be null" ); final MigrationPlugin plugin = migrationPlugins.get( pluginName ); Preconditions.checkArgument( plugin != null, "Plugin " + pluginName + " could not be found" ); final int highestAllowed = plugin.getMaxVersion(); Preconditions.checkArgument( version <= highestAllowed, "You cannot set a version higher than the max of " + highestAllowed + " for plugin " + pluginName ); Preconditions.checkArgument( version >= 0, "You must specify a version of 0 or greater" ); migrationInfoSerialization.setVersion( pluginName, version ); migrationInfoCache.invalidateAll(); }
@Override public void migrate() throws MigrationException { /** * Invoke each plugin to attempt a migration */ executionOrder.forEach(plugin -> { final ProgressObserver observer = new CassandraProgressObserver(plugin.getName()); plugin.run(observer); migrationInfoCache.invalidateAll(); }); }
/** * Return true if we're on an old version */ private MigrationRelationship<MvccEntitySerializationStrategy> getMigrationRelationShip() { return this.versions.getMigrationRelationship( migrationInfoCache.getVersion( CollectionMigrationPlugin.PLUGIN_NAME ) ); }
@Override public void migrate(final String name) throws MigrationException { /** * Invoke each plugin to attempt a migration */ final MigrationPlugin plugin = migrationPlugins.get( name ); if(plugin != null){ final ProgressObserver observer = new CassandraProgressObserver(plugin.getName()); plugin.run(observer); migrationInfoCache.invalidateAll(); }else { throw new IllegalArgumentException(name + " does not match a current plugin."); } }
/** * Return true if we're on an old version */ private MigrationRelationship<UniqueValueSerializationStrategy> getMigrationRelationShip() { return this.versions .getMigrationRelationship( migrationInfoCache.getVersion( CollectionMigrationPlugin.PLUGIN_NAME ) ); }
@Test public void test2Plugins() throws MigrationException { final Set<MigrationPlugin> plugins = new HashSet<>(); MigrationPlugin plugin1 = mock( MigrationPlugin.class ); when( plugin1.getPhase() ).thenReturn( PluginPhase.MIGRATE ); when( plugin1.getName() ).thenReturn( "plugin1" ); MigrationPlugin plugin2 = mock( MigrationPlugin.class ); when( plugin2.getPhase() ).thenReturn( PluginPhase.MIGRATE ); when( plugin2.getName() ).thenReturn( "plugin2" ); plugins.add( plugin1 ); plugins.add( plugin2 ); final MigrationInfoSerialization migrationInfoSerialization = mock( MigrationInfoSerialization.class ); final MigrationInfoCache migrationInfoCache = mock(MigrationInfoCache.class); DataMigrationManagerImpl migrationManager = new DataMigrationManagerImpl( plugins, migrationInfoSerialization,migrationInfoCache ); Set<String> pluginNames = migrationManager.getPluginNames(); assertEquals(2, pluginNames.size()); assertTrue( pluginNames.contains( "plugin1" ) ); assertTrue(pluginNames.contains("plugin2")); //now run them migrationManager.migrate(); verify( plugin1 ).run(any(ProgressObserver.class)); verify( plugin2 ).run( any( ProgressObserver.class ) ); verify(migrationInfoCache,Mockito.times(2)).invalidateAll(); }
/** * Return true if we're on an old version */ private MigrationRelationship<EdgeMetadataSerialization> getMigrationRelationShip() { return this.versions.getMigrationRelationship( migrationInfoCache.getVersion( GraphMigrationPlugin.PLUGIN_NAME ) ); }
@Test public void testExecutionOrder() throws MigrationException { //linked hash set is intentional here. For iteration order we can boostrap to come second so we can //verify it was actually run first final Set<MigrationPlugin> plugins = new LinkedHashSet<>(); MigrationPlugin plugin1 = mock( MigrationPlugin.class ); when( plugin1.getPhase() ).thenReturn( PluginPhase.MIGRATE ); when( plugin1.getName() ).thenReturn( "plugin1" ); //boostrap plugin, should run first MigrationPlugin plugin2 = mock( MigrationPlugin.class ); when( plugin2.getPhase() ).thenReturn( PluginPhase.BOOTSTRAP ); when( plugin2.getName() ).thenReturn( "plugin2" ); plugins.add( plugin1 ); plugins.add( plugin2 ); final MigrationInfoSerialization migrationInfoSerialization = mock( MigrationInfoSerialization.class ); final MigrationInfoCache migrationInfoCache = mock(MigrationInfoCache.class); DataMigrationManagerImpl migrationManager = new DataMigrationManagerImpl( plugins, migrationInfoSerialization, migrationInfoCache ); Set<String> pluginNames = migrationManager.getPluginNames(); assertEquals( 2, pluginNames.size() ); assertTrue( pluginNames.contains( "plugin1" ) ); assertTrue( pluginNames.contains( "plugin2" ) ); //now run them migrationManager.migrate(); //we want to verify the bootsrap plugin was called first InOrder inOrderVerification = inOrder( plugin1, plugin2 ); inOrderVerification.verify( plugin2 ).run( any( ProgressObserver.class ) ); inOrderVerification.verify( plugin1 ).run( any( ProgressObserver.class ) ); verify(migrationInfoCache, Mockito.times(2)).invalidateAll(); }