You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by GitBox <gi...@apache.org> on 2021/02/02 13:32:21 UTC

[GitHub] [pulsar-client-go] wuYin opened a new issue #458: MaxReconnectToBroker caused infinite sendTimeout failure even after broker recovered

wuYin opened a new issue #458:
URL: https://github.com/apache/pulsar-client-go/issues/458


   #### Expected behavior
   
   For the `MaxReconnectToBroker` configuration, from the literal meaning, producer retries to reconnect brokers more than `MaxReconnectToBroker` times, the producer should report error and close, or something else. but it did nothing and caused infinite sendTimeout failure, even after broker recoverd, it still keep failing...
   
   ![image](https://user-images.githubusercontent.com/24536920/106605500-ef0ee880-659b-11eb-9e3b-e5e00ea4617a.png)
   
    
   
   
   #### Actual behavior
   
   Infinite sendTimeout
   
   ![image](https://user-images.githubusercontent.com/24536920/106606197-ce935e00-659c-11eb-8dcf-31a234177718.png)
   
   
   #### Steps to reproduce
   - start broker
   - start producer
   - shutdown broker
   - producer reconnection exceed 3 times
   - infinite send failed for using a closed connection which never gonna be recover
   ```go
   func main() {
   	client, err := pulsar.NewClient(pulsar.ClientOptions{
   		URL: "pulsar://localhost:6650",
   	})
   	if err != nil {
   		log.Fatal(err)
   	}
   
   	defer client.Close()
   
   	max := uint(3)
   	producer, err := client.CreateProducer(pulsar.ProducerOptions{
   		Topic:                "topic-1",
   		SendTimeout:          3 * time.Second,
   		MaxReconnectToBroker: &max,
   	})
   	if err != nil {
   		log.Fatal(err)
   	}
   	defer producer.Close()
   	ctx := context.TODO()
   	for i := 0; i < 256; i++ {
   		go func(id int) {
   			for i := 0; i < 1000; i++ {
   				if _, err := producer.Send(ctx, &pulsar.ProducerMessage{Payload: []byte("x")}); err != nil {
   					log.Println(err)
   				}
   				time.Sleep(1 * time.Second)
   			}
   		}(i)
   	}
   	time.Sleep(1 * time.Hour)
   }
   ```
   
   #### How to fix
   
   I think this configuration is unnecessary, there is no such option in java-client
   If part of the partitions is unavailable, partitioner is required to implement dynamic routing to ensure high availability, that is more complicated


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [pulsar-client-go] wolfstudy closed issue #458: MaxReconnectToBroker caused infinite sendTimeout failure even after broker recovered

Posted by GitBox <gi...@apache.org>.
wolfstudy closed issue #458:
URL: https://github.com/apache/pulsar-client-go/issues/458


   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org