[
https://issues.apache.org/jira/browse/PHOENIX-7003?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17768911#comment-17768911
]
ASF GitHub Bot commented on PHOENIX-7003:
-----------------------------------------
Divneet18 commented on code in PR #1686:
URL: https://github.com/apache/phoenix/pull/1686#discussion_r1336401463
##########
phoenix-core/src/test/java/org/apache/phoenix/query/ConnectionQueryServicesImplTest.java:
##########
@@ -194,7 +194,28 @@ public void testGetNextRegionStartKey() {
GlobalClientMetrics.GLOBAL_HBASE_COUNTER_METADATA_INCONSISTENCY.getMetric().reset();
when(mockHRegionInfo.getStartKey()).thenReturn(notCorruptedStartKey);
when(mockHRegionInfo.getEndKey()).thenReturn(notCorruptedNewKey);
- testGetNextRegionStartKey(mockCqsi, mockRegionLocation,
notCorruptedEndKey, false);
+ testGetNextRegionStartKey(mockCqsi, mockRegionLocation,
notCorruptedEndKey, true);
Review Comment:
for the new region, the startKey in this case is 0x2999 and endKey is
0x3001. The previous regions end key is 0x3000 leading to an overlap. Hence,
isCorrupted is true here. However, your confusion makes sense because the
variable names were incorrect. I have updated the variable names to start with
"corrupted" in all cases where isCorrupted is true and "notCorrupted"
otherwise. I have pushed with new changes. Please review!
> 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)