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

#319 causes test failures in IPFS #321

Closed
anacrolix opened this issue Apr 15, 2019 · 1 comment · Fixed by ipfs/kubo#6222
Closed

#319 causes test failures in IPFS #321

anacrolix opened this issue Apr 15, 2019 · 1 comment · Fixed by ipfs/kubo#6222

Comments

@anacrolix
Copy link
Contributor

@Stebalien incorporating 12c9510 into go-ipfs causes test failure in github.com/ipfs/go-ipfs/core/coreapi/test. I isolated it to a race condition caused by github.com/ipfs/go-datastore@v0.0.4, and found a portentous comment by @vyzo. This repo seemed like the appropriate place to report, as updating this dependency in IPFS will trigger the condition. I found this while rebasing and testing things on IPFS.

==================
WARNING: DATA RACE
Read at 0x00c00098e030 by goroutine 2100:
  runtime.mapaccess2_faststr()
      /Users/anacrolix/src/go1.12/src/runtime/map_faststr.go:107 +0x0
  github.com/ipfs/go-datastore.(*MapDatastore).Get()
      /Users/anacrolix/go/pkg/mod/github.com/ipfs/go-datastore@v0.0.4/basic_ds.go:33 +0x75
  github.com/ipfs/go-datastore/keytransform.(*ktds).Get()
      /Users/anacrolix/go/pkg/mod/github.com/ipfs/go-datastore@v0.0.4/keytransform/keytransform.go:40 +0xcb
  github.com/ipfs/go-datastore/namespace.(*datastore).Get()
      <autogenerated>:1 +0x88
  github.com/ipfs/go-ipfs/filestore.(*FileManager).getDataObj()
      /Users/anacrolix/go/src/github.com/ipfs/go-ipfs/filestore/fsrefstore.go:145 +0xea
  github.com/ipfs/go-ipfs/filestore.(*FileManager).Get()
      /Users/anacrolix/go/src/github.com/ipfs/go-ipfs/filestore/fsrefstore.go:113 +0x59
  github.com/ipfs/go-ipfs/filestore.(*Filestore).Get()
      /Users/anacrolix/go/src/github.com/ipfs/go-ipfs/filestore/filestore.go:149 +0x175
  github.com/ipfs/go-ipfs-blockstore.(*gcBlockstore).Get()
      <autogenerated>:1 +0x7d
  github.com/ipfs/go-ipfs/thirdparty/verifbs.(*VerifBSGC).Get()
      /Users/anacrolix/go/src/github.com/ipfs/go-ipfs/thirdparty/verifbs/verifbs.go:34 +0xd9
  github.com/ipfs/go-ipfs-exchange-offline.(*offlineExchange).GetBlock()
      /Users/anacrolix/go/pkg/mod/github.com/ipfs/go-ipfs-exchange-offline@v0.0.1/offline.go:28 +0x6e
  github.com/ipfs/go-blockservice.getBlock()
      /Users/anacrolix/go/pkg/mod/github.com/ipfs/go-blockservice@v0.0.3/blockservice.go:230 +0x3ab
  github.com/ipfs/go-blockservice.(*blockService).GetBlock()
      /Users/anacrolix/go/pkg/mod/github.com/ipfs/go-blockservice@v0.0.3/blockservice.go:206 +0x1fd
  github.com/ipfs/go-ipfs/core/coreapi.(*BlockAPI).Get()
      /Users/anacrolix/go/src/github.com/ipfs/go-ipfs/core/coreapi/block.go:69 +0x12e
  github.com/ipfs/interface-go-ipfs-core/tests.(*provider).TestAddHashOnly()
      /Users/anacrolix/go/pkg/mod/github.com/ipfs/interface-go-ipfs-core@v0.0.6/tests/unixfs.go:573 +0x475
  github.com/ipfs/interface-go-ipfs-core/tests.(*provider).TestAddHashOnly-fm()
      /Users/anacrolix/go/pkg/mod/github.com/ipfs/interface-go-ipfs-core@v0.0.6/tests/unixfs.go:556 +0x4b
  testing.tRunner()
      /Users/anacrolix/src/go1.12/src/testing/testing.go:865 +0x163

