You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by to...@apache.org on 2016/12/06 14:15:18 UTC

svn commit: r1772898 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/multiplex/MultiplexingNodeStoreService.java oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreFactory.java

Author: tomekr
Date: Tue Dec  6 14:15:18 2016
New Revision: 1772898

URL: http://svn.apache.org/viewvc?rev=1772898&view=rev
Log:
OAK-5179: MultiplexingNodeStoreService does not register an OSGi service for oak.api.Descriptors

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/multiplex/MultiplexingNodeStoreService.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreFactory.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/multiplex/MultiplexingNodeStoreService.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/multiplex/MultiplexingNodeStoreService.java?rev=1772898&r1=1772897&r2=1772898&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/multiplex/MultiplexingNodeStoreService.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/multiplex/MultiplexingNodeStoreService.java Tue Dec  6 14:15:18 2016
@@ -163,6 +163,11 @@ public class MultiplexingNodeStoreServic
         NodeStoreWithProps newNs = new NodeStoreWithProps(ns, config);
         nodeStores.add(newNs);
 
+        if (context == null) {
+            LOG.info("bindNodeStore: context is null, delaying reconfiguration");
+            return;
+        }
+
         unregisterMultiplexingNodeStore();
         registerMultiplexingNodeStore();
     }
@@ -175,6 +180,11 @@ public class MultiplexingNodeStoreServic
             }
         }
 
+        if (context == null) {
+            LOG.info("unbindNodeStore: context is null, delaying reconfiguration");
+            return;
+        }
+
         unregisterMultiplexingNodeStore();
         registerMultiplexingNodeStore();
     }

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreFactory.java?rev=1772898&r1=1772897&r2=1772898&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreFactory.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreFactory.java Tue Dec  6 14:15:18 2016
@@ -35,8 +35,11 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.ReferencePolicy;
+import org.apache.jackrabbit.commons.SimpleValueFactory;
+import org.apache.jackrabbit.oak.api.Descriptors;
 import org.apache.jackrabbit.oak.commons.PropertiesUtil;
 import org.apache.jackrabbit.oak.osgi.OsgiWhiteboard;
+import org.apache.jackrabbit.oak.plugins.identifier.ClusterRepositoryInfo;
 import org.apache.jackrabbit.oak.segment.file.FileStore;
 import org.apache.jackrabbit.oak.segment.file.FileStoreBuilder;
 import org.apache.jackrabbit.oak.segment.file.FileStoreStatsMBean;
@@ -48,6 +51,7 @@ import org.apache.jackrabbit.oak.spi.sta
 import org.apache.jackrabbit.oak.spi.whiteboard.Registration;
 import org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardExecutor;
 import org.apache.jackrabbit.oak.stats.StatisticsProvider;
+import org.apache.jackrabbit.oak.util.GenericDescriptors;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.component.ComponentContext;
 import org.slf4j.Logger;
@@ -111,6 +115,11 @@ public class SegmentNodeStoreFactory ext
     )
     public static final String CUSTOM_BLOB_STORE = "customBlobStore";
 
+    @Property(boolValue = false,
+            label = "Register JCR descriptors as OSGi services",
+            description="Should only be done for one factory instance")
+    public static final String REGISTER_DESCRIPTORS = "registerDescriptors";
+
     private final Logger log = LoggerFactory.getLogger(getClass());
 
     private String name;
@@ -136,6 +145,12 @@ public class SegmentNodeStoreFactory ext
 
     private String role;
 
+    private boolean registerRepositoryDescriptors;
+
+    private ServiceRegistration clusterIdDescriptorRegistration;
+
+    private ServiceRegistration discoveryLiteDescriptorRegistration;
+
     @Override
     protected SegmentNodeStore getNodeStore() {
         checkState(segmentNodeStore != null, "service must be activated when used");
@@ -149,6 +164,7 @@ public class SegmentNodeStoreFactory ext
         this.role = property(ROLE);
         //In secondaryNodeStore mode customBlobStore is always enabled
         this.customBlobStore = Boolean.parseBoolean(property(CUSTOM_BLOB_STORE)) || isSecondaryStoreMode();
+        this.registerRepositoryDescriptors = Boolean.parseBoolean(property(REGISTER_DESCRIPTORS));
         log.info("activate: SegmentNodeStore '"+role+"' starting.");
 
         if (blobStore == null && customBlobStore) {
@@ -205,6 +221,32 @@ public class SegmentNodeStoreFactory ext
                 },
                 props);
         log.info("Registered NodeStoreProvider backed by SegmentNodeStore of type '{}'", role);
+
+        if (registerRepositoryDescriptors) {
+
+            log.info("Registering JCR descriptors");
+
+            // TODO - copied from SegmentNodeStoreService
+            // ensure a clusterId is initialized
+            // and expose it as 'oak.clusterid' repository descriptor
+            GenericDescriptors clusterIdDesc = new GenericDescriptors();
+            clusterIdDesc.put(ClusterRepositoryInfo.OAK_CLUSTERID_REPOSITORY_DESCRIPTOR_KEY,
+                    new SimpleValueFactory().createValue(
+                            ClusterRepositoryInfo.getOrCreateId(segmentNodeStore)), true, false);
+            clusterIdDescriptorRegistration = context.getBundleContext().registerService(
+                    Descriptors.class.getName(),
+                    clusterIdDesc,
+                    new Hashtable<>()
+            );
+
+            // Register "discovery lite" descriptors
+            discoveryLiteDescriptorRegistration = context.getBundleContext().registerService(
+                    Descriptors.class.getName(),
+                    new SegmentDiscoveryLiteDescriptors(segmentNodeStore),
+                    new Hashtable<>()
+            );
+        }
+
     }
 
     private boolean registerSegmentStore() throws IOException {
@@ -266,6 +308,14 @@ public class SegmentNodeStoreFactory ext
             executor.stop();
             executor = null;
         }
+        if (clusterIdDescriptorRegistration != null) {
+            clusterIdDescriptorRegistration.unregister();
+            clusterIdDescriptorRegistration = null;
+        }
+        if (discoveryLiteDescriptorRegistration != null) {
+            discoveryLiteDescriptorRegistration.unregister();
+            discoveryLiteDescriptorRegistration = null;
+        }
     }
 
     private File getBaseDirectory() {