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

Geth halts on "fatal error: concurrent map iteration and map write" #16933

Closed
epheph opened this issue Jun 8, 2018 · 9 comments
Closed

Geth halts on "fatal error: concurrent map iteration and map write" #16933

epheph opened this issue Jun 8, 2018 · 9 comments

Comments

@epheph
Copy link

epheph commented Jun 8, 2018

System information

Geth version: 1.8.10-stable
OS & Version: Linux
Using hub.docker.com provided image

Expected behaviour

During our deployment process of "canned" (example) data, where we submit many transactions concurrently, I expect the transactions to be mined without halting geth. We submit a few hundred TX, in batches, and use a 1 second block time. None of these transactions are direct contract deployments, but contracts are deployed as a result of these transactions.

Actual behaviour

About 50% of the time, judging from my own experience, geth locks up due to "fatal error: concurrent map iteration and map write". Running the process over and over again, I can eventually get the deploy to succeed.

Steps to reproduce the behaviour

I have not been able to narrow down exactly the nature of this issue, only that it occurs while processing a large number of transactions. If you'd like to try it yourself, you can try our (docker-based) deployment process.

1.) Clone https://github.com/AugurProject/augur.js
2.) npm install
3.) npm run docker:build

The image it is based on, augurproject/dev-node-geth is just a FROM ethereum/client-go:v1.8.10 with a custom genesis block and entrypoint.

Backtrace

fatal error: concurrent map iteration and map write

goroutine 12736 [running]:
runtime.throw(0xf32989, 0x26)
	/usr/local/go/src/runtime/panic.go:616 +0x81 fp=0xc4258ffa40 sp=0xc4258ffa20 pc=0x43f681
runtime.mapiternext(0xc4258ffdc8)
	/usr/local/go/src/runtime/hashmap.go:747 +0x55c fp=0xc4258ffad0 sp=0xc4258ffa40 pc=0x41d33c
github.com/ethereum/go-ethereum/core/state.(*StateDB).Copy(0xc429d2a000, 0x0)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/core/state/statedb.go:486 +0x53a fp=0xc4258ffe98 sp=0xc4258ffad0 pc=0x705c2a
github.com/ethereum/go-ethereum/miner.(*worker).pending(0xc42022c9a0, 0x0, 0x0)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/miner/worker.go:188 +0x125 fp=0xc4258ffed0 sp=0xc4258ffe98 pc=0xa21095
github.com/ethereum/go-ethereum/miner.(*Miner).Pending(0xc4200aaf50, 0xc7bddcaeffb, 0xc43940725c)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/miner/miner.go:167 +0x2f fp=0xc4258ffef8 sp=0xc4258ffed0 pc=0xa1e6bf
github.com/ethereum/go-ethereum/eth.(*EthAPIBackend).StateAndHeaderByNumber(0xc420388b80, 0x109bfc0, 0xc420439400, 0xfffffffffffffffe, 0x1ae7c20, 0x20, 0x2a0, 0xa8926)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/eth/api_backend.go:88 +0x12e fp=0xc4258fff58 sp=0xc4258ffef8 pc=0xa83a1e
github.com/ethereum/go-ethereum/internal/ethapi.(*PublicBlockChainAPI).doCall(0xc420388c20, 0x109bfc0, 0xc420439400, 0xd5e16b8e19a43d91, 0xcf767060da4e4f5, 0xeb30540b, 0xc426478f00, 0xb064e, 0x0, 0x0, ...)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/internal/ethapi/api.go:619 +0x146 fp=0xc425902a90 sp=0xc4258fff58 pc=0xa3a9c6
github.com/ethereum/go-ethereum/internal/ethapi.(*PublicBlockChainAPI).EstimateGas.func1(0xb064e, 0x109bf01)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/internal/ethapi/api.go:710 +0xbe fp=0xc4259053a0 sp=0xc425902a90 pc=0xa43c6e
github.com/ethereum/go-ethereum/internal/ethapi.(*PublicBlockChainAPI).EstimateGas(0xc420388c20, 0x109bfc0, 0xc420439400, 0xd5e16b8e19a43d91, 0xcf767060da4e4f5, 0xeb30540b, 0xc426478f00, 0xb064e, 0x0, 0x0, ...)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/internal/ethapi/api.go:719 +0xe5 fp=0xc425905430 sp=0xc4259053a0 pc=0xa3b3c5
runtime.call256(0xc420626a50, 0xc420450618, 0xc420b26e70, 0x98000000b0)
	/usr/local/go/src/runtime/asm_amd64.s:576 +0x55 fp=0xc425905540 sp=0xc425905430 pc=0x46c7e5
