apache / apache/pulsar-client-go
producer.Send() blocks forever for closed producer
- Dominant language
- Go
- Stars
- 745
- Forks
- 389
- Avg merge
- 3d 20h
- Merged PRs (30d)
- 3
Description
#### Expected behavior
In the following case
```
producer.Close()
_, err := producer.Send(...)
```
`producer.Send()` must return immediately with error like `producer closed`.
Method `producer.SendAsync()` must call passed callback and set parameter error to the `producer closed`.
#### Actual behavior
`producer.Send()` - blocks forever
`producer.SendAsync()` - will never call passed callback
#### Steps to reproduce
Simplest example will block:
```
func main() {
client, err := pulsar.NewClient(pulsar.ClientOptions{
URL: "",
})
if err != nil {
log.Fatalf("error: %v", err)
}
defer client.Close()
producer, err := client.CreateProducer(pulsar.ProducerOptions{
Topic: "",
})
if err != nil {
log.Fatalf("error: %v", err)
}
defer producer.Close()
producer.Close()
_, err = producer.Send(context.TODO(), &pulsar.ProducerMessage{
Payload: []byte("test"),
})
if err != nil {
log.Fatalf("error: %v", err)
}
}
```
#### System configuration
**Pulsar version**: 2.7
Contributor guide
Assessment
This issue has not been assessed yet.