Skip to content

Commit

Permalink
Fixing an issue in validating ranges while splitting non-root shards
Browse files Browse the repository at this point in the history
Signed-off-by: Kshitij Tandon <[email protected]>
  • Loading branch information
tandonks committed Jan 23, 2025
1 parent 9d9d5cc commit 6f5c7da
Showing 1 changed file with 9 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -140,10 +140,10 @@ public int numberOfEmptyParentShards() {
return emptyParents;
}

private static void validateShardRanges(int shardId, ShardRange[] shardRanges) {
private static void validateShardRanges(int shardId, ShardRange[] shardRanges, long parentStart, long parentEnd) {
Integer start = null;
for (ShardRange shardRange : shardRanges) {
validateBounds(shardRange, start);
validateBounds(shardRange, start, parentStart);
long rangeEnd = shardRange.getEnd();
long rangeLength = rangeEnd - shardRange.getStart() + 1;
if (rangeLength < MINIMUM_RANGE_LENGTH_THRESHOLD) {
Expand All @@ -159,18 +159,18 @@ private static void validateShardRanges(int shardId, ShardRange[] shardRanges) {
throw new IllegalArgumentException("No shard range defined for child shards of shard " + shardId);
}

if (start != Integer.MAX_VALUE) {
if (start != parentEnd) {
throw new IllegalArgumentException(
"Shard range from " + (start + 1) + " to " + Integer.MAX_VALUE
"Shard range from " + (start + 1) + " to " + parentEnd
+ " is missing from the list of shard ranges");
}
}

private static void validateBounds(ShardRange shardRange, Integer start) {
private static void validateBounds(ShardRange shardRange, Integer start, long parentStart) {
if (start == null) {
if (shardRange.getStart() != Integer.MIN_VALUE) {
if (shardRange.getStart() != parentStart) {
throw new IllegalArgumentException(
"Shard range from " + Integer.MIN_VALUE + " to " + (shardRange.getStart() - 1)
"Shard range from " + parentStart + " to " + (shardRange.getStart() - 1)
+ " is missing from the list of shard ranges");
}
} else if (shardRange.getStart() != start + 1) {
Expand Down Expand Up @@ -253,7 +253,7 @@ public void splitShard(int splitShardId, int numberOfChildren) {
start = end + 1;
}
ShardRange[] newShardRanges = newChildShardsList.toArray(new ShardRange[0]);
validateShardRanges(splitShardId, newShardRanges);
validateShardRanges(splitShardId, newShardRanges, parentShard.getStart(), parentShard.getEnd());

parentToChildShards.put(splitShardId, newShardRanges);
}
Expand All @@ -273,7 +273,7 @@ public void updateSplitMetadataForChildShards(int sourceShardId, Set<Integer> ne
shardsUnderRoot.addAll(Arrays.asList(parentToChildShards.get(sourceShardId)));
ShardRange[] newShardsUnderRoot = shardsUnderRoot.toArray(new ShardRange[0]);
Arrays.sort(newShardsUnderRoot);
validateShardRanges(shardRangeTuple.v1(), newShardsUnderRoot);
validateShardRanges(shardRangeTuple.v1(), newShardsUnderRoot, Integer.MIN_VALUE, Integer.MAX_VALUE);

maxShardId += newChildShardIds.size();
rootShardsToAllChildren[shardRangeTuple.v1()] = newShardsUnderRoot;
Expand Down

0 comments on commit 6f5c7da

Please sign in to comment.