Index: oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java =================================================================== --- oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java (revision 1774032) +++ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java (working copy) @@ -523,17 +523,21 @@ } SegmentNodeStore segmentNodeStore = segmentNodeStoreBuilder.build(); - ObserverTracker observerTracker = new ObserverTracker(segmentNodeStore); - observerTracker.start(context.getBundleContext()); - registrations.register(asCloseable(observerTracker)); + if (isPrimarySegmentStore(role)) { + ObserverTracker observerTracker = new ObserverTracker(segmentNodeStore); + observerTracker.start(context.getBundleContext()); + registrations.register(asCloseable(observerTracker)); + } - mbeans.add(registerMBean( - whiteboard, - CheckpointMBean.class, - new SegmentCheckpointMBean(segmentNodeStore), CheckpointMBean.TYPE, - appendRole("Segment node store checkpoint management", role))); + if (isPrimarySegmentStore(role)) { + mbeans.add(registerMBean( + whiteboard, + CheckpointMBean.class, + new SegmentCheckpointMBean(segmentNodeStore), CheckpointMBean.TYPE, + appendRole("Segment node store checkpoint management", role))); + } - if (descriptors) { + if (descriptors && isPrimarySegmentStore(role)) { // ensure a clusterId is initialized // and expose it as 'oak.clusterid' repository descriptor GenericDescriptors clusterIdDesc = new GenericDescriptors(); @@ -583,16 +587,14 @@ } } - if (store.getBlobStore() instanceof GarbageCollectableBlobStore) { - final long blobGcMaxAgeInSecs = toLong(property(PROP_BLOB_GC_MAX_AGE, context), DEFAULT_BLOB_GC_MAX_AGE); + if (store.getBlobStore() instanceof GarbageCollectableBlobStore && isPrimarySegmentStore(role)) { BlobGarbageCollector gc = new MarkSweepGarbageCollector( new SegmentBlobReferenceRetriever(store), (GarbageCollectableBlobStore) store.getBlobStore(), executor, - TimeUnit.SECONDS.toMillis(blobGcMaxAgeInSecs), + TimeUnit.SECONDS.toMillis(getBlobGcMaxAge(context)), repoId ); - mbeans.add(registerMBean( whiteboard, BlobGCMBean.class, @@ -639,10 +641,12 @@ return segmentNodeStore; } - Map props = new HashMap(); - props.put(Constants.SERVICE_PID, SegmentNodeStore.class.getName()); - props.put("oak.nodestore.description", new String[] {"nodeStoreType=segment"}); - registrations.register(asCloseable(whiteboard.register(NodeStore.class, segmentNodeStore, props))); + if (isPrimarySegmentStore(role)) { + Map props = new HashMap(); + props.put(Constants.SERVICE_PID, SegmentNodeStore.class.getName()); + props.put("oak.nodestore.description", new String[] {"nodeStoreType=segment"}); + registrations.register(asCloseable(whiteboard.register(NodeStore.class, segmentNodeStore, props))); + } return segmentNodeStore; } @@ -729,6 +733,10 @@ return System.getProperty(propertyName); } + private static long getBlobGcMaxAge(ComponentContext context) { + return toLong(property(PROP_BLOB_GC_MAX_AGE, context), DEFAULT_BLOB_GC_MAX_AGE); + } + private static int getSegmentCacheSize(ComponentContext context) { return toInteger(getCacheSize(SEGMENT_CACHE_SIZE, context), DEFAULT_SEGMENT_CACHE_MB); } @@ -802,4 +810,8 @@ }; } + private static boolean isPrimarySegmentStore(String role) { + return role == null; + } + }