diff --git a/enterprise/backup/src/main/java/org/neo4j/restore/RestoreDatabaseCommand.java b/enterprise/backup/src/main/java/org/neo4j/restore/RestoreDatabaseCommand.java index 8a1e7be3c1765..b220d785034fa 100644 --- a/enterprise/backup/src/main/java/org/neo4j/restore/RestoreDatabaseCommand.java +++ b/enterprise/backup/src/main/java/org/neo4j/restore/RestoreDatabaseCommand.java @@ -46,13 +46,7 @@ public RestoreDatabaseCommand( FileSystemAbstraction fs, File fromPath, Config c this.fromPath = fromPath; this.databaseName = databaseName; this.forceOverwrite = forceOverwrite; - this.databaseDir = configWith( config, databaseName ).get( database_path ).getAbsoluteFile(); - - } - - public static Config configWith( Config config, String databaseName ) - { - return config.with( stringMap( DatabaseManagementSystemSettings.active_database.name(), databaseName ) ); + this.databaseDir = config.get( database_path ).getAbsoluteFile(); } public void execute() throws IOException diff --git a/enterprise/backup/src/test/java/org/neo4j/restore/RestoreDatabaseCommandTest.java b/enterprise/backup/src/test/java/org/neo4j/restore/RestoreDatabaseCommandTest.java index f9bb4e2d95ef6..1898d7b6f690d 100644 --- a/enterprise/backup/src/test/java/org/neo4j/restore/RestoreDatabaseCommandTest.java +++ b/enterprise/backup/src/test/java/org/neo4j/restore/RestoreDatabaseCommandTest.java @@ -38,6 +38,8 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import static org.neo4j.helpers.collection.MapUtil.stringMap; + public class RestoreDatabaseCommandTest { @Rule @@ -49,7 +51,7 @@ public void shouldNotCopyOverAndExistingDatabase() throws Exception // given FileSystemAbstraction fs = new DefaultFileSystemAbstraction(); String databaseName = "to"; - Config config = RestoreDatabaseCommand.configWith( Config.empty(), databaseName); + Config config = configWith( Config.empty(), databaseName); File fromPath = new File( directory.absolutePath(), "from" ); File toPath = config.get( DatabaseManagementSystemSettings.database_path ); @@ -78,7 +80,7 @@ public void shouldThrowExceptionIfBackupDirectoryDoesNotExist() throws Exception // given FileSystemAbstraction fs = new DefaultFileSystemAbstraction(); String databaseName = "to"; - Config config = RestoreDatabaseCommand.configWith( Config.empty(), databaseName); + Config config = configWith( Config.empty(), databaseName); File fromPath = new File( directory.absolutePath(), "from" ); File toPath = config.get( DatabaseManagementSystemSettings.database_path ); @@ -106,7 +108,7 @@ public void shouldAllowForcedCopyOverAnExistingDatabase() throws Exception // given FileSystemAbstraction fs = new DefaultFileSystemAbstraction(); String databaseName = "to"; - Config config = RestoreDatabaseCommand.configWith( Config.empty(), databaseName); + Config config = configWith( Config.empty(), databaseName); File fromPath = new File( directory.absolutePath(), "from" ); File toPath = config.get( DatabaseManagementSystemSettings.database_path ); @@ -130,6 +132,11 @@ public void shouldAllowForcedCopyOverAnExistingDatabase() throws Exception copiedDb.shutdown(); } + public static Config configWith( Config config, String databaseName ) + { + return config.with( stringMap( DatabaseManagementSystemSettings.active_database.name(), databaseName ) ); + } + private void createDbAt( File fromPath, int nodesToCreate ) { GraphDatabaseFactory factory = new GraphDatabaseFactory(); diff --git a/enterprise/core-edge/src/main/java/org/neo4j/coreedge/convert/ConvertClassicStoreCommand.java b/enterprise/core-edge/src/main/java/org/neo4j/coreedge/convert/ConvertClassicStoreToCoreCommand.java similarity index 97% rename from enterprise/core-edge/src/main/java/org/neo4j/coreedge/convert/ConvertClassicStoreCommand.java rename to enterprise/core-edge/src/main/java/org/neo4j/coreedge/convert/ConvertClassicStoreToCoreCommand.java index f0ba1cbc27fe4..54ccbecc0558c 100644 --- a/enterprise/core-edge/src/main/java/org/neo4j/coreedge/convert/ConvertClassicStoreCommand.java +++ b/enterprise/core-edge/src/main/java/org/neo4j/coreedge/convert/ConvertClassicStoreToCoreCommand.java @@ -86,11 +86,11 @@ import static org.neo4j.kernel.impl.store.id.IdType.SCHEMA; import static org.neo4j.kernel.impl.store.id.IdType.STRING_BLOCK; -public class ConvertClassicStoreCommand +public class ConvertClassicStoreToCoreCommand { private final ConversionVerifier conversionVerifier; - public ConvertClassicStoreCommand( ConversionVerifier conversionVerifier ) + public ConvertClassicStoreToCoreCommand( ConversionVerifier conversionVerifier ) { this.conversionVerifier = conversionVerifier; } @@ -123,7 +123,7 @@ private StoreMetadata targetMetadata( File databaseDir ) throws IOException } } - private ClusterSeed changeStoreId( File storeDir, ClusterSeed conversionId ) throws IOException + public static ClusterSeed changeStoreId( File storeDir, ClusterSeed conversionId ) throws IOException { FileSystemAbstraction fs = new DefaultFileSystemAbstraction(); File metadataStore = new File( storeDir, MetaDataStore.DEFAULT_NAME ); @@ -141,7 +141,7 @@ private ClusterSeed changeStoreId( File storeDir, ClusterSeed conversionId ) thr } } - private StoreId readStoreId( File metadataStore, PageCache pageCache ) throws IOException + public static StoreId readStoreId( File metadataStore, PageCache pageCache ) throws IOException { long creationTime = MetaDataStore.getRecord( pageCache, metadataStore, TIME ); long randomNumber = MetaDataStore.getRecord( pageCache, metadataStore, RANDOM_NUMBER ); diff --git a/enterprise/core-edge/src/main/java/org/neo4j/coreedge/convert/ConvertNonCoreEdgeStoreCli.java b/enterprise/core-edge/src/main/java/org/neo4j/coreedge/convert/ConvertNonCoreEdgeStoreCli.java index daf6f8253ffa5..4b12abae4921c 100644 --- a/enterprise/core-edge/src/main/java/org/neo4j/coreedge/convert/ConvertNonCoreEdgeStoreCli.java +++ b/enterprise/core-edge/src/main/java/org/neo4j/coreedge/convert/ConvertNonCoreEdgeStoreCli.java @@ -54,7 +54,7 @@ public static void main( String[] incomingArguments ) throws Throwable Config config = createConfig( homeDir, databaseName, configPath ); - new ConvertClassicStoreCommand( new ConversionVerifier() ).convert( + new ConvertClassicStoreToCoreCommand( new ConversionVerifier() ).convert( config.get( DatabaseManagementSystemSettings.database_path ), config.get( GraphDatabaseSettings.record_format ), clusterSeed ); diff --git a/enterprise/core-edge/src/main/java/org/neo4j/restore/RestoreExistingClusterCli.java b/enterprise/core-edge/src/main/java/org/neo4j/restore/RestoreExistingClusterCli.java index c4d1b58c211eb..7f1204098dc6c 100644 --- a/enterprise/core-edge/src/main/java/org/neo4j/restore/RestoreExistingClusterCli.java +++ b/enterprise/core-edge/src/main/java/org/neo4j/restore/RestoreExistingClusterCli.java @@ -28,7 +28,7 @@ import java.util.Optional; import org.neo4j.coreedge.convert.ConversionVerifier; -import org.neo4j.coreedge.convert.ConvertClassicStoreCommand; +import org.neo4j.coreedge.convert.ConvertClassicStoreToCoreCommand; import org.neo4j.dbms.DatabaseManagementSystemSettings; import org.neo4j.graphdb.factory.GraphDatabaseSettings; import org.neo4j.helpers.Args; @@ -42,6 +42,7 @@ import static org.neo4j.dbms.DatabaseManagementSystemSettings.database_path; import static org.neo4j.graphdb.factory.GraphDatabaseSettings.record_format; +import static org.neo4j.helpers.collection.MapUtil.stringMap; public class RestoreExistingClusterCli { @@ -63,7 +64,7 @@ public static void main( String[] incomingArguments ) try { - Config config = loadNeo4jConfig( homeDir, configPath ); + Config config = loadNeo4jConfig( homeDir, configPath, databaseName ); restoreDatabase( databaseName, fromPath, forceOverwrite, config ); convertStore( config, clusterSeed ); } @@ -73,15 +74,20 @@ public static void main( String[] incomingArguments ) } } - private static Config loadNeo4jConfig( File homeDir, String configPath ) + private static Config loadNeo4jConfig( File homeDir, String configPath, String databaseName ) { - return new ConfigLoader( settings() ).loadConfig( Optional.of( homeDir ), - Optional.of( new File( configPath, "neo4j.conf" ) ), NullLog.getInstance() ); + ConfigLoader configLoader = new ConfigLoader( settings() ); + Config config = configLoader.loadConfig( + Optional.of( homeDir ), + Optional.of( new File( configPath, "neo4j.conf" ) ), + NullLog.getInstance() ); + + return config.with( stringMap( DatabaseManagementSystemSettings.active_database.name(), databaseName ) ); } private static void convertStore( Config config, String seed ) throws IOException, TransactionFailureException { - ConvertClassicStoreCommand convert = new ConvertClassicStoreCommand( new ConversionVerifier() ); + ConvertClassicStoreToCoreCommand convert = new ConvertClassicStoreToCoreCommand( new ConversionVerifier() ); convert.convert( config.get( database_path ), config.get( record_format ), seed ); } diff --git a/enterprise/core-edge/src/main/java/org/neo4j/restore/RestoreNewClusterCli.java b/enterprise/core-edge/src/main/java/org/neo4j/restore/RestoreNewClusterCli.java index cb1300dd0f434..602daceefc8ae 100644 --- a/enterprise/core-edge/src/main/java/org/neo4j/restore/RestoreNewClusterCli.java +++ b/enterprise/core-edge/src/main/java/org/neo4j/restore/RestoreNewClusterCli.java @@ -28,7 +28,7 @@ import java.util.Optional; import org.neo4j.coreedge.convert.ConversionVerifier; -import org.neo4j.coreedge.convert.ConvertClassicStoreCommand; +import org.neo4j.coreedge.convert.ConvertClassicStoreToCoreCommand; import org.neo4j.coreedge.convert.GenerateClusterSeedCommand; import org.neo4j.dbms.DatabaseManagementSystemSettings; import org.neo4j.graphdb.factory.GraphDatabaseSettings; @@ -43,6 +43,7 @@ import static org.neo4j.dbms.DatabaseManagementSystemSettings.database_path; import static org.neo4j.graphdb.factory.GraphDatabaseSettings.record_format; +import static org.neo4j.helpers.collection.MapUtil.stringMap; public class RestoreNewClusterCli { @@ -63,7 +64,7 @@ public static void main( String[] incomingArguments ) try { - Config config = loadNeo4jConfig( homeDir, configPath ); + Config config = loadNeo4jConfig( homeDir, configPath, databaseName ); restoreDatabase( databaseName, fromPath, forceOverwrite, config ); String seed = generateSeed( config ); convertStore( config, seed ); @@ -75,15 +76,20 @@ public static void main( String[] incomingArguments ) } } - private static Config loadNeo4jConfig( File homeDir, String configPath ) + private static Config loadNeo4jConfig( File homeDir, String configPath, String databaseName ) { - return new ConfigLoader( settings() ).loadConfig( Optional.of( homeDir ), - Optional.of( new File( configPath, "neo4j.conf" ) ), NullLog.getInstance() ); + ConfigLoader configLoader = new ConfigLoader( settings() ); + Config config = configLoader.loadConfig( + Optional.of( homeDir ), + Optional.of( new File( configPath, "neo4j.conf" ) ), + NullLog.getInstance() ); + + return config.with( stringMap( DatabaseManagementSystemSettings.active_database.name(), databaseName ) ); } private static void convertStore( Config config, String seed ) throws IOException, TransactionFailureException { - ConvertClassicStoreCommand convert = new ConvertClassicStoreCommand( new ConversionVerifier() ); + ConvertClassicStoreToCoreCommand convert = new ConvertClassicStoreToCoreCommand( new ConversionVerifier() ); convert.convert( config.get( database_path ), config.get( record_format ), seed ); } diff --git a/enterprise/core-edge/src/test/java/org/neo4j/coreedge/backup/BackupCoreIT.java b/enterprise/core-edge/src/test/java/org/neo4j/coreedge/backup/BackupCoreIT.java index 40bbf815ab522..f6207d1bac5cf 100644 --- a/enterprise/core-edge/src/test/java/org/neo4j/coreedge/backup/BackupCoreIT.java +++ b/enterprise/core-edge/src/test/java/org/neo4j/coreedge/backup/BackupCoreIT.java @@ -24,23 +24,19 @@ import org.junit.Test; import java.io.File; -import java.io.IOException; import java.net.InetSocketAddress; import java.util.ArrayList; import java.util.Collection; +import java.util.LinkedList; import java.util.List; import java.util.concurrent.TimeoutException; import java.util.stream.Stream; import org.neo4j.backup.OnlineBackupSettings; import org.neo4j.coreedge.TestStoreId; -import org.neo4j.coreedge.convert.ConversionVerifier; -import org.neo4j.coreedge.convert.ConvertClassicStoreCommand; -import org.neo4j.coreedge.convert.GenerateClusterSeedCommand; import org.neo4j.coreedge.discovery.Cluster; import org.neo4j.coreedge.server.CoreEdgeClusterSettings; import org.neo4j.coreedge.server.core.CoreGraphDatabase; -import org.neo4j.dbms.DatabaseManagementSystemSettings; import org.neo4j.graphdb.Node; import org.neo4j.graphdb.factory.GraphDatabaseSettings; import org.neo4j.helpers.collection.MapUtil; @@ -49,7 +45,10 @@ import org.neo4j.kernel.configuration.Settings; import org.neo4j.kernel.impl.factory.GraphDatabaseFacade; import org.neo4j.kernel.impl.store.format.standard.StandardV3_0; -import org.neo4j.restore.RestoreDatabaseCommand; +import org.neo4j.restore.RestoreClusterCliTest; +import org.neo4j.restore.RestoreClusterUtils; +import org.neo4j.restore.RestoreExistingClusterCli; +import org.neo4j.restore.RestoreNewClusterCli; import org.neo4j.test.DbRepresentation; import org.neo4j.test.coreedge.ClusterRule; import org.neo4j.test.rule.SuppressOutput; @@ -59,9 +58,10 @@ import static org.junit.Assert.assertNotEquals; import static org.neo4j.backup.BackupEmbeddedIT.runBackupToolFromOtherJvmToGetExitCode; import static org.neo4j.coreedge.TestStoreId.assertAllStoresHaveTheSameStoreId; -import static org.neo4j.dbms.DatabaseManagementSystemSettings.database_path; import static org.neo4j.graphdb.Label.label; import static org.neo4j.helpers.collection.MapUtil.stringMap; +import static org.neo4j.restore.ArgsBuilder.args; +import static org.neo4j.restore.ArgsBuilder.toArray; public class BackupCoreIT { @@ -143,16 +143,17 @@ public void makeSureCoreClusterCanBeRestoredFromABackup() throws Throwable TestStoreId storeId = TestStoreId.readStoreId( dbPaths.get( 0 ), fs ); // when - File initialStoreDir = cluster.coreServerStoreDirectory( 0 ); - restoreDatabase( backupPath, initialStoreDir ); - String conversionMetadata = new GenerateClusterSeedCommand().generate( initialStoreDir).getConversionId(); + StringBuilder output = RestoreClusterUtils.execute( () -> RestoreNewClusterCli.main( toArray( args() + .homeDir( cluster.homeDir( 0 ) ).config( cluster.homeDir( 0 ) ).from( backupPath ) + .database( "graph.db" ).force().build() ) ) ); - ConvertClassicStoreCommand convertClassicStoreCommand = new ConvertClassicStoreCommand( new ConversionVerifier() ); - for ( int i = 0; i < numberOfCoreServers; i++ ) + String seed = RestoreClusterCliTest.extractSeed( output ); + + for ( int i = 1; i < numberOfCoreServers; i++ ) { - File coreStoreDir = cluster.coreServerStoreDirectory( i ); - restoreDatabase( backupPath, coreStoreDir ); - convertClassicStoreCommand.convert( coreStoreDir, StandardV3_0.NAME , conversionMetadata ); + File homeDir = cluster.homeDir( i ); + RestoreClusterUtils.execute( () -> RestoreExistingClusterCli.main( toArray( args().homeDir( homeDir ) + .config( homeDir ).from( backupPath ).database( "graph.db" ).seed( seed ).force().build() ) ) ); } cluster.start(); @@ -170,13 +171,6 @@ public void makeSureCoreClusterCanBeRestoredFromABackup() throws Throwable assertNotEquals( storeId, afterRestoreStoreId ); } - private void restoreDatabase( File backupPath, File coreStoreDir ) throws IOException - { - DefaultFileSystemAbstraction fs = new DefaultFileSystemAbstraction(); - Config config = Config.empty().with( stringMap( database_path.name(), coreStoreDir.getAbsolutePath() ) ); - new RestoreDatabaseCommand( fs, backupPath, config, "graph.db", true ).execute(); - } - static CoreGraphDatabase createSomeData( Cluster cluster ) throws TimeoutException, InterruptedException { return cluster.coreTx( ( db, tx ) -> { diff --git a/enterprise/core-edge/src/test/java/org/neo4j/coreedge/discovery/Cluster.java b/enterprise/core-edge/src/test/java/org/neo4j/coreedge/discovery/Cluster.java index 925087f23b148..c4259086f4e06 100644 --- a/enterprise/core-edge/src/test/java/org/neo4j/coreedge/discovery/Cluster.java +++ b/enterprise/core-edge/src/test/java/org/neo4j/coreedge/discovery/Cluster.java @@ -53,7 +53,6 @@ import org.neo4j.kernel.GraphDatabaseDependencies; import org.neo4j.kernel.configuration.Config; import org.neo4j.kernel.impl.factory.GraphDatabaseFacade; -import org.neo4j.kernel.impl.store.format.RecordFormat; import org.neo4j.kernel.impl.store.format.standard.StandardV3_0; import org.neo4j.kernel.internal.DatabaseHealth; import org.neo4j.logging.Level; @@ -120,14 +119,19 @@ public void start() throws InterruptedException, ExecutionException public File coreServerStoreDirectory( int serverId ) { - return coreServerStoreDirectory( parentDir, serverId ); + return coreServerStoreDirectory( homeDir( serverId ) ); } - public static File coreServerStoreDirectory( File parentDir, int serverId ) + public File homeDir( int serverId ) { return new File( parentDir, "server-core-" + serverId ); } + public static File coreServerStoreDirectory( File neo4jHome ) + { + return new File( new File( new File( neo4jHome, "data" ), "databases" ), "graph.db" ); + } + public static File edgeServerStoreDirectory( File parentDir, int serverId ) { return new File( parentDir, "server-edge-" + serverId ); @@ -238,8 +242,9 @@ private CoreGraphDatabase startCoreServer( int serverId, int clusterSize, List RestoreNewClusterCli.main( toArray( args() + .homeDir( homeDir ).config( homeDir ).from( classicNeo4jStore ) + .database( "graph.db" ).force().build() ) ) ); + + String seed = RestoreClusterCliTest.extractSeed( output ); + + for ( int serverId = 1; serverId < CLUSTER_SIZE; serverId++ ) { - File destination = coreServerStoreDirectory( clusterDirectory, serverId ); - restoreDatabase( classicNeo4jStore, destination ); - new ConvertClassicStoreCommand( new ConversionVerifier() ).convert( destination, recordFormat, conversionMetadata ); + File destination = new File( clusterDirectory, "server-core-" + serverId ) ; + RestoreClusterUtils.execute( () -> RestoreExistingClusterCli.main( toArray( args().homeDir( destination ) + .config( destination ).from( classicNeo4jStore ).database( "graph.db" ).seed( seed ).force().build() ) ) ); } Cluster cluster = clusterRule.withRecordFormat( recordFormat ).startCluster(); @@ -132,13 +142,6 @@ public void shouldReplicateTransactionToCoreServers() throws Throwable } } - private void restoreDatabase( File backupPath, File coreStoreDir ) throws IOException - { - DefaultFileSystemAbstraction fs = new DefaultFileSystemAbstraction(); - Config config = Config.empty().with( stringMap( database_path.name(), coreStoreDir.getAbsolutePath() ) ); - new RestoreDatabaseCommand( fs, backupPath, config, "graph.db", true ).execute(); - } - private File createClassicNeo4jStore( File base, int nodesToCreate, String recordFormat ) { File existingDbDir = new File( base, "existing" ); diff --git a/enterprise/core-edge/src/test/java/org/neo4j/restore/ArgsBuilder.java b/enterprise/core-edge/src/test/java/org/neo4j/restore/ArgsBuilder.java new file mode 100644 index 0000000000000..dc83050fbbe02 --- /dev/null +++ b/enterprise/core-edge/src/test/java/org/neo4j/restore/ArgsBuilder.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2002-2016 "Neo Technology," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Neo4j is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +package org.neo4j.restore; + +import java.io.File; +import java.util.LinkedList; + +public class ArgsBuilder +{ + private LinkedList args = new LinkedList<>( ); + + public static ArgsBuilder args() + { + return new ArgsBuilder(); + } + + public ArgsBuilder homeDir( File homeDir) + { + args.add( String.format( "--home-dir=%s", homeDir.getPath() ) ); + return this; + } + + public ArgsBuilder database( String databaseName) + { + args.add( String.format( "--database=%s", databaseName ) ); + return this; + } + + public ArgsBuilder seed( String seed) + { + args.add( String.format( "--cluster-seed=%s", seed ) ); + return this; + } + + public ArgsBuilder config( File config) + { + args.add( String.format( "--config=%s", config.getPath() ) ); + return this; + } + + public ArgsBuilder from( File from) + { + args.add( String.format( "--from=%s", from.getPath() ) ); + return this; + } + + public ArgsBuilder force() + { + args.add( "--force=true" ); + return this; + } + + public LinkedList build() + { + return args; + } + + public static String[] toArray( LinkedList restoreOtherArgs ) + { + return restoreOtherArgs.toArray( new String[restoreOtherArgs.size()] ); + } +} diff --git a/enterprise/core-edge/src/test/java/org/neo4j/restore/RestoreClusterCliTest.java b/enterprise/core-edge/src/test/java/org/neo4j/restore/RestoreClusterCliTest.java index 3812b83db55f4..0ba6cef27f429 100644 --- a/enterprise/core-edge/src/test/java/org/neo4j/restore/RestoreClusterCliTest.java +++ b/enterprise/core-edge/src/test/java/org/neo4j/restore/RestoreClusterCliTest.java @@ -24,8 +24,6 @@ import java.io.File; import java.io.IOException; -import java.io.OutputStream; -import java.io.PrintStream; import java.util.LinkedList; import java.util.Optional; @@ -73,8 +71,11 @@ public void shouldRestoreDatabase() throws Throwable StoreMetadata storeMetadata = metadataFor( classicNeo4jStore ); // when - LinkedList args = args( classicNeo4jStore, testDirectory.cleanDirectory( "new-db-1" ) ); - StringBuilder out = execute( () -> RestoreNewClusterCli.main( args.toArray( new String[args.size()] ) ) ); + File homeDir = testDirectory.cleanDirectory( "new-db-1" ); + LinkedList args = ArgsBuilder.args().homeDir( homeDir ).config( homeDir ) + .from( classicNeo4jStore ).database( "graph.db" ).build() ; + + StringBuilder out = RestoreClusterUtils.execute( () -> RestoreNewClusterCli.main( args.toArray( new String[args.size()] ) ) ); // then String seed = extractSeed( out ); @@ -86,9 +87,10 @@ public void shouldRestoreDatabase() throws Throwable // when restore to another place File rootNewDatabaseDir = testDirectory.cleanDirectory( "new-db-2" ); - LinkedList newArgs = args( classicNeo4jStore, rootNewDatabaseDir ); - newArgs.add( "--cluster-seed=" + seed ); - execute( () -> RestoreExistingClusterCli.main( newArgs.toArray( new String[newArgs.size()] ) ) ); + LinkedList newArgs = ArgsBuilder.args().homeDir( rootNewDatabaseDir ).config( rootNewDatabaseDir ) + .from( classicNeo4jStore ).database( "graph.db" ).seed( seed ).build() ; + + RestoreClusterUtils.execute( () -> RestoreExistingClusterCli.main( newArgs.toArray( new String[newArgs.size()] ) ) ); // then StoreMetadata newMetadata = metadataFor( extractDatabaseDir( rootNewDatabaseDir ) ); @@ -102,32 +104,6 @@ private File extractDatabaseDir( File rootNewDatabaseDir ) return config.get( DatabaseManagementSystemSettings.database_path ); } - private LinkedList args( File classicNeo4jStore, File newDatabaseDir ) throws IOException - { - String homeDir = newDatabaseDir.getPath(); - String configPath = newDatabaseDir.getPath(); - String databaseName = "graph.db"; - - // given - LinkedList args = new LinkedList<>(); - args.add( "--home-dir=" + homeDir ); - args.add( "--database=" + databaseName ); - args.add( "--config=" + configPath ); - args.add( "--from=" + classicNeo4jStore ); - return args; - } - - private StringBuilder execute( Runnable function ) - { - StringBuilder builder = new StringBuilder(); - - PrintStream theRealOut = System.out; - System.setOut( new PrintStream( new MyOutputStream( builder ) ) ); - function.run(); - System.setOut( theRealOut ); - return builder; - } - private StoreMetadata metadataFor( File classicNeo4jStore ) throws IOException { FileSystemAbstraction fs = new DefaultFileSystemAbstraction(); @@ -142,7 +118,7 @@ private StoreMetadata metadataFor( File classicNeo4jStore ) throws IOException } } - private String extractSeed( StringBuilder builder ) + public static String extractSeed( StringBuilder builder ) { return builder.toString().replace( "Cluster Seed: ", "" ).replace( "\n", "" ); } @@ -171,20 +147,4 @@ private File createClassicNeo4jStore( File base, int nodesToCreate, String recor return existingDbDir; } - private class MyOutputStream extends OutputStream - { - private final StringBuilder stringBuilder; - - public MyOutputStream( StringBuilder stringBuilder ) - { - - this.stringBuilder = stringBuilder; - } - - @Override - public void write( int b ) throws IOException - { - stringBuilder.append( (char) b ); - } - } } diff --git a/enterprise/core-edge/src/test/java/org/neo4j/restore/RestoreClusterUtils.java b/enterprise/core-edge/src/test/java/org/neo4j/restore/RestoreClusterUtils.java new file mode 100644 index 0000000000000..9fcda8e30d799 --- /dev/null +++ b/enterprise/core-edge/src/test/java/org/neo4j/restore/RestoreClusterUtils.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2002-2016 "Neo Technology," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Neo4j is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +package org.neo4j.restore; + +import java.io.IOException; +import java.io.OutputStream; +import java.io.PrintStream; + +public class RestoreClusterUtils +{ + public static StringBuilder execute( Runnable function ) + { + StringBuilder builder = new StringBuilder(); + PrintStream theRealOut = System.out; + System.setOut( new PrintStream( new MyOutputStream( builder ) ) ); + function.run(); + System.setOut( theRealOut ); + return builder; + } + + private static class MyOutputStream extends OutputStream + { + private final StringBuilder stringBuilder; + + public MyOutputStream( StringBuilder stringBuilder ) + { + this.stringBuilder = stringBuilder; + } + + @Override + public void write( int b ) throws IOException + { + stringBuilder.append( (char) b ); + } + } + +}