Author: chetanm
Date: Wed Sep 6 09:03:12 2017
New Revision: 1807451
URL: http://svn.apache.org/viewvc?rev=1807451&view=rev
Log:
OAK-6620 - NodeStoreFixtureProvider should unregister services registered with
whiteboard
Modified:
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/NodeStoreFixtureProvider.java
Modified:
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/NodeStoreFixtureProvider.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/NodeStoreFixtureProvider.java?rev=1807451&r1=1807450&r2=1807451&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/NodeStoreFixtureProvider.java
(original)
+++
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/NodeStoreFixtureProvider.java
Wed Sep 6 09:03:12 2017
@@ -21,6 +21,7 @@ package org.apache.jackrabbit.oak.run.cl
import java.io.File;
import java.io.IOException;
+import java.util.Map;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
@@ -33,6 +34,8 @@ import org.apache.jackrabbit.oak.plugins
import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException;
import org.apache.jackrabbit.oak.spi.blob.BlobStore;
import org.apache.jackrabbit.oak.spi.state.NodeStore;
+import org.apache.jackrabbit.oak.spi.whiteboard.Registration;
+import org.apache.jackrabbit.oak.spi.whiteboard.Tracker;
import org.apache.jackrabbit.oak.spi.whiteboard.Whiteboard;
import org.apache.jackrabbit.oak.stats.StatisticsProvider;
@@ -46,8 +49,8 @@ public class NodeStoreFixtureProvider {
public static NodeStoreFixture create(Options options, boolean readOnly)
throws Exception {
CommonOptions commonOpts = options.getOptionBean(CommonOptions.class);
- Whiteboard wb = options.getWhiteboard();
Closer closer = Closer.create();
+ Whiteboard wb = new ClosingWhiteboard(options.getWhiteboard(), closer);
BlobStoreFixture blobFixture =
BlobStoreFixtureProvider.create(options);
BlobStore blobStore = null;
if (blobFixture != null) {
@@ -148,4 +151,31 @@ public class NodeStoreFixtureProvider {
closer.close();
}
}
+
+ private static class ClosingWhiteboard implements Whiteboard {
+ private final Whiteboard delegate;
+ private final Closer closer;
+
+ public ClosingWhiteboard(Whiteboard delegate, Closer closer) {
+ this.delegate = delegate;
+ this.closer = closer;
+ }
+
+ @Override
+ public <T> Registration register(Class<T> type, T service, Map<?, ?>
properties) {
+ Registration reg = delegate.register(type, service, properties);
+ closer.register(reg::unregister);
+ return reg;
+ }
+
+ @Override
+ public <T> Tracker<T> track(Class<T> type) {
+ return delegate.track(type);
+ }
+
+ @Override
+ public <T> Tracker<T> track(Class<T> type, Map<String, String>
filterProperties) {
+ return delegate.track(type, filterProperties);
+ }
+ }
}