This is an automated email from the ASF dual-hosted git repository. jerrypeng pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/pulsar-client-go.git
The following commit(s) were added to refs/heads/master by this push: new 862285f Fix seg fault when producer with same name is created. (#110) 862285f is described below commit 862285fee18a213289062d855156f44823e5a724 Author: cckellogg <cckell...@gmail.com> AuthorDate: Thu Dec 5 12:28:32 2019 -0800 Fix seg fault when producer with same name is created. (#110) --- pulsar/{impl_producer.go => producer_impl.go} | 3 ++- ...partition_producer.go => producer_partition.go} | 2 +- pulsar/producer_test.go | 28 ++++++++++++++++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/pulsar/impl_producer.go b/pulsar/producer_impl.go similarity index 98% rename from pulsar/impl_producer.go rename to pulsar/producer_impl.go index 6054402..ef0119e 100644 --- a/pulsar/impl_producer.go +++ b/pulsar/producer_impl.go @@ -93,8 +93,9 @@ func newProducer(client *client, options *ProducerOptions) (*producer, error) { if ok { if pe.err != nil { err = pe.err + } else { + p.producers[pe.partition] = pe.prod } - p.producers[pe.partition] = pe.prod } } diff --git a/pulsar/impl_partition_producer.go b/pulsar/producer_partition.go similarity index 99% rename from pulsar/impl_partition_producer.go rename to pulsar/producer_partition.go index 4e2ffd9..474401a 100644 --- a/pulsar/impl_partition_producer.go +++ b/pulsar/producer_partition.go @@ -107,7 +107,7 @@ func newPartitionProducer(client *client, topic string, options *ProducerOptions return nil, err } - p.log = p.log.WithField("name", *p.producerName) + p.log = p.log.WithField("name", p.producerName) p.log.Info("Created producer") p.state = producerReady diff --git a/pulsar/producer_test.go b/pulsar/producer_test.go index d6c8599..196c7f3 100644 --- a/pulsar/producer_test.go +++ b/pulsar/producer_test.go @@ -495,3 +495,31 @@ func TestNonPersistentTopic(t *testing.T) { assert.Nil(t, err) defer consumer.Close() } + +func TestProducerDuplicateNameOnSameTopic(t *testing.T) { + client, err := NewClient(ClientOptions{ + URL: serviceURL, + }) + if err != nil { + t.Fatal(err) + } + defer client.Close() + + topicName := newTopicName() + producerName := "my-producer" + + p1, err := client.CreateProducer(ProducerOptions{ + Topic: topicName, + Name: producerName, + }) + if err != nil { + t.Fatal(err) + } + defer p1.Close() + + _, err = client.CreateProducer(ProducerOptions{ + Topic: topicName, + Name: producerName, + }) + assert.NotNil(t, err, "expected error when creating producer with same name") +}