[
https://issues.apache.org/jira/browse/HBASE-30094?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
ASF GitHub Bot updated HBASE-30094:
-----------------------------------
Labels: pull-request-available (was: )
> Flaky tests rerun may enter incorrect state
> -------------------------------------------
>
> Key: HBASE-30094
> URL: https://issues.apache.org/jira/browse/HBASE-30094
> Project: HBase
> Issue Type: Sub-task
> Reporter: Duo Zhang
> Priority: Major
> Labels: pull-request-available
>
> Sonnet 4.5(4.6?) summary for TestRollbackSCP
> Root cause
> Surefire reruns failed tests in the same JVM without running @BeforeClass
> again. The test used a static INJECTED flag with compareAndSet(false, t rue)
> so fault injection (and setKillAndToggleBeforeStoreUpdateInRollback) only ran
> once per JVM.
> After the first failure (e.g. IllegalArgumentException: scheduler queue not
> empty at restartMasterProcedureExecutor), INJECTED stayed true. On reruns,
> compareAndSet did nothing, so the executor was never killed in rollback and
> procExec.isRunning() stayed true, which made waitFor(30000, () ->
> !procExec.isRunning()) always time out.
> So the “three different failures” were really: first attempt hit the real
> error at line 180; attempts 2–3 were misleading timeouts at line 177 caused
> by broken rerun state, not the original bug.
> Fix
> In @Before (which does run before each attempt, including reruns), reset
> test-only state:
> INJECTED.set(false) so injection can arm again on each run.
> ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdateInRollback(procExec,
> false) so procedure-executor kill flags from the previous attempt are cleared.
> That makes each Surefire attempt behave like a fresh test with respect to
> injection, so reruns can pass when the underlying issue is fixed or flaky.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)