@@ -940,6 +940,7 @@ static void rd_kafka_toppar_handle_OffsetForLeaderEpoch(rd_kafka_t *rk,
940940        rd_kafka_toppar_lock (rktp );
941941        rktp -> rktp_flags  &= ~RD_KAFKA_TOPPAR_F_VALIDATING ;
942942        rd_kafka_toppar_unlock (rktp );
943+         rd_bool_t  assignment_serve  =  rd_false ;
943944
944945        if  (err  ==  RD_KAFKA_RESP_ERR__DESTROY ) {
945946                rd_kafka_toppar_destroy (rktp ); /* Drop refcnt */ 
@@ -1084,12 +1085,28 @@ static void rd_kafka_toppar_handle_OffsetForLeaderEpoch(rd_kafka_t *rk,
10841085                           rktp -> rktp_partition , end_offset ,
10851086                           end_offset_leader_epoch );
10861087
1087-                 rd_kafka_toppar_set_fetch_state (rktp ,
1088-                                                 RD_KAFKA_TOPPAR_FETCH_ACTIVE );
1088+                 if  (rd_kafka_is_simple_consumer (rk ) ||  rktp -> rktp_started ) {
1089+                         /* Already started, just set state to active */ 
1090+                         rd_kafka_toppar_set_fetch_state (
1091+                             rktp , RD_KAFKA_TOPPAR_FETCH_ACTIVE );
1092+                 } else  {
1093+                         rd_kafka_topic_partition_t  * rktpar_pending  = 
1094+                             rd_kafka_topic_partition_list_add_copy (
1095+                                 rk -> rk_consumer .assignment .pending , rktpar );
1096+                         rd_kafka_topic_partition_set_from_fetch_pos (
1097+                             rktpar_pending , rktp -> rktp_offset_validation_pos );
1098+                         rd_kafka_topic_partition_set_fetch_pos_validated (
1099+                             rktpar_pending , rd_true );
1100+                         /* Serve the assignment after releasing the lock 
1101+                          * to respect lock order. */ 
1102+                         assignment_serve  =  rd_true ;
1103+                 }
10891104        }
10901105
10911106done :
10921107        rd_kafka_toppar_unlock (rktp );
1108+         if  (assignment_serve )
1109+                 rd_kafka_assignment_serve (rk );
10931110
10941111        if  (parts )
10951112                rd_kafka_topic_partition_list_destroy (parts );
0 commit comments