Author: frm
Date: Thu Nov 10 16:48:56 2016
New Revision: 1769157

URL: http://svn.apache.org/viewvc?rev=1769157&view=rev
Log:
OAK-5094 - Check for NPE when reading the remote head from primary

Contribution by Timothee Maret.

Modified:
    
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClient.java
    
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSyncExecution.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClient.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClient.java?rev=1769157&r1=1769156&r2=1769157&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClient.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClient.java
 Thu Nov 10 16:48:56 2016
@@ -21,6 +21,8 @@ import java.util.concurrent.BlockingQueu
 import java.util.concurrent.LinkedBlockingDeque;
 import java.util.concurrent.TimeUnit;
 
+import javax.annotation.Nullable;
+
 import io.netty.bootstrap.Bootstrap;
 import io.netty.channel.Channel;
 import io.netty.channel.ChannelInitializer;
@@ -172,6 +174,7 @@ class StandbyClient implements AutoClose
         }
     }
 
+    @Nullable
     String getHead() throws InterruptedException {
         channel.writeAndFlush(new GetHeadRequest(clientId));
 
@@ -184,6 +187,7 @@ class StandbyClient implements AutoClose
         return response.getHeadRecordId();
     }
 
+    @Nullable
     byte[] getSegment(String segmentId) throws InterruptedException {
         channel.writeAndFlush(new GetSegmentRequest(clientId, segmentId));
 
@@ -196,6 +200,7 @@ class StandbyClient implements AutoClose
         return response.getSegmentData();
     }
 
+    @Nullable
     byte[] getBlob(String blobId) throws InterruptedException {
         channel.writeAndFlush(new GetBlobRequest(clientId, blobId));
 
@@ -208,6 +213,7 @@ class StandbyClient implements AutoClose
         return response.getBlobData();
     }
 
+    @Nullable
     Iterable<String> getReferences(String segmentId) throws 
InterruptedException {
         channel.writeAndFlush(new GetReferencesRequest(clientId, segmentId));
 

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSyncExecution.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSyncExecution.java?rev=1769157&r1=1769156&r2=1769157&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSyncExecution.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSyncExecution.java
 Thu Nov 10 16:48:56 2016
@@ -25,6 +25,8 @@ import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
 
+import javax.annotation.Nullable;
+
 import com.google.common.base.Supplier;
 import org.apache.jackrabbit.oak.segment.RecordId;
 import org.apache.jackrabbit.oak.segment.Segment;
@@ -63,6 +65,10 @@ class StandbyClientSyncExecution {
     void execute() throws Exception {
         RecordId remoteHead = getHead();
 
+        if (remoteHead == null) {
+            throw new IllegalStateException("Unable to fetch remote head");
+        }
+
         if (remoteHead.equals(store.getHead().getRecordId())) {
             return;
         }
@@ -77,8 +83,13 @@ class StandbyClientSyncExecution {
         log.debug("updated head state successfully: {} in {}ms.", ok, 
System.currentTimeMillis() - t);
     }
 
+    @Nullable
     private RecordId getHead() throws Exception {
-        return RecordId.fromString(store, client.getHead());
+        String head = client.getHead();
+        if (head == null) {
+            return null;
+        }
+        return RecordId.fromString(store, head);
     }
 
     private SegmentNodeState newSegmentNodeState(RecordId id) {


Reply via email to