Previous write at 0x00c00098e030 by goroutine 1843:
  runtime.mapassign_faststr()
      /Users/anacrolix/src/go1.12/src/runtime/map_faststr.go:202 +0x0
  github.com/ipfs/go-datastore.(*MapDatastore).Put()
      /Users/anacrolix/go/pkg/mod/github.com/ipfs/go-datastore@v0.0.4/basic_ds.go:27 +0x6f
  github.com/ipfs/go-datastore/sync.(*MutexDatastore).Put()
      /Users/anacrolix/go/pkg/mod/github.com/ipfs/go-datastore@v0.0.4/sync/sync.go:33 +0xce
  github.com/ipfs/go-datastore/keytransform.(*ktds).Put()
      /Users/anacrolix/go/pkg/mod/github.com/ipfs/go-datastore@v0.0.4/keytransform/keytransform.go:35 +0xe0
  github.com/ipfs/go-datastore/namespace.(*datastore).Put()
      <autogenerated>:1 +0xa6
  github.com/ipfs/go-ipfs/provider.(*Queue).work.func1()
      /Users/anacrolix/go/src/github.com/ipfs/go-ipfs/provider/queue.go:137 +0x7f1

Goroutine 2100 (running) created at:
  testing.(*T).Run()
      /Users/anacrolix/src/go1.12/src/testing/testing.go:916 +0x65a
  github.com/ipfs/interface-go-ipfs-core/tests.(*provider).TestUnixfs()
      /Users/anacrolix/go/pkg/mod/github.com/ipfs/interface-go-ipfs-core@v0.0.6/tests/unixfs.go:40 +0x234
  github.com/ipfs/interface-go-ipfs-core/tests.(*provider).TestUnixfs-fm()
      /Users/anacrolix/go/pkg/mod/github.com/ipfs/interface-go-ipfs-core@v0.0.6/tests/unixfs.go:30 +0x4b
  testing.tRunner()
      /Users/anacrolix/src/go1.12/src/testing/testing.go:865 +0x163

Goroutine 1843 (running) created at:
  github.com/ipfs/go-ipfs/provider.(*Queue).work()
      /Users/anacrolix/go/src/github.com/ipfs/go-ipfs/provider/queue.go:114 +0x4c
  github.com/ipfs/go-ipfs/provider.NewQueue()
      /Users/anacrolix/go/src/github.com/ipfs/go-ipfs/provider/queue.go:53 +0x3d5
  github.com/ipfs/go-ipfs/core.setupNode()
      /Users/anacrolix/go/src/github.com/ipfs/go-ipfs/core/builder.go:280 +0x1135
  github.com/ipfs/go-ipfs/core.NewNode()
      /Users/anacrolix/go/src/github.com/ipfs/go-ipfs/core/builder.go:160 +0xa0d
  github.com/ipfs/go-ipfs/core/coreapi/test.NodeProvider.MakeAPISwarm()
      /Users/anacrolix/go/src/github.com/ipfs/go-ipfs/core/coreapi/test/api_test.go:81 +0xa41
  github.com/ipfs/go-ipfs/core/coreapi/test.(*NodeProvider).MakeAPISwarm()
      <autogenerated>:1 +0x81
  github.com/ipfs/interface-go-ipfs-core/tests.(*provider).MakeAPISwarm()
      /Users/anacrolix/go/pkg/mod/github.com/ipfs/interface-go-ipfs-core@v0.0.6/tests/api.go:35 +0x11a
  github.com/ipfs/interface-go-ipfs-core/tests.(*provider).makeAPI()
      /Users/anacrolix/go/pkg/mod/github.com/ipfs/interface-go-ipfs-core@v0.0.6/tests/api.go:15 +0x6d
  github.com/ipfs/interface-go-ipfs-core/tests.(*provider).TestAddHashOnly()
      /Users/anacrolix/go/pkg/mod/github.com/ipfs/interface-go-ipfs-core@v0.0.6/tests/unixfs.go:559 +0xc9
  github.com/ipfs/interface-go-ipfs-core/tests.(*provider).TestAddHashOnly-fm()
      /Users/anacrolix/go/pkg/mod/github.com/ipfs/interface-go-ipfs-core@v0.0.6/tests/unixfs.go:556 +0x4b
  testing.tRunner()
      /Users/anacrolix/src/go1.12/src/testing/testing.go:865 +0x163
