apache / apache/pulsar-client-go

producer.Send() blocks forever for closed producer

Open
#495 2 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.