use of org.neo4j.tools.console.input.ConsoleInput in project neo4j by neo4j.
the class DatabaseRebuildTool method run.
public void run(String... arguments) throws Exception {
if (arguments.length == 0) {
System.err.println("Tool for rebuilding database from transaction logs onto a new store");
System.err.println("Example: dbrebuild --from path/to/some.db --to path/to/new.db apply next");
System.err.println(" dbrebuild --from path/to/some.db --to path/to/new.db -i");
System.err.println(" --from : which db to use as source for reading transactions");
System.err.println(" --to : where to build the new db");
System.err.println(" --overwrite-to : always starts from empty 'to' db");
System.err.println(" -i : interactive mode (enter a shell)");
return;
}
Args args = Args.withFlags("i", "overwrite-to").parse(arguments);
File fromPath = getFrom(args);
File toPath = getTo(args);
GraphDatabaseBuilder dbBuilder = newDbBuilder(toPath, args);
boolean interactive = args.getBoolean("i");
if (interactive && !args.orphans().isEmpty()) {
throw new IllegalArgumentException("No additional commands allowed in interactive mode");
}
@SuppressWarnings("resource") InputStream input = interactive ? in : oneCommand(args.orphansAsArray());
LifeSupport life = new LifeSupport();
ConsoleInput consoleInput = console(fromPath, dbBuilder, input, interactive ? staticPrompt("# ") : NO_PROMPT, life);
life.start();
try {
consoleInput.waitFor();
} finally {
life.shutdown();
}
}
use of org.neo4j.tools.console.input.ConsoleInput in project neo4j by neo4j.
the class DatabaseRebuildTool method console.
private ConsoleInput console(final File fromPath, final GraphDatabaseBuilder dbBuilder, InputStream in, Listener<PrintStream> prompt, LifeSupport life) throws Exception {
// We must have this indirection here since in order to perform CC (one of the commands) we must shut down
// the database and let CC instantiate its own to run on. After that completes the db
// should be restored. The commands has references to providers of things to accommodate for this.
final AtomicReference<Store> store = new AtomicReference<>(new Store(dbBuilder));
final Supplier<StoreAccess> storeAccess = () -> store.get().access;
final Supplier<GraphDatabaseAPI> dbAccess = () -> store.get().db;
ConsoleInput consoleInput = life.add(new ConsoleInput(in, out, prompt));
consoleInput.add("apply", new ApplyTransactionsCommand(fromPath, dbAccess));
consoleInput.add(DumpRecordsCommand.NAME, new DumpRecordsCommand(storeAccess));
consoleInput.add("cc", new ArgsCommand() {
@Override
public void run(Args action, PrintStream out) throws Exception {
File storeDir = store.get().storeDir;
store.get().shutdown();
try {
Result result = new ConsistencyCheckService().runFullConsistencyCheck(storeDir, Config.defaults(), ProgressMonitorFactory.textual(out), FormattedLogProvider.toOutputStream(System.out), false);
out.println(result.isSuccessful() ? "consistent" : "INCONSISTENT");
} finally {
store.set(new Store(dbBuilder));
}
}
@Override
public String toString() {
return "Runs consistency check on the database for data that has been applied up to this point";
}
});
life.add(new LifecycleAdapter() {
@Override
public void shutdown() {
store.get().shutdown();
}
});
return consoleInput;
}
Aggregations