mazhengxuan created HBASE-30344:
-----------------------------------

             Summary: [Flaky Test] TestSyncReplicationStandbyKillMaster may 
verify before RegionServer sync state converges
                 Key: HBASE-30344
                 URL: https://issues.apache.org/jira/browse/HBASE-30344
             Project: HBase
          Issue Type: Bug
          Components: Replication, test
         Environment: Apache HBase master

GitHub Actions:
JDK17 Hadoop3 Unit Check, large-wave-3

Failed workflow job:
https://github.com/apache/hbase/actions/runs/33056801754/job/98468827602
            Reporter: mazhengxuan
            Assignee: mazhengxuan


TestSyncReplicationStandbyKillMaster is still flaky on master after HBASE-30249.

It failed in the JDK17 Hadoop3 Unit Check for apache/hbase#8483:

https://github.com/apache/hbase/actions/runs/33056801754/job/98468827602

The first run failed in 
TestSyncReplicationStandbyKillMaster.testStandbyKillMaster. The test waits for 
the peer state reported by Admin to become DOWNGRADE_ACTIVE and then 
immediately verifies the replicated data:

await().atMost(Duration.ofMinutes(3))
  .untilAsserted(() -> assertEquals(
    SyncReplicationState.DOWNGRADE_ACTIVE,
    UTIL2.getAdmin().getReplicationPeerSyncReplicationState(PEER_ID)));

verify(UTIL2, 0, COUNT);

The verification request was rejected by the RegionServer because its local 
sync replication state was still STANDBY:

org.apache.hadoop.hbase.DoNotRetryIOException:
SyncRep,... is in STANDBY state.
  at 
org.apache.hadoop.hbase.regionserver.RSRpcServices.rejectIfInStandByState(...)
  at org.apache.hadoop.hbase.regionserver.RSRpcServices.get(...)

The Admin result reflects the peer state on the Master side. The RegionServer 
learns about this state asynchronously, so observing DOWNGRADE_ACTIVE through 
Admin does not mean that every RegionServer has already applied the transition.

The Surefire retries then failed during setup with:

1. java.io.IOException: Shutting down
2. java.lang.IllegalStateException: A mini-cluster is already running

These look like follow-up failures caused by the cluster cleanup after the 
first run failed.

HBASE-30249 made the Master failure injection deterministic, but the test still 
does not wait for the RegionServer-side state transition before calling 
verify().

The test should wait, with a timeout, until the RegionServer serving the table 
no longer rejects requests because of the STANDBY state. This should be handled 
as test synchronization unless further investigation shows that the 
RegionServer state never converges.

The failure can be reproduced with Surefire retries disabled:

mvn -pl hbase-server -am \
  -Dtest=TestSyncReplicationStandbyKillMaster \
  -Dsurefire.failIfNoSpecifiedTests=false \
  -Dsurefire.rerunFailingTestsCount=0 \
  -DskipITs \
  test

Related:

* HBASE-30249
* https://github.com/apache/hbase/pull/8393
* https://github.com/apache/hbase/pull/8483



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to