Hi Chetan,

Please do not change the "oak.version" property to a snapshot version. If
your change relies on code that is only available in the latest snapshot of
Oak, please revert this commit and hold it back until a proper release of
Oak is performed.

Thanks,

Francesco

---------- Forwarded message ----------
From: <[email protected]>
Date: 2016-06-29 8:26 GMT+02:00
Subject: svn commit: r1750601 - in /jackrabbit/oak/trunk: oak-segment-tar/
oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/
oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/
oak-segment/src/main/java/org/apache/jackrabbit/oak/plug...
To: [email protected]


Author: chetanm
Date: Wed Jun 29 06:26:19 2016
New Revision: 1750601

URL: http://svn.apache.org/viewvc?rev=1750601&view=rev
Log:
OAK-4490 - Expose SegmentNodeStore as a secondary NodeStore

Exposes a barebone SegmentNodeStore. This instance is not listening for
observor etc and not directly exposed as a NodeStore but instance exposed
via NodeStoreProvider

Modified:
    jackrabbit/oak/trunk/oak-segment-tar/pom.xml

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreServiceTest.java

jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java

jackrabbit/oak/trunk/oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreServiceTest.java

Modified: jackrabbit/oak/trunk/oak-segment-tar/pom.xml
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/pom.xml?rev=1750601&r1=1750600&r2=1750601&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/pom.xml Wed Jun 29 06:26:19 2016
@@ -34,7 +34,7 @@
     <name>Oak Segment Tar</name>

     <properties>
-        <oak.version>1.5.3</oak.version>
+        <oak.version>1.6-SNAPSHOT</oak.version>
     </properties>

     <scm>

Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java?rev=1750601&r1=1750600&r2=1750601&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java
Wed Jun 29 06:26:19 2016
@@ -81,6 +81,7 @@ import org.apache.jackrabbit.oak.spi.com
 import org.apache.jackrabbit.oak.spi.gc.GCMonitor;
 import org.apache.jackrabbit.oak.spi.gc.GCMonitorTracker;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
+import org.apache.jackrabbit.oak.spi.state.NodeStoreProvider;
 import org.apache.jackrabbit.oak.spi.state.ProxyNodeStore;
 import org.apache.jackrabbit.oak.spi.state.RevisionGC;
 import org.apache.jackrabbit.oak.spi.state.RevisionGCMBean;
@@ -196,6 +197,13 @@ public class SegmentNodeStoreService ext
     )
     public static final String STANDBY = "standby";

+    @Property(
+            boolValue = false,
+            label = "Secondary Store Mode",
+            description = "Flag indicating that this component will not
register as a NodeStore but just as a SecondaryNodeStoreProvider"
+    )
+    public static final String SECONDARY_STORE = "secondary";
+
     @Property(boolValue = false,
             label = "Custom BlobStore",
             description = "Boolean value indicating that a custom
BlobStore is to be used. " +
@@ -308,6 +316,11 @@ public class SegmentNodeStoreService ext
                 return;
             }

+            if (toBoolean(property(SECONDARY_STORE), false)){
+                registerSecondaryStore();
+                return;
+            }
+
             if (registerSegmentNodeStore()) {
                 Dictionary<String, Object> props = new Hashtable<String,
Object>();
                 props.put(Constants.SERVICE_PID,
SegmentNodeStore.class.getName());
@@ -317,6 +330,20 @@ public class SegmentNodeStoreService ext
         }
     }

