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 am...@apache.org on 2018/09/19 08:52:04 UTC

svn commit: r1841301 - in /jackrabbit/oak/trunk/oak-segment-tar/src: main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreRegistrar.java test/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreServiceTest.java

Author: amitj
Date: Wed Sep 19 08:52:03 2018
New Revision: 1841301

URL: http://svn.apache.org/viewvc?rev=1841301&view=rev
Log:
OAK-7766: RepositoryId not registered in the DataStore with SegmentNodeStoreFactory

- Fixed condition to check not secondary role configured & customBlobStore=true

Modified:
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreRegistrar.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreServiceTest.java

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreRegistrar.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreRegistrar.java?rev=1841301&r1=1841300&r2=1841301&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreRegistrar.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreRegistrar.java Wed Sep 19 08:52:03 2018
@@ -396,7 +396,7 @@ class SegmentNodeStoreRegistrar {
         }
 
         // If a shared data store register the repo id in the data store
-        if (cfg.isPrimarySegmentStore() && isShared(cfg.getBlobStore())) {
+        if (!cfg.isSecondarySegmentStore() && cfg.hasCustomBlobStore() && isShared(cfg.getBlobStore())) {
             SharedDataStore sharedDataStore = (SharedDataStore) cfg.getBlobStore();
             try {
                 sharedDataStore.addMetadataRecord(new ByteArrayInputStream(new byte[0]), SharedDataStoreUtils.SharedStoreRecordType.REPOSITORY.getNameFromId(getOrCreateId(segmentNodeStore)));

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreServiceTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreServiceTest.java?rev=1841301&r1=1841300&r2=1841301&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreServiceTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreServiceTest.java Wed Sep 19 08:52:03 2018
@@ -21,14 +21,22 @@ package org.apache.jackrabbit.oak.segmen
 
 import static com.google.common.collect.Maps.newHashMap;
 import static org.apache.sling.testing.mock.osgi.MockOsgi.deactivate;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
 
 import java.io.File;
+import java.io.IOException;
+import java.util.List;
 import java.util.Map;
 
+import org.apache.jackrabbit.core.data.DataRecord;
 import org.apache.jackrabbit.oak.plugins.blob.BlobGCMBean;
+import org.apache.jackrabbit.oak.plugins.blob.datastore.DataStoreBlobStore;
+import org.apache.jackrabbit.oak.plugins.blob.datastore.OakFileDataStore;
+import org.apache.jackrabbit.oak.plugins.blob.datastore.SharedDataStoreUtils;
 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
 import org.apache.jackrabbit.oak.spi.blob.GarbageCollectableBlobStore;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
@@ -143,6 +151,42 @@ public class SegmentNodeStoreServiceTest
         unregisterSegmentNodeStoreService();
     }
 
+    /**
+     * A SharedDataStore service should be registered when the "customBlobStore"
+     * configuration property is true and a BlobStore service as SharedDataStore available.
+     */
+    @Test
+    public void testUseCustomBlobStoreWithSharedBlobStore() throws IOException {
+        DataStoreBlobStore dataStoreBlobStore = registerSharedDataStore(folder.newFolder());
+
+        registerSegmentNodeStoreService(true);
+        assertServiceActivated();
+
+        assertNotNull(context.getService(BlobGCMBean.class));
+        assertSharedDataStoreRegistered(dataStoreBlobStore);
+
+        unregisterSegmentNodeStoreService();
+        unregisterBlobStore();
+    }
+
+    /**
+     * A SharedDataStore service should not be registered when the "customBlobStore"
+     * configuration property is false and a BlobStore service as SharedDataStore available.
+     */
+    @Test
+    public void testUseNoCustomBlobStoreWithSharedBlobStore() throws IOException {
+        DataStoreBlobStore dataStoreBlobStore = registerSharedDataStore(folder.newFolder());
+
+        registerSegmentNodeStoreService(false);
+        assertServiceActivated();
+
+        assertNull(context.getService(BlobGCMBean.class));
+        assertSharedDataStoreNotRegistered(dataStoreBlobStore);
+
+        unregisterSegmentNodeStoreService();
+        unregisterBlobStore();
+    }
+
     private SegmentNodeStoreService segmentNodeStoreService;
 
     protected void registerSegmentNodeStoreService(boolean customBlobStore) {
@@ -164,6 +208,15 @@ public class SegmentNodeStoreServiceTest
         blobStore = context.bundleContext().registerService(BlobStore.class.getName(), mock(GarbageCollectableBlobStore.class), null);
     }
 
+    private DataStoreBlobStore registerSharedDataStore(File home) {
+        OakFileDataStore ds = new OakFileDataStore();
+        ds.init(home.getAbsolutePath());
+        DataStoreBlobStore dataStoreBlobStore = new DataStoreBlobStore(ds);
+
+        blobStore = context.bundleContext().registerService(BlobStore.class.getName(), dataStoreBlobStore, null);
+        return dataStoreBlobStore;
+    }
+
     private void unregisterBlobStore() {
         blobStore.unregister();
     }
@@ -178,4 +231,15 @@ public class SegmentNodeStoreServiceTest
         assertNull(context.getService(SegmentStoreProvider.class));
     }
 
+    protected void assertSharedDataStoreRegistered(DataStoreBlobStore dataStoreBlobStore) {
+        List<DataRecord> allMetadataRecords =
+            dataStoreBlobStore.getAllMetadataRecords(SharedDataStoreUtils.SharedStoreRecordType.REPOSITORY.getType());
+        assertFalse(allMetadataRecords.isEmpty());
+    }
+
+    protected void assertSharedDataStoreNotRegistered(DataStoreBlobStore dataStoreBlobStore) {
+        List<DataRecord> allMetadataRecords =
+            dataStoreBlobStore.getAllMetadataRecords(SharedDataStoreUtils.SharedStoreRecordType.REPOSITORY.getType());
+        assertTrue(allMetadataRecords.isEmpty());
+    }
 }