Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix producer panic by oldProducers #598

Merged
merged 4 commits into from
Aug 25, 2021

Conversation

wolfstudy
Copy link
Member

Signed-off-by: xiaolongran xiaolongran@tencent.com

Motivation

panic: runtime error: index out of range [1] with length 1

goroutine 166288 [running]:
github.com/apache/pulsar-client-go/pulsar.(*producer).internalCreatePartitionsProducers(0xc0070aa6e0, 0x0, 0x0)
        /Users/lzhuang/scfproj/scf_trigger_v2/vendor/github.com/apache/pulsar-client-go/pulsar/producer_impl.go:194 +0x785
github.com/apache/pulsar-client-go/pulsar.(*producer).runBackgroundPartitionDiscovery.func1(0xc004167cd0, 0xc00559f5c0, 0xc006af6dc0, 0xc0070aa6e0)
        /Users/lzhuang/scfproj/scf_trigger_v2/vendor/github.com/apache/pulsar-client-go/pulsar/producer_impl.go:152 +0xce
created by github.com/apache/pulsar-client-go/pulsar.(*producer).runBackgroundPartitionDiscovery
        /Users/lzhuang/scfproj/scf_trigger_v2/vendor/github.com/apache/pulsar-client-go/pulsar/producer_impl.go:144 +0xcd

Modifications

indexing may panic because of 'nil' slice(oldProducers)

Signed-off-by: xiaolongran <xiaolongran@tencent.com>
@wolfstudy wolfstudy added this to the 0.7.0 milestone Aug 25, 2021
@wolfstudy wolfstudy self-assigned this Aug 25, 2021
Signed-off-by: xiaolongran <xiaolongran@tencent.com>
@wolfstudy wolfstudy changed the title Fix producer panic by oldProducers [WIP]Fix producer panic by oldProducers Aug 25, 2021
Copy link
Contributor

@freeznet freeznet left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Signed-off-by: xiaolongran <xiaolongran@tencent.com>
@wolfstudy
Copy link
Member Author

==================
WARNING: DATA RACE
Read at 0x00c00071a038 by goroutine 332:
  github.com/apache/pulsar-client-go/pulsar.(*producer).getPartition()
      /pulsar-client-go/pulsar/producer_impl.go:281 +0xd6
  github.com/apache/pulsar-client-go/pulsar.(*producer).Send()
      /pulsar-client-go/pulsar/producer_impl.go:269 +0x61
  github.com/apache/pulsar-client-go/pulsar.TestConsumerAddTopicPartitions()
      /pulsar-client-go/pulsar/consumer_test.go:1463 +0x915
  testing.tRunner()
      /usr/local/go/src/testing/testing.go:1050 +0x1eb

Previous write at 0x00c00071a038 by goroutine 9:
  github.com/apache/pulsar-client-go/pulsar.(*producer).internalCreatePartitionsProducers()
      /pulsar-client-go/pulsar/producer_impl.go:179 +0x1e2
  github.com/apache/pulsar-client-go/pulsar.(*producer).runBackgroundPartitionDiscovery.func1()
      /pulsar-client-go/pulsar/producer_impl.go:153 +0xfa

Goroutine 332 (running) created at:
  testing.(*T).Run()
      /usr/local/go/src/testing/testing.go:1095 +0x537
  testing.runTests.func1()
      /usr/local/go/src/testing/testing.go:1339 +0xa6
  testing.tRunner()
      /usr/local/go/src/testing/testing.go:1050 +0x1eb
  testing.runTests()
      /usr/local/go/src/testing/testing.go:1337 +0x594
  testing.(*M).Run()
      /usr/local/go/src/testing/testing.go:1252 +0x2ff
  main.main()
      _testmain.go:432 +0x337

Goroutine 9 (running) created at:
  github.com/apache/pulsar-client-go/pulsar.(*producer).runBackgroundPartitionDiscovery()
      /pulsar-client-go/pulsar/producer_impl.go:145 +0x11b
  github.com/apache/pulsar-client-go/pulsar.newProducer()
      /pulsar-client-go/pulsar/producer_impl.go:133 +0x701
  github.com/apache/pulsar-client-go/pulsar.(*client).CreateProducer()
      /pulsar-client-go/pulsar/client_impl.go:150 +0xb4
  github.com/apache/pulsar-client-go/pulsar.TestConsumerAddTopicPartitions()
      /pulsar-client-go/pulsar/consumer_test.go:1433 +0x39a
  testing.tRunner()
      /usr/local/go/src/testing/testing.go:1050 +0x1eb
==================
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0xed0548]

goroutine 4816 [running]:
github.com/apache/pulsar-client-go/pulsar.(*partitionConsumer).getConsumerState(0x0, 0xc000000001)
	/pulsar-client-go/pulsar/consumer_partition.go:338 +0x48
github.com/apache/pulsar-client-go/pulsar.(*partitionConsumer).Close(0x0)
	/pulsar-client-go/pulsar/consumer_partition.go:347 +0x55
github.com/apache/pulsar-client-go/pulsar.(*consumer).Close.func1.1(0xc0000a4cc0, 0x0)
	/pulsar-client-go/pulsar/consumer_impl.go:519 +0x88
created by github.com/apache/pulsar-client-go/pulsar.(*consumer).Close.func1
	/pulsar-client-go/pulsar/consumer_impl.go:517 +0x1b8

@wolfstudy wolfstudy changed the title [WIP]Fix producer panic by oldProducers Fix producer panic by oldProducers Aug 25, 2021
@wolfstudy
Copy link
Member Author

In this pr, a check for partition scale down is added to avoid the occurrence of the panic:

time="2021-08-24T21:18:27+08:00" level=info msg="[Changed number of partitions in topic]" new_partitions=1 old_partitions=20 topic="persistent://pulsar-ev297bm5n9j4/dogfood/1253970226_lam-1f67hbru"

Signed-off-by: xiaolongran <xiaolongran@tencent.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants