Skip to content

HBASE-30165 Preserve sibling replicas in location cache - #8570

Open
1fanwang wants to merge 1 commit into
apache:masterfrom
1fanwang:hbase-30165-replica-cache
Open

HBASE-30165 Preserve sibling replicas in location cache#8570
1fanwang wants to merge 1 commit into
apache:masterfrom
1fanwang:hbase-30165-replica-cache

Conversation

@1fanwang

Copy link
Copy Markdown

The async client can update region replica locations one at a time after a move. Before this change, caching replicas 0, 1, and 2 separately left only one replica in the cache, so later lookups for the sibling replicas missed.

Single-location updates now use a synchronized path that replaces only the matching replica. Different primary regions still use the existing replacement path, and complete metadata responses still control the replica-list length.

Jira: https://issues.apache.org/jira/browse/HBASE-30165

Verification

The regression exercises AsyncNonMetaRegionLocator.addLocationToCache in ascending and descending replica order. It also checks that a different primary region with the same start key replaces stale siblings.

Commands and raw output

Before, on d11cafefbcbe8b356aaede41fcf9b153dbf2c2bc with only the regression test applied:

$ JAVA_HOME=$(/usr/libexec/java_home -v 17) mvn -pl hbase-client -Dtest=TestAsyncRegionLocationCache test
[ERROR] Tests run: 2, Failures: 1, Errors: 0, Skipped: 0
[ERROR] TestAsyncRegionLocationCache.testAddingIndividualReplicasPreservesSiblings:55 [0, 1, 2] ==> expected: <3> but was: <1>
[INFO] BUILD FAILURE

After:

$ JAVA_HOME=$(/usr/libexec/java_home -v 17) mvn -pl hbase-client -Dtest=TestAsyncRegionLocationCache test
[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
[INFO] BUILD SUCCESS

The only full-module failure is also present on unmodified master:

$ JAVA_HOME=$(/usr/libexec/java_home -v 17) mvn -pl hbase-client test
[ERROR] TestRegistryEndpointsRefresher.testDurationBetweenRefreshes:121 40 ==> expected: <true> but was: <false>
[ERROR] Tests run: 309, Failures: 1, Errors: 0, Skipped: 0

$ git checkout d11cafefbcbe8b356aaede41fcf9b153dbf2c2bc
$ JAVA_HOME=$(/usr/libexec/java_home -v 17) mvn -pl hbase-client -Dtest=TestRegistryEndpointsRefresher#testDurationBetweenRefreshes test
[ERROR] TestRegistryEndpointsRefresher.testDurationBetweenRefreshes:121 36 ==> expected: <true> but was: <false>
[INFO] BUILD FAILURE

Single-location cache updates used the full metadata merge path, which replaced or truncated sibling replicas. Keep those updates on a separate path while preserving authoritative full-list replacement.

Signed-off-by: 1fanwang <1fannnw@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant