saintstack commented on a change in pull request #2652:
URL: https://github.com/apache/hbase/pull/2652#discussion_r522642007
##########
File path:
hbase-client/src/main/java/org/apache/hadoop/hbase/client/ZKConnectionRegistry.java
##########
@@ -133,13 +133,17 @@ private static void tryComplete(MutableInt remaining,
HRegionLocation[] locs,
ServerName.valueOf(snProto.getHostName(), snProto.getPort(),
snProto.getStartCode()));
}
- private void getMetaRegionLocation(CompletableFuture<RegionLocations> future,
+ @VisibleForTesting
+ void getMetaRegionLocation(CompletableFuture<RegionLocations> future,
List<String> metaReplicaZNodes) {
if (metaReplicaZNodes.isEmpty()) {
future.completeExceptionally(new IOException("No meta znode available"));
}
HRegionLocation[] locs = new HRegionLocation[metaReplicaZNodes.size()];
MutableInt remaining = new MutableInt(locs.length);
+ // Do NOT use replicaid as index into locations array. The location set
may not be complete
Review comment:
Thanks @huaxiangsun . That helps (Its also used here
https://github.com/apache/hbase/blob/master/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ZKConnectionRegistry.java#L187
but if error, we don't get to this point because of ArrayOutOfBoundsException).
Let me just do what @apache9 suggests. Looks like there is precedent around
the handling of this situation. Let me follow the model (even if it means
double work as you point out).
Will be back in a bit w/ new patch.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]