[ https://issues.apache.org/jira/browse/KAFKA-17489?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Matthias J. Sax updated KAFKA-17489: ------------------------------------ Affects Version/s: 3.8.0 > IllegalStateException if failed task is removed from state updater > ------------------------------------------------------------------ > > Key: KAFKA-17489 > URL: https://issues.apache.org/jira/browse/KAFKA-17489 > Project: Kafka > Issue Type: Task > Components: streams > Affects Versions: 3.8.0 > Reporter: Bruno Cadonna > Assignee: Bruno Cadonna > Priority: Blocker > Fix For: 3.9.0 > > > If a task that is managed by the state updater fails (e.g. > {{OffsetOutOfRangeException}}) and this same task is removed from the state > updater, the task is regarded as corrupted and put into the task registry > waiting for handling. > Now there are multiple ways this leads to an {{IllegalStateException}}: > 1. In {{handleAssignment()}} the tasks in the state updater are handled > before the tasks in the task registry. It could happen that a failed standby > task is removed from the state updater and is put in the task registry. When > the tasks in the task registry are handled, the standby task is identified. > However, with the state updater it is illegal to have standby tasks in the > task regsitry. The following {{IllegalStateException}} is thrown: > {code:java} > java.lang.IllegalStateException: Standby tasks should only be managed by the > state updater, but standby task 1_0 is managed by the stream thread > {code} > 2. If a failed active task is removed from the state updater during handle > revocation ({{onPartitionRevoked()}} call in the {{ConsumerCoordinator}}), > the exception of the failed task is not immediately thrown by the > {{ConsumerCoordinator#onJoinComplete()}} method. The exception is stored and > {{onAssignment}} is called. Additionally, the failed task is put into the > task registry for later handling. Method {{onAssignment}} calls the > {{handleAssignment()}} which as above handles the tasks in the task registry. > Here two {{IllegalStateException}} are thrown: > {code:java} > java.lang.IllegalStateException: Illegal state RESTORING while recycling > active task 2_1 > {code} > (This exception may differ according to the handling, e.g., recycling or > re-assigning) > and > {code:java} > java.lang.IllegalStateException: Task unknown: 2_1 > {code} > The latter occurs because the failed task is handled and remove from the task > regsistry in {{handleAssignment()}} although it should stay there until the > original exception is handled. > -- This message was sent by Atlassian Jira (v8.20.10#820010)