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) {