+    private void registerSecondaryStore() {
+        segmentNodeStore = SegmentNodeStoreBuilders.builder(store).build();
+        Dictionary<String, Object> props = new Hashtable<String, Object>();
+        props.put(NodeStoreProvider.ROLE, "secondary");
+        storeRegistration =
context.getBundleContext().registerService(NodeStoreProvider.class.getName(),
new NodeStoreProvider() {
+                    @Override
+                    public NodeStore getNodeStore() {
+                        return SegmentNodeStoreService.this;
+                    }
+                },
+                props);
+        log.info("Registered NodeStoreProvider backed by
SegmentNodeStore");
+    }
+
     private boolean registerSegmentStore() throws IOException {
         if (context == null) {
             log.info("Component still not activated. Ignoring the
initialization call");

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=1750601&r1=1750600&r2=1750601&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 Jun 29 06:26:19 2016
@@ -30,6 +30,7 @@ import java.util.Map;

 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
+import org.apache.jackrabbit.oak.spi.state.NodeStoreProvider;
 import org.apache.jackrabbit.oak.stats.StatisticsProvider;
 import org.apache.sling.testing.mock.osgi.junit.OsgiContext;
 import org.junit.Before;
@@ -140,6 +141,17 @@ public class SegmentNodeStoreServiceTest
         unregisterSegmentNodeStoreService();
     }

+    @Test
+    public void nodeStoreProvider() throws Exception{
+        Map<String, Object> properties = newHashMap();
+        properties.put(SegmentNodeStoreService.SECONDARY_STORE, true);
+        properties.put(SegmentNodeStoreService.DIRECTORY,
folder.getRoot().getAbsolutePath());
+
+        segmentNodeStoreService =
context.registerInjectActivateService(new SegmentNodeStoreService(),
properties);
+        assertNull(context.getService(NodeStore.class));
+        assertNotNull(context.getService(NodeStoreProvider.class));
+    }
+
     private SegmentNodeStoreService segmentNodeStoreService;

     private void registerSegmentNodeStoreService(boolean customBlobStore) {

Modified:
jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java?rev=1750601&r1=1750600&r2=1750601&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java
(original)
+++
jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java
Wed Jun 29 06:26:19 2016
@@ -86,6 +86,7 @@ import org.apache.jackrabbit.oak.spi.com
 import org.apache.jackrabbit.oak.spi.gc.GCMonitor;
 import org.apache.jackrabbit.oak.spi.gc.GCMonitorTracker;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
+import org.apache.jackrabbit.oak.spi.state.NodeStoreProvider;
 import org.apache.jackrabbit.oak.spi.state.ProxyNodeStore;
 import org.apache.jackrabbit.oak.spi.state.RevisionGC;
 import org.apache.jackrabbit.oak.spi.state.RevisionGCMBean;
@@ -237,6 +238,13 @@ public class SegmentNodeStoreService ext
     )
     public static final String STANDBY = "standby";

+    @Property(
+            boolValue = false,
+            label = "Secondary Store Mode",
+            description = "Flag indicating that this component will not
register as a NodeStore but just as a SecondaryNodeStoreProvider"
+    )
+    public static final String SECONDARY_STORE = "secondary";
+
     @Property(boolValue = false,
             label = "Custom BlobStore",
             description = "Boolean value indicating that a custom
BlobStore is to be used. " +
@@ -351,6 +359,11 @@ public class SegmentNodeStoreService ext
                 return;
             }

+            if (toBoolean(property(SECONDARY_STORE), false)){
+                registerSecondaryStore();
+                return;
+            }
+
             if (registerSegmentNodeStore()) {
                 Dictionary<String, Object> props = new Hashtable<String,
Object>();
                 props.put(Constants.SERVICE_PID,
SegmentNodeStore.class.getName());
@@ -360,6 +373,22 @@ public class SegmentNodeStoreService ext
         }
     }

+    private void registerSecondaryStore() {
+        SegmentNodeStore.SegmentNodeStoreBuilder nodeStoreBuilder =
SegmentNodeStore.builder(store);
+        nodeStoreBuilder.withCompactionStrategy(compactionStrategy);
+        segmentNodeStore = nodeStoreBuilder.build();
+        Dictionary<String, Object> props = new Hashtable<String, Object>();
+        props.put(NodeStoreProvider.ROLE, "secondary");
+        storeRegistration =
context.getBundleContext().registerService(NodeStoreProvider.class.getName(),
new NodeStoreProvider() {
+                    @Override
+                    public NodeStore getNodeStore() {
+                        return SegmentNodeStoreService.this;
+                    }
+                },
+                props);
+        log.info("Registered NodeStoreProvider backed by
SegmentNodeStore");
+    }
+
     private boolean registerSegmentStore() throws IOException {
         if (context == null) {
             log.info("Component still not activated. Ignoring the
initialization call");

Modified:
jackrabbit/oak/trunk/oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreServiceTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreServiceTest.java?rev=1750601&r1=1750600&r2=1750601&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreServiceTest.java
(original)
+++
jackrabbit/oak/trunk/oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreServiceTest.java
Wed Jun 29 06:26:19 2016
@@ -30,6 +30,7 @@ import java.util.Map;

 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
+import org.apache.jackrabbit.oak.spi.state.NodeStoreProvider;
 import org.apache.jackrabbit.oak.stats.StatisticsProvider;
 import org.apache.sling.testing.mock.osgi.junit.OsgiContext;
 import org.junit.Before;
@@ -140,6 +141,17 @@ public class SegmentNodeStoreServiceTest
         unregisterSegmentNodeStoreService();
     }

+    @Test
+    public void nodeStoreProvider() throws Exception{
+        Map<String, Object> properties = newHashMap();
+        properties.put(SegmentNodeStoreService.SECONDARY_STORE, true);
+        properties.put(SegmentNodeStoreService.DIRECTORY,
folder.getRoot().getAbsolutePath());
+
+        segmentNodeStoreService =
context.registerInjectActivateService(new SegmentNodeStoreService(),
properties);
+        assertNull(context.getService(NodeStore.class));
+        assertNotNull(context.getService(NodeStoreProvider.class));
+    }
+
     private SegmentNodeStoreService segmentNodeStoreService;

     private void registerSegmentNodeStoreService(boolean customBlobStore) {

Reply via email to