diff --git a/community/dbms/src/main/java/org/neo4j/commandline/dbms/CsvImporter.java b/community/dbms/src/main/java/org/neo4j/commandline/dbms/CsvImporter.java index 3068006438965..73a2508ce0b11 100644 --- a/community/dbms/src/main/java/org/neo4j/commandline/dbms/CsvImporter.java +++ b/community/dbms/src/main/java/org/neo4j/commandline/dbms/CsvImporter.java @@ -116,7 +116,7 @@ public void doImport() throws IOException badCollector ); ImportTool.doImport( outsideWorld.errorStream(), outsideWorld.errorStream(), outsideWorld.inStream(), storeDir, logsDir, - reportFile, fs, nodesFiles, relationshipsFiles, false, input, this.databaseConfig, badOutput, configuration ); + reportFile, fs, nodesFiles, relationshipsFiles, false, input, this.databaseConfig, badOutput, configuration, false ); } private boolean isIgnoringSomething() diff --git a/community/import-tool/src/main/java/org/neo4j/tooling/ImportTool.java b/community/import-tool/src/main/java/org/neo4j/tooling/ImportTool.java index a01e1377b7c3a..a62b3fe9a5eb1 100644 --- a/community/import-tool/src/main/java/org/neo4j/tooling/ImportTool.java +++ b/community/import-tool/src/main/java/org/neo4j/tooling/ImportTool.java @@ -32,6 +32,7 @@ import java.util.Collection; import java.util.List; import java.util.Map.Entry; +import java.util.concurrent.TimeUnit; import java.util.function.Function; import org.neo4j.csv.reader.IllegalMultilineFieldException; @@ -72,7 +73,9 @@ import org.neo4j.unsafe.impl.batchimport.input.csv.DataFactory; import org.neo4j.unsafe.impl.batchimport.input.csv.Decorator; import org.neo4j.unsafe.impl.batchimport.input.csv.IdType; +import org.neo4j.unsafe.impl.batchimport.staging.ExecutionMonitor; import org.neo4j.unsafe.impl.batchimport.staging.ExecutionMonitors; +import org.neo4j.unsafe.impl.batchimport.staging.SpectrumExecutionMonitor; import static java.lang.String.format; import static java.nio.charset.Charset.defaultCharset; @@ -260,7 +263,8 @@ enum Options "over the heap memory" ), HIGH_IO( "high-io", null, "Assume a high-throughput storage subsystem", "(advanced) Ignore environment-based heuristics, and assume that the target storage subsystem can " + - "support parallel IO with high throughput." ); + "support parallel IO with high throughput." ), + DETAILED_PROGRESS( "detailed-progress", false, "true/false", "Use the old detailed 'spectrum' progress printing" ); private final String key; private final Object defaultValue; @@ -474,9 +478,10 @@ public static void main( String[] incomingArguments, boolean defaultSettingsSuit relationshipData( inputEncoding, relationshipsFiles ), defaultFormatRelationshipFileHeader(), idType, csvConfiguration( args, defaultSettingsSuitableForTests ), badCollector ); in = defaultSettingsSuitableForTests ? new ByteArrayInputStream( EMPTY_BYTE_ARRAY ) : System.in; + boolean detailedPrinting = args.getBoolean( Options.DETAILED_PROGRESS.key(), (Boolean) Options.DETAILED_PROGRESS.defaultValue() ); doImport( out, err, in, storeDir, logsDir, badFile, fs, nodesFiles, relationshipsFiles, - enableStacktrace, input, dbConfig, badOutput, configuration ); + enableStacktrace, input, dbConfig, badOutput, configuration, detailedPrinting ); success = true; } @@ -548,7 +553,7 @@ public static void doImport( PrintStream out, PrintStream err, InputStream in, F FileSystemAbstraction fs, Collection> nodesFiles, Collection> relationshipsFiles, boolean enableStacktrace, Input input, Config dbConfig, OutputStream badOutput, - org.neo4j.unsafe.impl.batchimport.Configuration configuration ) throws IOException + org.neo4j.unsafe.impl.batchimport.Configuration configuration, boolean detailedProgress ) throws IOException { boolean success; LifeSupport life = new LifeSupport(); @@ -559,12 +564,14 @@ public static void doImport( PrintStream out, PrintStream err, InputStream in, F final Neo4jJobScheduler jobScheduler = life.add( new Neo4jJobScheduler() ); life.start(); + ExecutionMonitor executionMonitor = detailedProgress + ? new SpectrumExecutionMonitor( 2, TimeUnit.SECONDS, out, SpectrumExecutionMonitor.DEFAULT_WIDTH ) + : ExecutionMonitors.defaultVisible( in, jobScheduler ); BatchImporter importer = BatchImporterFactory.withHighestPriority().instantiate( storeDir, fs, null, // no external page cache configuration, - logService, - ExecutionMonitors.defaultVisible( in, jobScheduler ), + logService, executionMonitor, EMPTY, dbConfig, RecordFormatSelector.selectForConfig( dbConfig, logService.getInternalLogProvider() ),