Lianet Magrans created KAFKA-17170:
--------------------------------------

             Summary: Add test to ensure new consumer acks reconciled 
assignment even if first HB with ack lost
                 Key: KAFKA-17170
                 URL: https://issues.apache.org/jira/browse/KAFKA-17170
             Project: Kafka
          Issue Type: Task
          Components: clients, consumer
            Reporter: Lianet Magrans


When a consumer reconciles an assignment, it transitions to ACKNOWLEDGING, so 
that a HB is sent on the next manager poll, without waiting for the interval. 
The consumer transitions out of this ack state as soon as it sends the 
heartbeat, without waiting for a response. This is based on the expectation 
that following heartbeats (sent on the interval) will act as ack, including the 
set of partitions even in case the first ack is lost. This is the expected flow:
 # complete reconciliation and send HB1 to ack assignment tp0 
 # send following HBs on interval (won't include tp0, given that it notices 
it's value did not change since last HB)
 # HB1 times out (or fails in any way) => heartbeat request manager resets the 
sentFields to null (HeartbeatState.reset() , triggered if the request fails, or 
if it gets a response with an Error)
 # following HB will include tp0 (and act as ack), because it will notice that 
tp0 != null (last value sent)

This seems not to be covered by any test, so we should add a unit test to the 
HeartbeatRequestManager, to ensure that the HB generated in step 4 above 
includes tp0 as I expect :)

This flow is important because if failing to send the reconciled partitions in 
a HB, the broker would remain waiting for an ack that the member would 
considered it already sent (the broker would wait for the rebalance timeout and 
then re-assigning those partitions)



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

Reply via email to