[
https://issues.apache.org/jira/browse/PHOENIX-7003?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17747195#comment-17747195
]
Rushabh Shah commented on PHOENIX-7003:
---------------------------------------
We go through the meta region servers entry sequentially
[here|https://github.com/apache/phoenix/blob/master/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java#L737-L742]
{code}
List<HRegionLocation> locations = Lists.newArrayList();
byte[] currentKey = HConstants.EMPTY_START_ROW;
do {
HRegionLocation regionLocation =
connection.getRegionLocation(
table, currentKey, false);
currentKey = getNextRegionStartKey(regionLocation,
currentKey);
locations.add(regionLocation);
} while (!Bytes.equals(currentKey, HConstants.EMPTY_END_ROW));
{code}
Lets assume there are 2 regions which are serving the same start and end key
(but are different regions), how does hbase resolves this?
> 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
> 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)