You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@phoenix.apache.org by "Rushabh Shah (Jira)" <ji...@apache.org> on 2023/07/25 22:10:00 UTC

[jira] [Commented] (PHOENIX-7003) Harden hbase region inconsistencies check in CQSI#getAllTableRegions method.

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