diff --git a/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/MapDBMapFactory.java b/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/MapDBMapFactory.java index fefd19eda7..0cb71944f4 100644 --- a/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/MapDBMapFactory.java +++ b/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/MapDBMapFactory.java @@ -43,7 +43,6 @@ public MapDBMapFactory() { this.db = DBMaker.newTempFileDB() .deleteFilesAfterClose() - .closeOnJvmShutdown() .transactionDisable() .asyncWriteEnable() .make(); diff --git a/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CheckpointsCommand.java b/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CheckpointsCommand.java index 28553565f4..a63fb1bf4a 100644 --- a/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CheckpointsCommand.java +++ b/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CheckpointsCommand.java @@ -50,7 +50,7 @@ public void execute(String... args) throws Exception { boolean success = false; Checkpoints cps; - Closer closer = Closer.create(); + Closer closer = Utils.createCloserWithShutdownHook(); try { String op = "list"; if (options.nonOptionArguments().size() >= 2) { diff --git a/oak-run/src/main/java/org/apache/jackrabbit/oak/run/ClusterNodesCommand.java b/oak-run/src/main/java/org/apache/jackrabbit/oak/run/ClusterNodesCommand.java index 190f9db637..d93eafe100 100644 --- a/oak-run/src/main/java/org/apache/jackrabbit/oak/run/ClusterNodesCommand.java +++ b/oak-run/src/main/java/org/apache/jackrabbit/oak/run/ClusterNodesCommand.java @@ -42,7 +42,7 @@ @Override public void execute(String... args) throws Exception { - Closer closer = Closer.create(); + Closer closer = Utils.createCloserWithShutdownHook(); try { String h = "clusternodes mongodb://host:port/database|jdbc:..."; ClusterNodesOptions options = new ClusterNodesOptions(h).parse(args); diff --git a/oak-run/src/main/java/org/apache/jackrabbit/oak/run/DataStoreCheckCommand.java b/oak-run/src/main/java/org/apache/jackrabbit/oak/run/DataStoreCheckCommand.java index 4762c6666c..6eb1c5d7c3 100644 --- a/oak-run/src/main/java/org/apache/jackrabbit/oak/run/DataStoreCheckCommand.java +++ b/oak-run/src/main/java/org/apache/jackrabbit/oak/run/DataStoreCheckCommand.java @@ -119,7 +119,7 @@ static int checkDataStore(String... args) { + "[--s3ds |--fds |--azureblobds |--nods]" + " [--dump ] [--repoHome ] [--track] [--verbose]"; - try (Closer closer = Closer.create()) { + try (Closer closer = Utils.createCloserWithShutdownHook()) { // Options for operations requested OptionSpecBuilder idOp = parser.accepts("id", "Get ids"); OptionSpecBuilder refOp = parser.accepts("ref", "Get references"); diff --git a/oak-run/src/main/java/org/apache/jackrabbit/oak/run/DataStoreCommand.java b/oak-run/src/main/java/org/apache/jackrabbit/oak/run/DataStoreCommand.java index 6f50f973e6..36efa43699 100644 --- a/oak-run/src/main/java/org/apache/jackrabbit/oak/run/DataStoreCommand.java +++ b/oak-run/src/main/java/org/apache/jackrabbit/oak/run/DataStoreCommand.java @@ -108,7 +108,7 @@ public void execute(String... args) throws Exception { logCliArgs(args); boolean success = false; - try (Closer closer = Closer.create()) { + try (Closer closer = Utils.createCloserWithShutdownHook()) { opts.setTempDirectory(dataStoreOpts.getWorkDir().getAbsolutePath()); NodeStoreFixture fixture = NodeStoreFixtureProvider.create(opts); closer.register(fixture); @@ -152,7 +152,7 @@ private static boolean checkParameters(DataStoreOptions dataStoreOpts, Options o private void execute(NodeStoreFixture fixture, DataStoreOptions dataStoreOpts, Options opts, Closer closer) throws Exception { - try (Closer metricsCloser = Closer.create()) { + try (Closer metricsCloser = Utils.createCloserWithShutdownHook()) { MetricsExporterFixture metricsExporterFixture = MetricsExporterFixtureProvider.create(dataStoreOpts, fixture.getWhiteboard()); metricsCloser.register(metricsExporterFixture); diff --git a/oak-run/src/main/java/org/apache/jackrabbit/oak/run/GarbageCommand.java b/oak-run/src/main/java/org/apache/jackrabbit/oak/run/GarbageCommand.java index 9e2deb4bea..4787f65676 100644 --- a/oak-run/src/main/java/org/apache/jackrabbit/oak/run/GarbageCommand.java +++ b/oak-run/src/main/java/org/apache/jackrabbit/oak/run/GarbageCommand.java @@ -27,7 +27,7 @@ @Override public void execute(String... args) throws Exception { - Closer closer = Closer.create(); + Closer closer = Utils.createCloserWithShutdownHook(); String h = "garbage mongodb://host:port/database | jdbc:..."; try { NodeStore store = Utils.bootstrapNodeStore(args, closer, h); diff --git a/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RecoveryCommand.java b/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RecoveryCommand.java index 633c407c34..c8c1d9112c 100644 --- a/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RecoveryCommand.java +++ b/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RecoveryCommand.java @@ -44,7 +44,7 @@ @Override public void execute(String... args) throws Exception { MapFactory.setInstance(new MapDBMapFactory()); - Closer closer = Closer.create(); + Closer closer = Utils.createCloserWithShutdownHook(); String h = "recovery mongodb://host:port/database|jdbc:... { dryRun }"; try { diff --git a/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RepairCommand.java b/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RepairCommand.java index 27198b12bd..c84ed47eee 100644 --- a/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RepairCommand.java +++ b/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RepairCommand.java @@ -28,7 +28,7 @@ @Override public void execute(String... args) throws Exception { - Closer closer = Closer.create(); + Closer closer = Utils.createCloserWithShutdownHook(); String h = "repair mongodb://host:port/database path"; try { NodeStore store = Utils.bootstrapNodeStore(args, closer, h); diff --git a/oak-run/src/main/java/org/apache/jackrabbit/oak/run/ResetClusterIdCommand.java b/oak-run/src/main/java/org/apache/jackrabbit/oak/run/ResetClusterIdCommand.java index b3a8d6588a..4c4ee993c0 100644 --- a/oak-run/src/main/java/org/apache/jackrabbit/oak/run/ResetClusterIdCommand.java +++ b/oak-run/src/main/java/org/apache/jackrabbit/oak/run/ResetClusterIdCommand.java @@ -76,7 +76,7 @@ public void execute(String... args) throws Exception { String help = "resetclusterid {||}"; Utils.NodeStoreOptions opts = new Utils.NodeStoreOptions(help).parse(args); - Closer closer = Closer.create(); + Closer closer = Utils.createCloserWithShutdownHook(); try { NodeStore store = Utils.bootstrapNodeStore(opts, closer); deleteClusterId(store); diff --git a/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RevisionsCommand.java b/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RevisionsCommand.java index 21e5aff706..b572450a4d 100644 --- a/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RevisionsCommand.java +++ b/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RevisionsCommand.java @@ -166,7 +166,7 @@ boolean isVerbose() { @Override public void execute(String... args) throws Exception { - Closer closer = Closer.create(); + Closer closer = Utils.createCloserWithShutdownHook(); try { RevisionsOptions options = new RevisionsOptions(USAGE).parse(args); setupLoggers(options.isVerbose()); diff --git a/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Utils.java b/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Utils.java index 9bca819840..bff255a6c4 100644 --- a/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Utils.java +++ b/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Utils.java @@ -341,6 +341,19 @@ public void close() throws IOException { }; } + static Closer createCloserWithShutdownHook() { + Closer closer = Closer.create(); + Runtime.getRuntime().addShutdownHook(new Thread() { + public void run() { + try { + closer.close(); + } catch (IOException e) { + e.printStackTrace(System.err); + } + } + }); + return closer; + } private static Properties loadAndTransformProps(String cfgPath) throws IOException { Dictionary dict = ConfigurationHandler.read(new FileInputStream(cfgPath));