[
https://issues.apache.org/jira/browse/PHOENIX-7003?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17768960#comment-17768960
]
ASF GitHub Bot commented on PHOENIX-7003:
-----------------------------------------
ranganathg commented on code in PR #1686:
URL: https://github.com/apache/phoenix/pull/1686#discussion_r1336543395
##########
phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java:
##########
@@ -707,7 +707,8 @@ public void clearTableRegionCache(TableName tableName)
throws SQLException {
public byte[] getNextRegionStartKey(HRegionLocation regionLocation, byte[]
currentKey) throws IOException {
// in order to check the overlap/inconsistencies bad region info, we
have to make sure
// the current endKey always increasing(compare the previous endKey)
- if (Bytes.compareTo(regionLocation.getRegion().getEndKey(),
currentKey) <= 0
+ if ((Bytes.compareTo(regionLocation.getRegion().getStartKey(),
currentKey) != 0
Review Comment:
ok, got it. I was thinking of the reverse condition :) Thanks for clarifying.
> Harden hbase region inconsistencies check in CQSI#getAllTableRegions method
> ---------------------------------------------------------------------------
>
> Key: PHOENIX-7003
> URL: https://issues.apache.org/jira/browse/PHOENIX-7003
> Project: Phoenix
> Issue Type: Bug
> Components: core
> Reporter: Rushabh Shah
> Assignee: Divneet Kaur
> Priority: Major
>
> Encountered an issue in production cluster where the region inconsistency
> check didn't catch region hole and full region overlaps and the range scan
> query returned incorrect results (result were out of range). We were running
> hbck repair operation _exactly_ at the same time the query was running.
> This is the check
> [here|https://github.com/apache/phoenix/blob/master/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java#L707-L720]
> but this will check whether current regions end key is greater than previous
> region's end key.
> {code}
> if (Bytes.compareTo(regionLocation.getRegionInfo().getEndKey(),
> currentKey) <= 0
> && !Bytes.equals(currentKey, HConstants.EMPTY_START_ROW)
> && !Bytes.equals(regionLocation.getRegionInfo().getEndKey(),
> HConstants.EMPTY_END_ROW)) {
> GLOBAL_HBASE_COUNTER_METADATA_INCONSISTENCY.increment();
> String regionNameString =
> new
> String(regionLocation.getRegionInfo().getRegionName(),
> StandardCharsets.UTF_8);
> throw new IOException(String.format(
> "HBase region information overlap/inconsistencies on
> region %s", regionNameString));
> }
> {code}
> The above check will NOT check if there are any region holes and full region
> overlaps.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)