You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@kafka.apache.org by "Eswarar Siva (Jira)" <ji...@apache.org> on 2026/06/22 12:34:00 UTC

[jira] [Commented] (KAFKA-17946) Flaky test DeafultStateUpdaterTest::shouldResumeStandbyTask due to concurrency issue

    [ https://issues.apache.org/jira/browse/KAFKA-17946?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18090587#comment-18090587 ] 

Eswarar Siva commented on KAFKA-17946:
--------------------------------------

[~lucasbru] I looked at the fix you linked (PR #18253). It stabilizes the test (it waits for the state updater to run the
verified calls, or shuts the updater down before verifying) and changes one log line in DefaultStateUpdater; it does
not touch resumeTask or transitToUpdateStandby. So I think the production path behind this is still open.

resumeTask calls changelogReader.transitToUpdateStandby() with no guard on the reader state (only
if (updatingTasks.size() == 1)), and transitToUpdateStandby() still throws IllegalStateException when the reader is
not in ACTIVE_RESTORING. Under pause/resume churn I can drive the reader into STANDBY_UPDATING and then have
resumeTask call transitToUpdateStandby again, which trips that check and kills the StreamThread.

I reproduced it on 4.1.2 and 4.3.0 with a small standalone Streams app (same reproducer as KAFKA-NNNNN, cold start
churn plus pause/resume, with a Byteman rule that widens the existing transition window so it is deterministic). The
error:

java.lang.IllegalStateException: The changelog reader is not restoring active tasks (is STANDBY_UPDATING) while
trying to transit to update standby tasks: {...}
    at StoreChangelogReader.transitToUpdateStandby(StoreChangelogReader.java:326)
    at DefaultStateUpdater$StateUpdaterThread.resumeTask(DefaultStateUpdater.java:661)
    at DefaultStateUpdater$StateUpdaterThread.resumeTasks(...)
    at DefaultStateUpdater$StateUpdaterThread.runOnce(...)

The resumeTask and transitToUpdateStandby code is unchanged from when this was resolved, so the test was stabilized
but the production transition is still not idempotent. Do you want me to reopen this, or file a separate production
facing ticket? I have a Byteman based reproduction I can attach.

> Flaky test DeafultStateUpdaterTest::shouldResumeStandbyTask due to concurrency issue
> ------------------------------------------------------------------------------------
>
>                 Key: KAFKA-17946
>                 URL: https://issues.apache.org/jira/browse/KAFKA-17946
>             Project: Kafka
>          Issue Type: Bug
>          Components: streams
>            Reporter: Ao Li
>            Priority: Major
>
> Function `transitToUpdateStandby` may be called after verify statement is executed. 
> See branch: https://github.com/aoli-al/kafka/tree/KAFKA-111 to reproduce the failure. 
> Test command: ./gradlew cleanTest :streams:test --tests org.apache.kafka.streams.processor.internals.DefaultStateUpdaterTest.shouldResumeStandbyTask



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