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);
+        }
+    }
 }


Reply via email to