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() {