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