Author: amitj
Date: Mon Mar 30 05:45:59 2015
New Revision: 1669992

URL: http://svn.apache.org/r1669992
Log:
OAK-2691: Blob GC throws NPE

Checking existence of :clusterId property before retrieving

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/identifier/ClusterRepositoryInfo.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/ClusterRepositoryInfoTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/identifier/ClusterRepositoryInfo.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/identifier/ClusterRepositoryInfo.java?rev=1669992&r1=1669991&r2=1669992&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/identifier/ClusterRepositoryInfo.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/identifier/ClusterRepositoryInfo.java
 Mon Mar 30 05:45:59 2015
@@ -23,8 +23,11 @@ import org.apache.jackrabbit.oak.api.Typ
 import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
 
+import javax.annotation.CheckForNull;
+
 /**
  * Utility class to manage a unique cluster/repository id for the cluster.
  */
@@ -57,8 +60,13 @@ public class ClusterRepositoryInfo {
      * @param store the NodeStore instance
      * @return the repository id
      */
+    @CheckForNull
     public static String getId(NodeStore store) {
-        return 
store.getRoot().getChildNode(CLUSTER_CONFIG_NODE).getProperty(CLUSTER_ID_PROP).getValue(Type.STRING);
+        NodeState state = store.getRoot().getChildNode(CLUSTER_CONFIG_NODE);
+        if (state.hasProperty(CLUSTER_ID_PROP)) {
+            return state.getProperty(CLUSTER_ID_PROP).getValue(Type.STRING);
+        }
+        return null;
     }
 }
 

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/ClusterRepositoryInfoTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/ClusterRepositoryInfoTest.java?rev=1669992&r1=1669991&r2=1669992&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/ClusterRepositoryInfoTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/ClusterRepositoryInfoTest.java
 Mon Mar 30 05:45:59 2015
@@ -93,6 +93,19 @@ public class ClusterRepositoryInfoTest {
         Assert.assertEquals(repoId1, repoId2);
     }
 
+    @Test
+    public void checkGetIdWhenNotRegistered() {
+        MemoryDocumentStore store = new MemoryDocumentStore();
+        DocumentNodeStore ds1 = new DocumentMK.Builder()
+            .setAsyncDelay(0)
+            .setDocumentStore(store)
+            .setClusterId(1)
+            .getNodeStore();
+        // Should be null and no NPE
+        String id = ClusterRepositoryInfo.getId(ds1);
+        Assert.assertNull(id);
+    }
+
     @After
     public void close() throws IOException {
         FileUtils.cleanDirectory(new File(DataStoreUtils.getHomeDir()));


Reply via email to