filecoin-project / eudico

lotus, but also other things
Other
19 stars 14 forks source link

Data race in subnet #190

Closed dnkolegov closed 2 years ago

dnkolegov commented 2 years ago

If run Eudico subnet tests with race option like this

go test -v -race -tags=2k -count=1 -run TestEudicoSubnet ./itests

we will get the following:


==================
WARNING: DATA RACE
Read at 0x00c004595da0 by goroutine 358:
  runtime.mapaccess1_fast64()
      /opt/homebrew/Cellar/go/1.18.1/libexec/src/runtime/map_fast64.go:13 +0x1cc
  github.com/filecoin-project/lotus/chain/consensus/hierarchical/subnet/manager.(*Subnet).getPrevCheck()
      /Users/alpha/Projects/eudico/chain/consensus/hierarchical/subnet/manager/checkpoint.go:47 +0xcc
  github.com/filecoin-project/lotus/chain/consensus/hierarchical/subnet/manager.(*Subnet).populateCheckpoint()
      /Users/alpha/Projects/eudico/chain/consensus/hierarchical/subnet/manager/checkpoint.go:125 +0x6c
  github.com/filecoin-project/lotus/chain/consensus/hierarchical/subnet/manager.(*SubnetMgr).matchCheckpointSignature()
      /Users/alpha/Projects/eudico/chain/consensus/hierarchical/subnet/manager/events.go:173 +0xaf0
  github.com/filecoin-project/lotus/chain/consensus/hierarchical/subnet/manager.(*SubnetMgr).listenSubnetEvents.func4()
      /Users/alpha/Projects/eudico/chain/consensus/hierarchical/subnet/manager/events.go:91 +0xcc
  github.com/filecoin-project/lotus/chain/events.(*watcherEvents).checkStateChanges()
      /Users/alpha/Projects/eudico/chain/events/events_called.go:350 +0x138
  github.com/filecoin-project/lotus/chain/events.(*hcEventsObserver).Apply()
      /Users/alpha/Projects/eudico/chain/events/events_called.go:125 +0xe0
  github.com/filecoin-project/lotus/chain/events.(*observer).headChange()
      /Users/alpha/Projects/eudico/chain/events/observer.go:233 +0xb34
  github.com/filecoin-project/lotus/chain/events.(*observer).applyChanges()
      /Users/alpha/Projects/eudico/chain/events/observer.go:152 +0x384
  github.com/filecoin-project/lotus/chain/events.(*observer).listenHeadChangesOnce()
      /Users/alpha/Projects/eudico/chain/events/observer.go:126 +0x948
  github.com/filecoin-project/lotus/chain/events.(*observer).listenHeadChanges()
      /Users/alpha/Projects/eudico/chain/events/observer.go:57 +0xa8
  github.com/filecoin-project/lotus/chain/events.(*observer).start.func1()
      /Users/alpha/Projects/eudico/chain/events/observer.go:44 +0x50

Previous write at 0x00c004595da0 by goroutine 396:
  runtime.mapassign_fast64ptr()
      /opt/homebrew/Cellar/go/1.18.1/libexec/src/runtime/map_fast64.go:183 +0x36c
  github.com/filecoin-project/lotus/chain/consensus/hierarchical/subnet/manager.(*Subnet).gcCheckBuf()
      /Users/alpha/Projects/eudico/chain/consensus/hierarchical/subnet/manager/checkpoint.go:76 +0x13c
  github.com/filecoin-project/lotus/chain/consensus/hierarchical/subnet/manager.(*SubnetMgr).matchCheckpointSignature.func1()
      /Users/alpha/Projects/eudico/chain/consensus/hierarchical/subnet/manager/events.go:144 +0x68

