[ 
https://issues.apache.org/jira/browse/PHOENIX-7003?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17768913#comment-17768913
 ] 

ASF GitHub Bot commented on PHOENIX-7003:
-----------------------------------------

Divneet18 commented on code in PR #1686:
URL: https://github.com/apache/phoenix/pull/1686#discussion_r1336404898


##########
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:
   Whenever the start key of new region is not same as the end key of the 
previous region it will cause an overlap or a hole. Thats why when the 
compareTo condition is !=0 we want to throw an error. 
   
   the currentKey is the previous regions endKey being used in the 
getAllTableRegions method. Its being called currentKey because of how 
getAllTableRegions iterates over the list and compares but to avoid further 
confusion I have added a comment in the code mentioning currentKey=previous 
regions endKey





> 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)

Reply via email to