[
https://issues.apache.org/jira/browse/KAFKA-21219?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Lianet Magrans updated KAFKA-21219:
-----------------------------------
Component/s: clients
streams
> Streams group dynamic member close can stall with REMAIN_IN_GROUP after poll
> timeout
> ------------------------------------------------------------------------------------
>
> Key: KAFKA-21219
> URL: https://issues.apache.org/jira/browse/KAFKA-21219
> Project: Kafka
> Issue Type: Bug
> Components: clients, streams
> Reporter: sanghyeok An
> Assignee: sanghyeok An
> Priority: Major
> Labels: client, streams
>
> Closing a Streams group dynamic member with {{REMAIN_IN_GROUP}} can leave the
> close future incomplete when the poll timer has expired.
> {{StreamsMembershipManager.isLeavingGroup()}} returns {{false}} for dynamic
> members using {{{}REMAIN_IN_GROUP{}}}, even when their state is
> {{PREPARE_LEAVING}} or {{{}LEAVING{}}}. Consequently,
> {{StreamsGroupHeartbeatRequestManager.poll()}} enters the poll timeout branch
> despite the member already leaving.
> When the member is in {{{}LEAVING{}}}, {{onPollTimerExpired()}} attempts to
> transition it back to {{{}PREPARE_LEAVING{}}}, throwing:
>
> {{IllegalStateException: Invalid state transition from LEAVING to
> PREPARE_LEAVING}}
> This exception occurs before a heartbeat request is generated and prevents
> the normal path from skipping the leave heartbeat and completing the close
> future.
> *Reproduction conditions*
> # Join a Streams group as a dynamic member without configuring
> {{{}group.instance.id{}}}.
> # Allow the application poll interval to exceed {{{}max.poll.interval.ms{}}}.
> # Before the heartbeat manager processes the poll timeout, process a close
> request with {{{}REMAIN_IN_GROUP{}}}, transitioning the member to
> {{{}LEAVING{}}}.
> # On the next heartbeat manager {{{}poll(){}}}, the invalid state transition
> exception occurs.
> *Expected behavior*
> Poll timeout handling should not initiate another leave operation while the
> member is already preparing to leave or leaving.
> For a dynamic member closing with {{{}REMAIN_IN_GROUP{}}}, once the member
> reaches {{{}LEAVING{}}}, the client should skip the leave heartbeat,
> transition to {{{}UNSUBSCRIBED{}}}, and complete the close future normally.
> While in {{{}PREPARE_LEAVING{}}}, regular heartbeats may continue until the
> pending callback completes.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)