fission-codes / go-car-mirror

Generic Go implementation of the CAR Mirror protocol
Apache License 2.0
4 stars 0 forks source link

Race conditions #106

Closed justindotpub closed 1 year ago

justindotpub commented 1 year ago

Dumping race conditions I discover here.

==================
WARNING: DATA RACE
Write at 0x00c0002bc068 by goroutine 9:
  github.com/fission-codes/go-bitset.(*BitSet).Union()
      /Users/justin/.go/pkg/mod/github.com/fission-codes/go-bitset@v0.0.0-20221117212908-fdb519e34c69/bitset.go:61 +0xc8
  github.com/fission-codes/go-bloom.(*Filter[...]).Union()
      /Users/justin/.go/pkg/mod/github.com/fission-codes/go-bloom@v0.0.0-20221130203706-f6093fcbce27/bloom.go:160 +0xb8
  github.com/fission-codes/go-car-mirror/filter.(*BloomFilter[...]).TryAddAll()
      /Users/justin/Code/car-pool/go-car-mirror/filter/filter.go:409 +0x794
  github.com/fission-codes/go-car-mirror/filter.(*BloomFilter[...]).AddAll()
      /Users/justin/Code/car-pool/go-car-mirror/filter/filter.go:431 +0xdc
  github.com/fission-codes/go-car-mirror/filter.(*BloomFilter[...]).AddAll()
      <autogenerated>:1 +0x48
  github.com/fission-codes/go-car-mirror/core.(*SourceSession[...]).HandleStatus()
      /Users/justin/Code/car-pool/go-car-mirror/core/core.go:753 +0x38c
  github.com/fission-codes/go-car-mirror/core.(*SourceSession[...]).HandleStatus()
      <autogenerated>:1 +0x60
  github.com/fission-codes/go-car-mirror/batch.(*SimpleBatchStatusReceiver[...]).HandleStatus()
      /Users/justin/Code/car-pool/go-car-mirror/batch/batch.go:426 +0xe8
  github.com/fission-codes/go-car-mirror/core_test_test.(*StatusChannel).listen()
      /Users/justin/Code/car-pool/go-car-mirror/core_test/carmirror_test.go:178 +0x234
  github.com/fission-codes/go-car-mirror/core_test_test.MockBatchTransferReceive.func4()
      /Users/justin/Code/car-pool/go-car-mirror/core_test/carmirror_test.go:406 +0x78

Previous read at 0x00c0002bc068 by goroutine 12:
  github.com/fission-codes/go-bitset.(*BitSet).Test()
      /Users/justin/.go/pkg/mod/github.com/fission-codes/go-bitset@v0.0.0-20221117212908-fdb519e34c69/bitset.go:45 +0x200
  github.com/fission-codes/go-bloom.(*Filter[...]).Test()
      /Users/justin/.go/pkg/mod/github.com/fission-codes/go-bloom@v0.0.0-20221130203706-f6093fcbce27/bloom.go:135 +0x1b4
  github.com/fission-codes/go-car-mirror/filter.(*BloomFilter[...]).DoesNotContain()
      /Users/justin/Code/car-pool/go-car-mirror/filter/filter.go:385 +0xa4
  github.com/fission-codes/go-car-mirror/filter.(*BloomFilter[...]).DoesNotContain()
      <autogenerated>:1 +0x54
  github.com/fission-codes/go-car-mirror/core.(*SourceSession[...]).Run()
      /Users/justin/Code/car-pool/go-car-mirror/core/core.go:702 +0xbe8
  github.com/fission-codes/go-car-mirror/batch.(*SourceResponder[...]).startSourceSession.func1()
      /Users/justin/Code/car-pool/go-car-mirror/batch/responder.go:195 +0xa8

Goroutine 9 (running) created at:
  github.com/fission-codes/go-car-mirror/core_test_test.MockBatchTransferReceive()
      /Users/justin/Code/car-pool/go-car-mirror/core_test/carmirror_test.go:404 +0x5bc
  github.com/fission-codes/go-car-mirror/core_test_test.TestMockTransferToEmptyStoreSingleBatchNoDelayReceive()
      /Users/justin/Code/car-pool/go-car-mirror/core_test/carmirror_test.go:479 +0x214
  testing.tRunner()
      /nix/store/6q1x08acxmpcwx9f9zvn0xkijlf5d3h1-go-1.19.4/share/go/src/testing/testing.go:1446 +0x188
  testing.(*T).Run.func1()
      /nix/store/6q1x08acxmpcwx9f9zvn0xkijlf5d3h1-go-1.19.4/share/go/src/testing/testing.go:1493 +0x40

Goroutine 12 (running) created at:
  github.com/fission-codes/go-car-mirror/batch.(*SourceResponder[...]).startSourceSession()
      /Users/justin/Code/car-pool/go-car-mirror/batch/responder.go:194 +0x444
  github.com/fission-codes/go-car-mirror/batch.(*SourceResponder[...]).SourceSessionData.func1()
      /Users/justin/Code/car-pool/go-car-mirror/batch/responder.go:161 +0x90
  github.com/fission-codes/go-car-mirror/util.(*SynchronizedMap[...]).GetOrInsert()
      /Users/justin/Code/car-pool/go-car-mirror/util/util.go:181 +0xc8
  github.com/fission-codes/go-car-mirror/batch.(*SourceResponder[...]).SourceSessionData()
      /Users/justin/Code/car-pool/go-car-mirror/batch/responder.go:158 +0xd8
  github.com/fission-codes/go-car-mirror/batch.(*SourceResponder[...]).Receiver()
      /Users/justin/Code/car-pool/go-car-mirror/batch/responder.go:179 +0x80
  github.com/fission-codes/go-car-mirror/core_test_test.MockBatchTransferReceive.func2()
      /Users/justin/Code/car-pool/go-car-mirror/core_test/carmirror_test.go:387 +0x40
  github.com/fission-codes/go-car-mirror/core_test_test.(*StatusChannel).Receiver()
      /Users/justin/Code/car-pool/go-car-mirror/core_test/carmirror_test.go:162 +0x270
  github.com/fission-codes/go-car-mirror/core_test_test.(*StatusChannel).listen()
      /Users/justin/Code/car-pool/go-car-mirror/core_test/carmirror_test.go:172 +0x254
  github.com/fission-codes/go-car-mirror/core_test_test.MockBatchTransferReceive.func4()
      /Users/justin/Code/car-pool/go-car-mirror/core_test/carmirror_test.go:406 +0x78
==================
justindotpub commented 1 year ago

I have addressed all known race conditions now, and updated tests to always run in race detection mode.