Apache9 commented on a change in pull request #2095: URL: https://github.com/apache/hbase/pull/2095#discussion_r456988819
########## File path: hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionUtils.java ########## @@ -652,4 +626,160 @@ static void setCoprocessorError(RpcController controller, Throwable error) { controller.setFailed(error.toString()); } } + + public static RegionLocations locateRow(NavigableMap<byte[], RegionLocations> cache, + TableName tableName, byte[] row, int replicaId) { + Map.Entry<byte[], RegionLocations> entry = cache.floorEntry(row); + if (entry == null) { + return null; + } + RegionLocations locs = entry.getValue(); + HRegionLocation loc = locs.getRegionLocation(replicaId); + if (loc == null) { + return null; + } + byte[] endKey = loc.getRegion().getEndKey(); + if (isEmptyStopRow(endKey) || Bytes.compareTo(row, endKey) < 0) { + if (LOG.isTraceEnabled()) { + LOG.trace("Found {} in cache for {}, row='{}', locateType={}, replicaId={}", loc, tableName, + Bytes.toStringBinary(row), RegionLocateType.CURRENT, replicaId); + } + return locs; + } else { + return null; + } + } + + public static RegionLocations locateRowBefore(NavigableMap<byte[], RegionLocations> cache, + TableName tableName, byte[] row, int replicaId) { + boolean isEmptyStopRow = isEmptyStopRow(row); + Map.Entry<byte[], RegionLocations> entry = + isEmptyStopRow ? cache.lastEntry() : cache.lowerEntry(row); + if (entry == null) { + return null; + } + RegionLocations locs = entry.getValue(); + HRegionLocation loc = locs.getRegionLocation(replicaId); + if (loc == null) { + return null; + } + if (isEmptyStopRow(loc.getRegion().getEndKey()) || + (!isEmptyStopRow && Bytes.compareTo(loc.getRegion().getEndKey(), row) >= 0)) { + if (LOG.isTraceEnabled()) { + LOG.trace("Found {} in cache for {}, row='{}', locateType={}, replicaId={}", loc, tableName, + Bytes.toStringBinary(row), RegionLocateType.BEFORE, replicaId); + } + return locs; + } else { + return null; + } + } + + public static void tryClearMasterStubCache(IOException error, + ClientMetaService.Interface currentStub, AtomicReference<ClientMetaService.Interface> stub) { + if (ClientExceptionsUtil.isConnectionException(error) || + error instanceof ServerNotRunningYetException) { + stub.compareAndSet(currentStub, null); + } + } + + public static <T> CompletableFuture<T> getMasterStub(ConnectionRegistry registry, Review comment: They are both interfaces where master implements. You can see that in the implementation, we just call registry.getActiveMaster... ---------------------------------------------------------------- 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: us...@infra.apache.org