Goroutine 358 (running) created at:
  github.com/filecoin-project/lotus/chain/events.(*observer).start()
      /Users/alpha/Projects/eudico/chain/events/observer.go:44 +0xd0
  github.com/filecoin-project/lotus/chain/events.NewEventsWithConfidence()
      /Users/alpha/Projects/eudico/chain/events/events.go:53 +0x60
  github.com/filecoin-project/lotus/chain/events.NewEvents()
      /Users/alpha/Projects/eudico/chain/events/events.go:65 +0x1eac
  github.com/filecoin-project/lotus/chain/consensus/hierarchical/subnet/manager.(*SubnetMgr).startSubnet()
      /Users/alpha/Projects/eudico/chain/consensus/hierarchical/subnet/manager/manager.go:307 +0x1e84
  github.com/filecoin-project/lotus/chain/consensus/hierarchical/subnet/manager.(*SubnetMgr).syncSubnet()
      /Users/alpha/Projects/eudico/chain/consensus/hierarchical/subnet/manager/manager.go:543 +0x1f4
  github.com/filecoin-project/lotus/chain/consensus/hierarchical/subnet/manager.(*SubnetMgr).JoinSubnet()
      /Users/alpha/Projects/eudico/chain/consensus/hierarchical/subnet/manager/manager.go:518 +0xd64
  github.com/filecoin-project/lotus/node/impl/hierarchical.(*HierarchicalAPI).JoinSubnet()
      /Users/alpha/Projects/eudico/node/impl/hierarchical/subnet.go:38 +0x94
  github.com/filecoin-project/lotus/node/impl.(*FullNodeAPI).JoinSubnet()
      <autogenerated>:1 +0x28
  runtime.call128()
      /opt/homebrew/Cellar/go/1.18.1/libexec/src/runtime/asm_arm64.s:510 +0x78
  reflect.Value.Call()
      /opt/homebrew/Cellar/go/1.18.1/libexec/src/reflect/value.go:339 +0x94
  github.com/filecoin-project/lotus/metrics/proxy.proxy.func1()
      /Users/alpha/Projects/eudico/metrics/proxy/proxy.go:61 +0x348
  reflect.callReflect()
      /opt/homebrew/Cellar/go/1.18.1/libexec/src/reflect/value.go:742 +0x720
  reflect.callReflect()
      <autogenerated>:1 +0x2c
  reflect.makeFuncStub()
      /opt/homebrew/Cellar/go/1.18.1/libexec/src/reflect/asm_arm64.s:53 +0x58
  github.com/filecoin-project/lotus/api.(*FullNodeStruct).JoinSubnet()
      <autogenerated>:1 +0x88
  runtime.call128()
      /opt/homebrew/Cellar/go/1.18.1/libexec/src/runtime/asm_arm64.s:510 +0x78
  reflect.Value.Call()
      /opt/homebrew/Cellar/go/1.18.1/libexec/src/reflect/value.go:339 +0x94
  github.com/filecoin-project/go-jsonrpc.doCall()
      /Users/alpha/go/pkg/mod/github.com/filecoin-project/go-jsonrpc@v0.1.5/handler.go:162 +0xb8
  github.com/filecoin-project/go-jsonrpc.(*RPCServer).handle()
      /Users/alpha/go/pkg/mod/github.com/filecoin-project/go-jsonrpc@v0.1.5/handler.go:259 +0x1408
  github.com/filecoin-project/go-jsonrpc.(*wsConn).handleCall.func4()
      /Users/alpha/go/pkg/mod/github.com/filecoin-project/go-jsonrpc@v0.1.5/websocket.go:424 +0xd0

Goroutine 396 (finished) created at:
  github.com/filecoin-project/lotus/chain/consensus/hierarchical/subnet/manager.(*SubnetMgr).matchCheckpointSignature()
      /Users/alpha/Projects/eudico/chain/consensus/hierarchical/subnet/manager/events.go:144 +0x59c
  github.com/filecoin-project/lotus/chain/consensus/hierarchical/subnet/manager.(*SubnetMgr).listenSubnetEvents.func4()
      /Users/alpha/Projects/eudico/chain/consensus/hierarchical/subnet/manager/events.go:91 +0xcc
  github.com/filecoin-project/lotus/chain/events.(*watcherEvents).checkStateChanges()
      /Users/alpha/Projects/eudico/chain/events/events_called.go:350 +0x138
  github.com/filecoin-project/lotus/chain/events.(*hcEventsObserver).Apply()
      /Users/alpha/Projects/eudico/chain/events/events_called.go:125 +0xe0
  github.com/filecoin-project/lotus/chain/events.(*observer).headChange()
      /Users/alpha/Projects/eudico/chain/events/observer.go:233 +0xb34
  github.com/filecoin-project/lotus/chain/events.(*observer).applyChanges()
      /Users/alpha/Projects/eudico/chain/events/observer.go:152 +0x384
  github.com/filecoin-project/lotus/chain/events.(*observer).listenHeadChangesOnce()
      /Users/alpha/Projects/eudico/chain/events/observer.go:126 +0x948
  github.com/filecoin-project/lotus/chain/events.(*observer).listenHeadChanges()
      /Users/alpha/Projects/eudico/chain/events/observer.go:57 +0xa8
  github.com/filecoin-project/lotus/chain/events.(*observer).start.func1()
      /Users/alpha/Projects/eudico/chain/events/observer.go:44 +0x50
==================