Skip to content

Commit

Permalink
CCR: Tighten requesting range check on leader
Browse files Browse the repository at this point in the history
This commit clarifies the origin of the global checkpoint that the
following shard uses and replaces illegal_state_exc E by an assertion.

Relates #30980
  • Loading branch information
dnhatn committed Jun 1, 2018
1 parent b85a1c4 commit 790e2fe
Showing 1 changed file with 5 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -236,13 +236,11 @@ protected Response shardOperation(Request request, ShardId shardId) throws IOExc
IndexService indexService = indicesService.indexServiceSafe(request.getShard().getIndex());
IndexShard indexShard = indexService.getShard(request.getShard().id());
final long indexMetaDataVersion = clusterService.state().metaData().index(shardId.getIndex()).getVersion();
// The following shard generates the request based on the global checkpoint which may not be synced to all leading copies.
// However, this guarantees that the requesting range always be below the local-checkpoint of any leading copies.
final long localCheckpoint = indexShard.getLocalCheckpoint();
if (localCheckpoint < request.minSeqNo || localCheckpoint < request.maxSeqNo) {
throw new IllegalStateException("invalid request from_seqno=[" + request.minSeqNo + "], " +
"to_seqno=[" + request.maxSeqNo + "], local_checkpoint=[" + localCheckpoint + "], shardId=[" + shardId + "]");
}
// The following shard generates this request based on the global checkpoint on the primary copy on the leader.
// Although this value might not have been synced to all replica copies on the leader, the requesting range
// is guaranteed to be at most the local-checkpoint of any shard copies on the leader.
assert request.maxSeqNo <= indexShard.getLocalCheckpoint() : "invalid request from_seqno=[" + request.minSeqNo + "]," +
" to_seqno=[" + request.maxSeqNo + "], local_checkpoint=[" + indexShard.getLocalCheckpoint() + "]";
final Translog.Operation[] operations =
getOperationsBetween(indexShard, request.minSeqNo, request.maxSeqNo, request.maxTranslogsBytes);
return new Response(indexMetaDataVersion, operations);
Expand Down

0 comments on commit 790e2fe

Please sign in to comment.