Index: oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClient.java =================================================================== --- oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClient.java (revision 1769146) +++ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClient.java (working copy) @@ -21,6 +21,8 @@ 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 @@ } } + @Nullable String getHead() throws InterruptedException { channel.writeAndFlush(new GetHeadRequest(clientId)); @@ -184,6 +187,7 @@ return response.getHeadRecordId(); } + @Nullable byte[] getSegment(String segmentId) throws InterruptedException { channel.writeAndFlush(new GetSegmentRequest(clientId, segmentId)); @@ -196,6 +200,7 @@ return response.getSegmentData(); } + @Nullable byte[] getBlob(String blobId) throws InterruptedException { channel.writeAndFlush(new GetBlobRequest(clientId, blobId)); @@ -208,6 +213,7 @@ return response.getBlobData(); } + @Nullable Iterable getReferences(String segmentId) throws InterruptedException { channel.writeAndFlush(new GetReferencesRequest(clientId, segmentId)); Index: oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSyncExecution.java =================================================================== --- oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSyncExecution.java (revision 1769146) +++ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSyncExecution.java (working copy) @@ -25,6 +25,8 @@ 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 @@ 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,10 @@ 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(); + return (head != null) ? RecordId.fromString(store, head) : null; } private SegmentNodeState newSegmentNodeState(RecordId id) {