reflect.Value.call(0xc420206800, 0xc420450618, 0x13, 0xf0ec0d, 0x4, 0xc4234d52c0, 0x3, 0x4, 0x1, 0xc4234d52c0, ...)
	/usr/local/go/src/reflect/value.go:447 +0x969 fp=0xc425905800 sp=0xc425905540 pc=0x4c9f19
reflect.Value.Call(0xc420206800, 0xc420450618, 0x13, 0xc4234d52c0, 0x3, 0x4, 0x1, 0x1, 0x1)
	/usr/local/go/src/reflect/value.go:308 +0xa4 fp=0xc425905868 sp=0xc425905800 pc=0x4c9494
github.com/ethereum/go-ethereum/rpc.(*Server).handle(0xc4201b7d20, 0x109bfc0, 0xc420439400, 0x10a1200, 0xc4205aa050, 0xc4234d5260, 0xc4205aa110, 0x0, 0xdc07c0)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/rpc/server.go:312 +0x676 fp=0xc4259059e0 sp=0xc425905868 pc=0x819506
github.com/ethereum/go-ethereum/rpc.(*Server).exec(0xc4201b7d20, 0x109bfc0, 0xc420439400, 0x10a1200, 0xc4205aa050, 0xc4234d5260)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/rpc/server.go:334 +0x1a6 fp=0xc425905a50 sp=0xc4259059e0 pc=0x81a026
github.com/ethereum/go-ethereum/rpc.(*Server).serveRequest(0xc4201b7d20, 0x109c080, 0xc4206349f0, 0x10a1200, 0xc4205aa050, 0xf17901, 0x1, 0x0, 0x0)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/rpc/server.go:195 +0x39c fp=0xc425905b80 sp=0xc425905a50 pc=0x81825c
github.com/ethereum/go-ethereum/rpc.(*Server).ServeSingleRequest(0xc4201b7d20, 0x109c080, 0xc4206349f0, 0x10a1200, 0xc4205aa050, 0x1)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/rpc/server.go:226 +0x65 fp=0xc425905bd8 sp=0xc425905b80 pc=0x818a15
github.com/ethereum/go-ethereum/rpc.(*Server).ServeHTTP(0xc4201b7d20, 0x109aac0, 0xc425175ce0, 0xc420244d00)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/rpc/http.go:194 +0x413 fp=0xc425905c78 sp=0xc425905bd8 pc=0x812923
github.com/ethereum/go-ethereum/vendor/github.com/rs/cors.(*Cors).Handler.func1(0x109aac0, 0xc425175ce0, 0xc420244d00)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/vendor/github.com/rs/cors/cors.go:190 +0xfe fp=0xc425905cd0 sp=0xc425905c78 pc=0x7fee6e
net/http.HandlerFunc.ServeHTTP(0xc420224d00, 0x109aac0, 0xc425175ce0, 0xc420244d00)
	/usr/local/go/src/net/http/server.go:1947 +0x44 fp=0xc425905cf8 sp=0xc425905cd0 pc=0x7d3484
github.com/ethereum/go-ethereum/rpc.(*virtualHostHandler).ServeHTTP(0xc420224d20, 0x109aac0, 0xc425175ce0, 0xc420244d00)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/rpc/http.go:258 +0x1c5 fp=0xc425905d58 sp=0xc425905cf8 pc=0x813135
net/http.serverHandler.ServeHTTP(0xc42021c340, 0x109aac0, 0xc425175ce0, 0xc420244d00)
	/usr/local/go/src/net/http/server.go:2694 +0xbc fp=0xc425905d88 sp=0xc425905d58 pc=0x7d634c
net/http.(*conn).serve(0xc427574280, 0x109bfc0, 0xc4299eff40)
	/usr/local/go/src/net/http/server.go:1830 +0x651 fp=0xc425905fc8 sp=0xc425905d88 pc=0x7d24a1
runtime.goexit()
	/usr/local/go/src/runtime/asm_amd64.s:2361 +0x1 fp=0xc425905fd0 sp=0xc425905fc8 pc=0x46ede1
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:2795 +0x27b

goroutine 1 [chan receive, 1 minutes]:
github.com/ethereum/go-ethereum/node.(*Node).Wait(0xc420030780)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/node/node.go:464 +0x7f
main.geth(0xc42022c160, 0xf9e818, 0xb2d05e00)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/cmd/geth/main.go:218 +0x51
github.com/ethereum/go-ethereum/vendor/gopkg.in/urfave/cli%2ev1.HandleAction(0xd93760, 0xf9fd28, 0xc42022c160, 0xc42022c160, 0xc4204f3f48)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/vendor/gopkg.in/urfave/cli.v1/app.go:490 +0xc8
github.com/ethereum/go-ethereum/vendor/gopkg.in/urfave/cli%2ev1.(*App).Run(0xc420218340, 0xc420030280, 0x25, 0x28, 0x0, 0x0)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/vendor/gopkg.in/urfave/cli.v1/app.go:264 +0x5ee
main.main()
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/cmd/geth/main.go:206 +0x55

