@@ -785,9 +785,8 @@ void rd_kafka_cgrp_coord_query(rd_kafka_cgrp_t *rkcg, const char *reason) {
785
785
return ;
786
786
}
787
787
788
- if (rkcg -> rkcg_state == RD_KAFKA_CGRP_STATE_QUERY_COORD ) {
788
+ if (rkcg -> rkcg_state == RD_KAFKA_CGRP_STATE_QUERY_COORD )
789
789
rd_kafka_cgrp_set_state (rkcg , RD_KAFKA_CGRP_STATE_WAIT_COORD );
790
- }
791
790
792
791
rd_kafka_broker_destroy (rkb );
793
792
@@ -901,8 +900,13 @@ static void rd_kafka_cgrp_consumer_reset(rd_kafka_cgrp_t *rkcg) {
901
900
rd_kafka_topic_partition_list_destroy );
902
901
rkcg -> rkcg_next_target_assignment = NULL ;
903
902
rkcg -> rkcg_current_assignment = rd_kafka_topic_partition_list_new (0 );
904
- rkcg -> rkcg_consumer_flags &= ~RD_KAFKA_CGRP_CONSUMER_F_WAIT_ACK &
905
- ~RD_KAFKA_CGRP_CONSUMER_F_WAIT_REJOIN ;
903
+
904
+ /* Leave only specified flags, reset the rest */
905
+ rkcg -> rkcg_consumer_flags =
906
+ (rkcg -> rkcg_consumer_flags &
907
+ RD_KAFKA_CGRP_CONSUMER_F_SUBSCRIBED_ONCE ) |
908
+ (rkcg -> rkcg_consumer_flags &
909
+ RD_KAFKA_CGRP_CONSUMER_F_WAIT_REJOIN_TO_COMPLETE );
906
910
}
907
911
908
912
/**
@@ -2704,45 +2708,44 @@ rd_kafka_cgrp_consumer_assignment_with_metadata(
2704
2708
for (i = 0 ; i < assignment -> cnt ; i ++ ) {
2705
2709
struct rd_kafka_metadata_cache_entry * rkmce ;
2706
2710
rd_kafka_topic_partition_t * rktpar ;
2711
+ char * topic_name = NULL ;
2707
2712
rd_kafka_Uuid_t request_topic_id =
2708
2713
rd_kafka_topic_partition_get_topic_id (
2709
2714
& assignment -> elems [i ]);
2715
+
2710
2716
rd_kafka_rdlock (rk );
2711
2717
rkmce =
2712
2718
rd_kafka_metadata_cache_find_by_id (rk , request_topic_id , 1 );
2713
2719
2714
- if (rkmce ) {
2715
- rd_kafka_topic_partition_list_add_with_topic_name_and_id (
2716
- assignment_with_metadata , request_topic_id ,
2717
- rkmce -> rkmce_mtopic .topic ,
2718
- assignment -> elems [i ].partition );
2719
- rd_kafka_rdunlock (rk );
2720
- continue ;
2721
- }
2720
+ if (rkmce )
2721
+ topic_name = rd_strdup (rkmce -> rkmce_mtopic .topic );
2722
2722
rd_kafka_rdunlock (rk );
2723
2723
2724
- rktpar = rd_kafka_topic_partition_list_find_topic_by_id (
2725
- rkcg -> rkcg_current_assignment , request_topic_id );
2726
- if (rktpar ) {
2724
+ if (unlikely (!topic_name )) {
2725
+ rktpar = rd_kafka_topic_partition_list_find_topic_by_id (
2726
+ rkcg -> rkcg_current_assignment , request_topic_id );
2727
+ if (rktpar )
2728
+ topic_name = rd_strdup (rktpar -> topic );
2729
+ }
2730
+
2731
+ if (likely (topic_name != NULL )) {
2727
2732
rd_kafka_topic_partition_list_add_with_topic_name_and_id (
2728
2733
assignment_with_metadata , request_topic_id ,
2729
- rktpar -> topic , assignment -> elems [i ].partition );
2734
+ topic_name , assignment -> elems [i ].partition );
2735
+ rd_free (topic_name );
2730
2736
continue ;
2731
2737
}
2732
2738
2733
2739
if (missing_topic_ids ) {
2734
- rd_kafka_Uuid_t topic_id ;
2735
2740
if (unlikely (!* missing_topic_ids ))
2736
2741
* missing_topic_ids =
2737
2742
rd_list_new (1 , rd_list_Uuid_destroy );
2738
- topic_id = rd_kafka_topic_partition_get_topic_id (
2739
- & assignment -> elems [i ]);
2740
2743
rd_list_add (* missing_topic_ids ,
2741
- rd_kafka_Uuid_copy (& topic_id ));
2744
+ rd_kafka_Uuid_copy (& request_topic_id ));
2742
2745
}
2743
2746
rd_kafka_dbg (rkcg -> rkcg_rk , CGRP , "HEARTBEAT" ,
2744
2747
"Metadata not found for the "
2745
- "assigned topic id - %s."
2748
+ "assigned topic id: %s."
2746
2749
" Continuing without it" ,
2747
2750
rd_kafka_Uuid_base64str (& request_topic_id ));
2748
2751
}
0 commit comments