@@ -505,7 +505,7 @@ func TestAsyncProducerBrokerBounce(t *testing.T) {
505
505
// When: a broker connection gets reset by a broker (network glitch, restart, you name it).
506
506
leader .Close () // producer should get EOF
507
507
leader = NewMockBrokerAddr (t , 2 , leaderAddr ) // start it up again right away for giggles
508
- seedBroker .Returns (metadataResponse ) // tell it to go to broker 2 again
508
+ leader .Returns (metadataResponse ) // tell it to go to broker 2 again
509
509
510
510
// Then: a produced message goes through the new broker connection.
511
511
producer .Input () <- & ProducerMessage {Topic : "my_topic" , Key : nil , Value : StringEncoder (TestMessage )}
@@ -591,13 +591,13 @@ func TestAsyncProducerMultipleRetries(t *testing.T) {
591
591
metadataLeader2 .AddBroker (leader2 .Addr (), leader2 .BrokerID ())
592
592
metadataLeader2 .AddTopicPartition ("my_topic" , 0 , leader2 .BrokerID (), nil , nil , nil , ErrNoError )
593
593
594
- seedBroker .Returns (metadataLeader2 )
594
+ leader1 .Returns (metadataLeader2 )
595
595
leader2 .Returns (prodNotLeader )
596
- seedBroker .Returns (metadataLeader1 )
596
+ leader2 .Returns (metadataLeader1 )
597
597
leader1 .Returns (prodNotLeader )
598
- seedBroker .Returns (metadataLeader1 )
598
+ leader1 .Returns (metadataLeader1 )
599
599
leader1 .Returns (prodNotLeader )
600
- seedBroker .Returns (metadataLeader2 )
600
+ leader1 .Returns (metadataLeader2 )
601
601
602
602
prodSuccess := new (ProduceResponse )
603
603
prodSuccess .AddTopicPartition ("my_topic" , 0 , ErrNoError )
@@ -653,13 +653,13 @@ func TestAsyncProducerMultipleRetriesWithBackoffFunc(t *testing.T) {
653
653
metadataLeader2 .AddTopicPartition ("my_topic" , 0 , leader2 .BrokerID (), nil , nil , nil , ErrNoError )
654
654
655
655
leader1 .Returns (prodNotLeader )
656
- seedBroker .Returns (metadataLeader2 )
656
+ leader1 .Returns (metadataLeader2 )
657
657
leader2 .Returns (prodNotLeader )
658
- seedBroker .Returns (metadataLeader1 )
658
+ leader2 .Returns (metadataLeader1 )
659
659
leader1 .Returns (prodNotLeader )
660
- seedBroker .Returns (metadataLeader1 )
660
+ leader1 .Returns (metadataLeader1 )
661
661
leader1 .Returns (prodNotLeader )
662
- seedBroker .Returns (metadataLeader2 )
662
+ leader1 .Returns (metadataLeader2 )
663
663
leader2 .Returns (prodSuccess )
664
664
665
665
expectResults (t , producer , 1 , 0 )
@@ -739,16 +739,17 @@ func TestAsyncProducerBrokerRestart(t *testing.T) {
739
739
leader := NewMockBroker (t , 2 )
740
740
741
741
var leaderLock sync.Mutex
742
-
743
- // The seed broker only handles Metadata request
744
- seedBroker .setHandler (func (req * request ) (res encoderWithHeader ) {
742
+ metadataRequestHandlerFunc := func (req * request ) (res encoderWithHeader ) {
745
743
leaderLock .Lock ()
746
744
defer leaderLock .Unlock ()
747
745
metadataLeader := new (MetadataResponse )
748
746
metadataLeader .AddBroker (leader .Addr (), leader .BrokerID ())
749
747
metadataLeader .AddTopicPartition ("my_topic" , 0 , leader .BrokerID (), nil , nil , nil , ErrNoError )
750
748
return metadataLeader
751
- })
749
+ }
750
+
751
+ // The seed broker only handles Metadata request in bootstrap
752
+ seedBroker .setHandler (metadataRequestHandlerFunc )
752
753
753
754
var emptyValues int32 = 0
754
755
@@ -770,14 +771,27 @@ func TestAsyncProducerBrokerRestart(t *testing.T) {
770
771
}
771
772
}
772
773
773
- leader . setHandler ( func (req * request ) (res encoderWithHeader ) {
774
+ failedProduceRequestHandlerFunc := func (req * request ) (res encoderWithHeader ) {
774
775
countRecordsWithEmptyValue (req )
775
776
776
777
time .Sleep (50 * time .Millisecond )
777
778
778
779
prodSuccess := new (ProduceResponse )
779
780
prodSuccess .AddTopicPartition ("my_topic" , 0 , ErrNotLeaderForPartition )
780
781
return prodSuccess
782
+ }
783
+
784
+ succeededProduceRequestHandlerFunc := func (req * request ) (res encoderWithHeader ) {
785
+ countRecordsWithEmptyValue (req )
786
+
787
+ prodSuccess := new (ProduceResponse )
788
+ prodSuccess .AddTopicPartition ("my_topic" , 0 , ErrNoError )
789
+ return prodSuccess
790
+ }
791
+
792
+ leader .SetHandlerFuncByMap (map [string ]requestHandlerFunc {
793
+ "ProduceRequest" : failedProduceRequestHandlerFunc ,
794
+ "MetadataRequest" : metadataRequestHandlerFunc ,
781
795
})
782
796
783
797
config := NewTestConfig ()
@@ -816,12 +830,9 @@ func TestAsyncProducerBrokerRestart(t *testing.T) {
816
830
leaderLock .Lock ()
817
831
leader = NewMockBroker (t , 2 )
818
832
leaderLock .Unlock ()
819
- leader .setHandler (func (req * request ) (res encoderWithHeader ) {
820
- countRecordsWithEmptyValue (req )
821
-
822
- prodSuccess := new (ProduceResponse )
823
- prodSuccess .AddTopicPartition ("my_topic" , 0 , ErrNoError )
824
- return prodSuccess
833
+ leader .SetHandlerFuncByMap (map [string ]requestHandlerFunc {
834
+ "ProduceRequest" : succeededProduceRequestHandlerFunc ,
835
+ "MetadataRequest" : metadataRequestHandlerFunc ,
825
836
})
826
837
827
838
wg .Wait ()
@@ -938,7 +949,7 @@ func TestAsyncProducerRetryWithReferenceOpen(t *testing.T) {
938
949
producer .Input () <- & ProducerMessage {Topic : "my_topic" , Key : nil , Value : StringEncoder (TestMessage )}
939
950
940
951
// tell partition 0 to go to that broker again
941
- seedBroker .Returns (metadataResponse )
952
+ leader .Returns (metadataResponse )
942
953
943
954
// succeed this time
944
955
prodSuccess = new (ProduceResponse )
@@ -994,14 +1005,11 @@ func TestAsyncProducerFlusherRetryCondition(t *testing.T) {
994
1005
995
1006
time .Sleep (50 * time .Millisecond )
996
1007
997
- leader .SetHandlerByMap (map [string ]MockResponse {
998
- "ProduceRequest" : NewMockProduceResponse (t ).
999
- SetVersion (0 ).
1000
- SetError ("my_topic" , 0 , ErrNoError ),
1001
- })
1002
-
1003
1008
// tell partition 0 to go to that broker again
1004
- seedBroker .Returns (metadataResponse )
1009
+ leader .Returns (metadataResponse )
1010
+ prodSuccess := new (ProduceResponse )
1011
+ prodSuccess .AddTopicPartition ("my_topic" , 0 , ErrNoError )
1012
+ leader .Returns (prodSuccess )
1005
1013
1006
1014
// succeed this time
1007
1015
expectResults (t , producer , 5 , 0 )
@@ -1010,6 +1018,9 @@ func TestAsyncProducerFlusherRetryCondition(t *testing.T) {
1010
1018
for i := 0 ; i < 5 ; i ++ {
1011
1019
producer .Input () <- & ProducerMessage {Topic : "my_topic" , Key : nil , Value : StringEncoder (TestMessage ), Partition : 0 }
1012
1020
}
1021
+ prodSuccess = new (ProduceResponse )
1022
+ prodSuccess .AddTopicPartition ("my_topic" , 0 , ErrNoError )
1023
+ leader .Returns (prodSuccess )
1013
1024
expectResults (t , producer , 5 , 0 )
1014
1025
1015
1026
// shutdown
@@ -1051,7 +1062,7 @@ func TestAsyncProducerRetryShutdown(t *testing.T) {
1051
1062
prodNotLeader .AddTopicPartition ("my_topic" , 0 , ErrNotLeaderForPartition )
1052
1063
leader .Returns (prodNotLeader )
1053
1064
1054
- seedBroker .Returns (metadataLeader )
1065
+ leader .Returns (metadataLeader )
1055
1066
1056
1067
prodSuccess := new (ProduceResponse )
1057
1068
prodSuccess .AddTopicPartition ("my_topic" , 0 , ErrNoError )
0 commit comments