==================
==================
WARNING: DATA RACE
Write at 0x00c00098e030 by goroutine 1843:
  runtime.mapassign_faststr()
      /Users/anacrolix/src/go1.12/src/runtime/map_faststr.go:202 +0x0
  github.com/ipfs/go-datastore.(*MapDatastore).Put()
      /Users/anacrolix/go/pkg/mod/github.com/ipfs/go-datastore@v0.0.4/basic_ds.go:27 +0x6f
  github.com/ipfs/go-datastore/sync.(*MutexDatastore).Put()
      /Users/anacrolix/go/pkg/mod/github.com/ipfs/go-datastore@v0.0.4/sync/sync.go:33 +0xce
  github.com/ipfs/go-datastore/keytransform.(*ktds).Put()
      /Users/anacrolix/go/pkg/mod/github.com/ipfs/go-datastore@v0.0.4/keytransform/keytransform.go:35 +0xe0
  github.com/ipfs/go-datastore/namespace.(*datastore).Put()
      <autogenerated>:1 +0xa6
  github.com/ipfs/go-ipfs/provider.(*Queue).work.func1()
      /Users/anacrolix/go/src/github.com/ipfs/go-ipfs/provider/queue.go:137 +0x7f1

Previous read at 0x00c00098e030 by goroutine 2100:
  runtime.mapaccess2_faststr()
      /Users/anacrolix/src/go1.12/src/runtime/map_faststr.go:107 +0x0
  github.com/ipfs/go-datastore.(*MapDatastore).Get()
      /Users/anacrolix/go/pkg/mod/github.com/ipfs/go-datastore@v0.0.4/basic_ds.go:33 +0x75
  github.com/ipfs/go-datastore/keytransform.(*ktds).Get()
      /Users/anacrolix/go/pkg/mod/github.com/ipfs/go-datastore@v0.0.4/keytransform/keytransform.go:40 +0xcb
  github.com/ipfs/go-datastore/namespace.(*datastore).Get()
      <autogenerated>:1 +0x88
  github.com/ipfs/go-ipfs/filestore.(*FileManager).getDataObj()
      /Users/anacrolix/go/src/github.com/ipfs/go-ipfs/filestore/fsrefstore.go:145 +0xea
  github.com/ipfs/go-ipfs/filestore.(*FileManager).Get()
      /Users/anacrolix/go/src/github.com/ipfs/go-ipfs/filestore/fsrefstore.go:113 +0x59
  github.com/ipfs/go-ipfs/filestore.(*Filestore).Get()
      /Users/anacrolix/go/src/github.com/ipfs/go-ipfs/filestore/filestore.go:149 +0x175
  github.com/ipfs/go-ipfs-blockstore.(*gcBlockstore).Get()
      <autogenerated>:1 +0x7d
  github.com/ipfs/go-ipfs/thirdparty/verifbs.(*VerifBSGC).Get()
      /Users/anacrolix/go/src/github.com/ipfs/go-ipfs/thirdparty/verifbs/verifbs.go:34 +0xd9
  github.com/ipfs/go-blockservice.getBlock()
      /Users/anacrolix/go/pkg/mod/github.com/ipfs/go-blockservice@v0.0.3/blockservice.go:219 +0xa4
  github.com/ipfs/go-blockservice.(*blockService).GetBlock()
      /Users/anacrolix/go/pkg/mod/github.com/ipfs/go-blockservice@v0.0.3/blockservice.go:206 +0x1fd
  github.com/ipfs/go-ipfs/core/coreapi.(*BlockAPI).Get()
      /Users/anacrolix/go/src/github.com/ipfs/go-ipfs/core/coreapi/block.go:69 +0x12e
  github.com/ipfs/interface-go-ipfs-core/tests.(*provider).TestAddHashOnly()
      /Users/anacrolix/go/pkg/mod/github.com/ipfs/interface-go-ipfs-core@v0.0.6/tests/unixfs.go:573 +0x475
  github.com/ipfs/interface-go-ipfs-core/tests.(*provider).TestAddHashOnly-fm()
      /Users/anacrolix/go/pkg/mod/github.com/ipfs/interface-go-ipfs-core@v0.0.6/tests/unixfs.go:556 +0x4b
  testing.tRunner()
      /Users/anacrolix/src/go1.12/src/testing/testing.go:865 +0x163