goroutine 6 [chan receive, 1 minutes]:
github.com/ethereum/go-ethereum/vendor/github.com/rjeczalik/notify.(*nonrecursiveTree).dispatch(0xc4200801e0, 0xc420080120)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/vendor/github.com/rjeczalik/notify/tree_nonrecursive.go:36 +0xb6
created by github.com/ethereum/go-ethereum/vendor/github.com/rjeczalik/notify.newNonrecursiveTree
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/vendor/github.com/rjeczalik/notify/tree_nonrecursive.go:29 +0xf2

goroutine 7 [chan receive, 1 minutes]:
github.com/ethereum/go-ethereum/vendor/github.com/rjeczalik/notify.(*nonrecursiveTree).internal(0xc4200801e0, 0xc420080180)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/vendor/github.com/rjeczalik/notify/tree_nonrecursive.go:81 +0x7b
created by github.com/ethereum/go-ethereum/vendor/github.com/rjeczalik/notify.newNonrecursiveTree
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/vendor/github.com/rjeczalik/notify/tree_nonrecursive.go:30 +0x11e

goroutine 8 [syscall, 1 minutes]:
os/signal.signal_recv(0x0)
	/usr/local/go/src/runtime/sigqueue.go:139 +0xa6
os/signal.loop()
	/usr/local/go/src/os/signal/signal_unix.go:22 +0x22
created by os/signal.init.0
	/usr/local/go/src/os/signal/signal_unix.go:28 +0x41

goroutine 14 [select, 1 minutes]:
github.com/ethereum/go-ethereum/accounts/keystore.(*watcher).loop(0xc4202d3b60)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/accounts/keystore/watch.go:94 +0x4a0
created by github.com/ethereum/go-ethereum/accounts/keystore.(*watcher).start
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/accounts/keystore/watch.go:52 +0x5d

goroutine 37 [syscall, 1 minutes]:
syscall.Syscall6(0xe8, 0x6, 0xc4204dbf6c, 0x1, 0xffffffffffffffff, 0x0, 0x0, 0x0, 0xd79f40, 0x1087380)
	/usr/local/go/src/syscall/asm_linux_amd64.s:44 +0x5
github.com/ethereum/go-ethereum/vendor/golang.org/x/sys/unix.EpollWait(0x6, 0xc4204dbf6c, 0x1, 0x1, 0xffffffffffffffff, 0x0, 0x0, 0x0)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go:1529 +0x7a
github.com/ethereum/go-ethereum/vendor/github.com/rjeczalik/notify.(*inotify).loop(0xc4200f2000, 0xc420248000)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/vendor/github.com/rjeczalik/notify/watcher_inotify.go:194 +0x8b
created by github.com/ethereum/go-ethereum/vendor/github.com/rjeczalik/notify.(*inotify).lazyinit
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/vendor/github.com/rjeczalik/notify/watcher_inotify.go:134 +0x128

goroutine 38 [chan receive, 1 minutes]:
github.com/ethereum/go-ethereum/vendor/github.com/rjeczalik/notify.(*inotify).send(0xc4200f2000, 0xc420248000)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/vendor/github.com/rjeczalik/notify/watcher_inotify.go:254 +0xae
created by github.com/ethereum/go-ethereum/vendor/github.com/rjeczalik/notify.(*inotify).lazyinit
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/vendor/github.com/rjeczalik/notify/watcher_inotify.go:137 +0x17b

goroutine 39 [chan receive, 1 minutes]:
github.com/ethereum/go-ethereum/vendor/github.com/rjeczalik/notify.(*inotify).send(0xc4200f2000, 0xc420248000)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/vendor/github.com/rjeczalik/notify/watcher_inotify.go:254 +0xae
created by github.com/ethereum/go-ethereum/vendor/github.com/rjeczalik/notify.(*inotify).lazyinit
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/vendor/github.com/rjeczalik/notify/watcher_inotify.go:137 +0x17b

goroutine 15 [select]:
github.com/ethereum/go-ethereum/accounts/keystore.(*KeyStore).updater(0xc4200be0f0)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/accounts/keystore/keystore.go:203 +0xf0
created by github.com/ethereum/go-ethereum/accounts/keystore.(*KeyStore).Subscribe
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/accounts/keystore/keystore.go:190 +0x122

goroutine 16 [sleep]:
time.Sleep(0x3b9aca00)
	/usr/local/go/src/runtime/time.go:102 +0x166
