ravendb-go-client icon indicating copy to clipboard operation
ravendb-go-client copied to clipboard

race in HiLoIDGenerator

Open kjk opened this issue 6 years ago • 0 comments

repro in goTestBulkInsertCoverage. Generator looks like should be thread-safe but we didn't have tests that triggered that.

==================
WARNING: DATA RACE
Write at 0x00c00037c100 by goroutine 28:
  github.com/ravendb/ravendb-go-client.(*HiLoIDGenerator).GetNextRange()
      /Users/kjk/src/ravendb-go-client/hi_lo_id_generator.go:101 +0x4e9
  github.com/ravendb/ravendb-go-client.(*HiLoIDGenerator).NextID()
      /Users/kjk/src/ravendb-go-client/hi_lo_id_generator.go:82 +0x15f
  github.com/ravendb/ravendb-go-client.(*HiLoIDGenerator).GenerateDocumentID()
      /Users/kjk/src/ravendb-go-client/hi_lo_id_generator.go:58 +0x50
  github.com/ravendb/ravendb-go-client.(*MultiTypeHiLoIDGenerator).GenerateDocumentID()
      /Users/kjk/src/ravendb-go-client/multi_type_hi_lo_id_generator.go:42 +0x1ff
  github.com/ravendb/ravendb-go-client.(*MultiDatabaseHiLoIDGenerator).GenerateDocumentID()
      /Users/kjk/src/ravendb-go-client/multi_database_hi_lo_id_generator.go:35 +0x12e
  github.com/ravendb/ravendb-go-client.(*DocumentStore).Initialize.func1()
      /Users/kjk/src/ravendb-go-client/document_store.go:405 +0x76
  github.com/ravendb/ravendb-go-client.NewBulkInsertOperation.func1()
      /Users/kjk/src/ravendb-go-client/document_conventions.go:181 +0xd9
  github.com/ravendb/ravendb-go-client.(*generateEntityIDOnTheClient).getOrGenerateDocumentID()
      /Users/kjk/src/ravendb-go-client/generate_entity_id_on_the_client.go:30 +0xc5
  github.com/ravendb/ravendb-go-client.(*generateEntityIDOnTheClient).generateDocumentKeyForStorage()
      /Users/kjk/src/ravendb-go-client/generate_entity_id_on_the_client.go:43 +0x50
  github.com/ravendb/ravendb-go-client.(*BulkInsertOperation).GetID()
      /Users/kjk/src/ravendb-go-client/bulk_insert_operation.go:351 +0xb7
  github.com/ravendb/ravendb-go-client.(*BulkInsertOperation).Store()
      /Users/kjk/src/ravendb-go-client/bulk_insert_operation.go:331 +0x88
  github.com/ravendb/ravendb-go-client/tests.goTestBulkInsertCoverage.func1()
      /Users/kjk/src/ravendb-go-client/tests/go1_test.go:775 +0x99

Previous read at 0x00c00037c100 by goroutine 30:
  github.com/ravendb/ravendb-go-client.(*HiLoIDGenerator).NextID()
      /Users/kjk/src/ravendb-go-client/hi_lo_id_generator.go:68 +0x58
  github.com/ravendb/ravendb-go-client.(*HiLoIDGenerator).GenerateDocumentID()
      /Users/kjk/src/ravendb-go-client/hi_lo_id_generator.go:58 +0x50
  github.com/ravendb/ravendb-go-client.(*MultiTypeHiLoIDGenerator).GenerateDocumentID()
      /Users/kjk/src/ravendb-go-client/multi_type_hi_lo_id_generator.go:42 +0x1ff
  github.com/ravendb/ravendb-go-client.(*MultiDatabaseHiLoIDGenerator).GenerateDocumentID()
      /Users/kjk/src/ravendb-go-client/multi_database_hi_lo_id_generator.go:35 +0x12e
  github.com/ravendb/ravendb-go-client.(*DocumentStore).Initialize.func1()
      /Users/kjk/src/ravendb-go-client/document_store.go:405 +0x76
  github.com/ravendb/ravendb-go-client.NewBulkInsertOperation.func1()
      /Users/kjk/src/ravendb-go-client/document_conventions.go:181 +0xd9
  github.com/ravendb/ravendb-go-client.(*generateEntityIDOnTheClient).getOrGenerateDocumentID()
      /Users/kjk/src/ravendb-go-client/generate_entity_id_on_the_client.go:30 +0xc5
  github.com/ravendb/ravendb-go-client.(*generateEntityIDOnTheClient).generateDocumentKeyForStorage()
      /Users/kjk/src/ravendb-go-client/generate_entity_id_on_the_client.go:43 +0x50
  github.com/ravendb/ravendb-go-client.(*BulkInsertOperation).GetID()
      /Users/kjk/src/ravendb-go-client/bulk_insert_operation.go:351 +0xb7

kjk avatar Mar 21 '19 23:03 kjk