Goroutine 1843 (running) created at:
  github.com/ipfs/go-ipfs/provider.(*Queue).work()
      /Users/anacrolix/go/src/github.com/ipfs/go-ipfs/provider/queue.go:114 +0x4c
  github.com/ipfs/go-ipfs/provider.NewQueue()
      /Users/anacrolix/go/src/github.com/ipfs/go-ipfs/provider/queue.go:53 +0x3d5
  github.com/ipfs/go-ipfs/core.setupNode()
      /Users/anacrolix/go/src/github.com/ipfs/go-ipfs/core/builder.go:280 +0x1135
  github.com/ipfs/go-ipfs/core.NewNode()
      /Users/anacrolix/go/src/github.com/ipfs/go-ipfs/core/builder.go:160 +0xa0d
  github.com/ipfs/go-ipfs/core/coreapi/test.NodeProvider.MakeAPISwarm()
      /Users/anacrolix/go/src/github.com/ipfs/go-ipfs/core/coreapi/test/api_test.go:81 +0xa41
  github.com/ipfs/go-ipfs/core/coreapi/test.(*NodeProvider).MakeAPISwarm()
      <autogenerated>:1 +0x81
  github.com/ipfs/interface-go-ipfs-core/tests.(*provider).MakeAPISwarm()
      /Users/anacrolix/go/pkg/mod/github.com/ipfs/interface-go-ipfs-core@v0.0.6/tests/api.go:35 +0x11a
  github.com/ipfs/interface-go-ipfs-core/tests.(*provider).makeAPI()
      /Users/anacrolix/go/pkg/mod/github.com/ipfs/interface-go-ipfs-core@v0.0.6/tests/api.go:15 +0x6d
  github.com/ipfs/interface-go-ipfs-core/tests.(*provider).TestAddHashOnly()
      /Users/anacrolix/go/pkg/mod/github.com/ipfs/interface-go-ipfs-core@v0.0.6/tests/unixfs.go:559 +0xc9
  github.com/ipfs/interface-go-ipfs-core/tests.(*provider).TestAddHashOnly-fm()
      /Users/anacrolix/go/pkg/mod/github.com/ipfs/interface-go-ipfs-core@v0.0.6/tests/unixfs.go:556 +0x4b
  testing.tRunner()
      /Users/anacrolix/src/go1.12/src/testing/testing.go:865 +0x163

Goroutine 2100 (running) created at:
  testing.(*T).Run()
      /Users/anacrolix/src/go1.12/src/testing/testing.go:916 +0x65a
  github.com/ipfs/interface-go-ipfs-core/tests.(*provider).TestUnixfs()
      /Users/anacrolix/go/pkg/mod/github.com/ipfs/interface-go-ipfs-core@v0.0.6/tests/unixfs.go:40 +0x234
  github.com/ipfs/interface-go-ipfs-core/tests.(*provider).TestUnixfs-fm()
      /Users/anacrolix/go/pkg/mod/github.com/ipfs/interface-go-ipfs-core@v0.0.6/tests/unixfs.go:30 +0x4b
  testing.tRunner()
      /Users/anacrolix/src/go1.12/src/testing/testing.go:865 +0x163
==================
--- FAIL: TestIface (14.12s)
    --- FAIL: TestIface/Dht (1.40s)
        --- FAIL: TestIface/Dht/TestDhtProvide (0.53s)
            dht.go:141: got wrong provider:  != QmYWYa8YRNN8MY77XzjhiSyX5TcHW3vkqeH6mb17LHh2xq
    --- FAIL: TestIface/Unixfs (1.00s)
        --- FAIL: TestIface/Unixfs/TestAddHashOnly (0.06s)
            testing.go:809: race detected during execution of test
        testing.go:809: race detected during execution of test
    testing.go:809: race detected during execution of test
FAIL
FAIL	github.com/ipfs/go-ipfs/core/coreapi/test	14.233s
@Stebalien
Copy link
Member

It isn't related to #319 (comment). The CoreAPI tests need to use a thread-safe datastore.

Stebalien added a commit to ipfs/kubo that referenced this issue Apr 16, 2019
fixes libp2p/go-libp2p-kad-dht#321

License: MIT
Signed-off-by: Steven Allen <steven@stebalien.com>
Stebalien added a commit to ipfs/kubo that referenced this issue May 1, 2019
fixes libp2p/go-libp2p-kad-dht#321

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

Successfully merging a pull request may close this issue.

2 participants