apache / apache/pulsar-client-go

Access to partitionConsumer state not thread-safe.

Open
#448 3 comments 0 reactions 0 assignees View on GitHub
Dominant language
Go
Stars
745
Forks
389
Avg merge
3d 20h
Merged PRs (30d)
3

Description

As part of my testing of the fix for #432, I have discovered a race condition in consumer_partition.go where access to the struct's `state` member is modified concurrently without synchronization:

```
WARNING: DATA RACE
Read at 0x00c00039a918 by goroutine 9:
github.com/apache/pulsar-client-go/pulsar.(*partitionConsumer).clearQueueAndGetNextMessage()
/Users/me/pulsar-client-go/pulsar/consumer_partition.go:911 +0x68
github.com/apache/pulsar-client-go/pulsar.(*partitionConsumer).clearReceiverQueue()
/Users/me/pulsar-client-go/pulsar/consumer_partition.go:932 +0x84
github.com/apache/pulsar-client-go/pulsar.(*partitionConsumer).grabConn()
/Users/me/pulsar-client-go/pulsar/consumer_partition.go:861 +0x1312
github.com/apache/pulsar-client-go/pulsar.(*partitionConsumer).reconnectToBroker()
/Users/me/pulsar-client-go/pulsar/consumer_partition.go:802 +0x238
github.com/apache/pulsar-client-go/pulsar.(*partitionConsumer).runEventsLoop.func2()
/Users/me/pulsar-client-go/pulsar/consumer_partition.go:711 +0xab

Previous write at 0x00c00039a918 by goroutine 70:
github.com/apache/pulsar-client-go/pulsar.(*partitionConsumer).internalClose()
/Users/me/pulsar-client-go/pulsar/consumer_partition.go:772 +0x68f
github.com/apache/pulsar-client-go/pulsar.(*partitionConsumer).runEventsLoop()
/Users/me/pulsar-client-go/pulsar/consumer_partition.go:732 +0x29b

Goroutine 9 (running) created at:
github.com/apache/pulsar-client-go/pulsar.(*partitionConsumer).runEventsLoop()
/Users/me/pulsar-client-go/pulsar/consumer_partition.go:704 +0x146

Goroutine 70 (finished) created at:
github.com/apache/pulsar-client-go/pulsar.newPartitionConsumer()
/Users/me/pulsar-client-go/pulsar/consumer_partition.go:184 +0xead
github.com/apache/pulsar-client-go/pulsar.(*consumer).internalTopicSubscribeToPartitions.func1()
/Users/me/pulsar-client-go/pulsar/consumer_impl.go:314 +0x7d3
```

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.