github.com/ethereum/go-ethereum/accounts/usbwallet.(*Hub).updater(0xc4203a4a00)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/accounts/usbwallet/hub.go:224 +0x3e
created by github.com/ethereum/go-ethereum/accounts/usbwallet.(*Hub).Subscribe
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/accounts/usbwallet/hub.go:213 +0x122

goroutine 50 [sleep]:
time.Sleep(0x3b9aca00)
	/usr/local/go/src/runtime/time.go:102 +0x166
github.com/ethereum/go-ethereum/accounts/usbwallet.(*Hub).updater(0xc4203a4b40)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/accounts/usbwallet/hub.go:224 +0x3e
created by github.com/ethereum/go-ethereum/accounts/usbwallet.(*Hub).Subscribe
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/accounts/usbwallet/hub.go:213 +0x122

goroutine 51 [select, 1 minutes]:
github.com/ethereum/go-ethereum/accounts.(*Manager).update(0xc42023d110)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/accounts/manager.go:95 +0x1c6
created by github.com/ethereum/go-ethereum/accounts.NewManager
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/accounts/manager.go:68 +0x54c

goroutine 52 [select]:
github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/util.(*BufferPool).drain(0xc42035a620)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/util/buffer_pool.go:206 +0x152
created by github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/util.NewBufferPool
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/util/buffer_pool.go:237 +0x171

goroutine 41 [select, 1 minutes]:
github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb.(*DB).compactionError(0xc420218820)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/db_compaction.go:90 +0xff
created by github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb.openDB
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/db.go:142 +0x49d

goroutine 42 [select]:
github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb.(*DB).mpoolDrain(0xc420218820)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/db_state.go:101 +0x127
created by github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb.openDB
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/db.go:143 +0x4bf

goroutine 43 [select, 1 minutes]:
github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb.(*DB).tCompaction(0xc420218820)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/db_compaction.go:804 +0x277
created by github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb.openDB
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/db.go:149 +0x627

goroutine 44 [select, 1 minutes]:
github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb.(*DB).mCompaction(0xc420218820)
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/db_compaction.go:751 +0x15d
created by github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb.openDB
	/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/db.go:150 +0x649
@AlexeyAkhunov
Copy link
Contributor

I can see that StateDB.Copy() is happening under the lock, but none other methods use that lock. Ideally, we should have a Read-Write lock to cover all internal data of StateDB

@AlexeyAkhunov
Copy link
Contributor

Ok, I think I figured out where this race is coming from. Here: https://github.com/ethereum/go-ethereum/blob/v1.8.10/miner/worker.go#L499 the "work", containing pointer to the "current.state" gets pushed to the channel for the agents to process.

Agent processes it (finds nonce), wraps it into a "Result" and puts it into the "recv" channel. Here we read it from "recv" channel: https://github.com/ethereum/go-ethereum/blob/v1.8.10/miner/worker.go#L301.

Next, we call "WriteBlockWithState" here, passing the same state: https://github.com/ethereum/go-ethereum/blob/v1.8.10/miner/worker.go#L320.

Inside WriteBlockWithState, we call state.Commit here: https://github.com/ethereum/go-ethereum/blob/v1.8.10/core/blockchain.go#L902, which mutates the state. When it happens, we are not holding the "currentMu" lock, which means the call to "pending" can proceed concurrently

@AlexeyAkhunov
Copy link
Contributor

@epheph Could you experiment and surround the line https://github.com/ethereum/go-ethereum/blob/v1.8.10/miner/worker.go#L320 with "self.currentMu.Lock()" and "self.currentMu.UnLock()", to check if this is really the cause - looks like you can reproduce it quite frequently. If you confirm it, we can make a PR with the fix. Thank you very much!

@epheph
Copy link
Author

epheph commented Jun 11, 2018

@AlexeyAkhunov thanks for the research and explanation! I'll give that modification a try

@epheph
Copy link
Author

epheph commented Jun 12, 2018

@AlexeyAkhunov Alright, i'm 12 deploys in with that new code and haven't received the error, and without it, i received it on the 4th try. It's sporadic, but those results look very promising. The "Unlock" method has a lower L.

Thanks for taking a look at this!

@AlexeyAkhunov
Copy link
Contributor

@epheph Thanks for testing - I will prepare the PR in the next couple of days. Yes, "Unlock" has lower L :)

@liangzhiyang
Copy link

liangzhiyang commented Jun 21, 2018

@AlexeyAkhunov
yes ,you are right ~
i also cause this problem , and what i think is the same as you

O(∩_∩)O~~

@shal
Copy link

shal commented Jun 28, 2018

Same here!

@holiman
Copy link
Contributor

holiman commented Nov 27, 2018

This appears to be closed, according to the merge-history

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

No branches or pull requests

7 participants