go-ethereum/core
Martin Holst Swende 9b99e3dfe0
core/rawdb: fix datarace in freezer (#22728)
The Append / truncate operations were racy. When a datafile reaches 2Gb, a new file is needed. For this operation, we require a writelock, which is not needed in the 99.99% of all cases where the data does fit in the current head-file.

This transition from readlock to writelock was incorrect, and as the readlock was released, a truncate operation could slip in between, and truncate the data. This would have been fine, however, the Append operation continued writing as if no truncation had occurred, e.g writing item 5 where item 0 should reside.

This PR changes the behaviour, so that if when we run into the situation that a new file is needed, it aborts, and retries, this time with a writelock.

The outcome of the situation described above, running on this PR, would instead be that the Append operation exits with a failure.
2021-04-26 18:19:07 +02:00
..
asm core/asm: allow numbers in labels (#20362) 2019-11-23 12:52:17 +01:00
bloombits eth, core: speed up some tests (#22000) 2020-12-15 18:52:51 +01:00
forkid Revert "core/forkid, params: unset Berlin fork number (#22413)" 2021-03-04 10:44:37 +02:00
rawdb core/rawdb: fix datarace in freezer (#22728) 2021-04-26 18:19:07 +02:00
state core/state/snapshot, true: reuse dirty data instead of hitting disk when generating (#22667) 2021-04-23 14:39:18 +03:00
types core/types: drop some relice data types 2021-04-14 23:39:42 +03:00
vm core, eth, internal/ethapi: create access list RPC API (#22550) 2021-04-07 17:54:31 +03:00
.gitignore Renamed `chain` => `core` 2014-12-04 10:28:02 +01:00
bench_test.go all: add read-only option to database (#22407) 2021-03-22 19:06:30 +01:00
block_validator.go trie: use stacktrie for Derivesha operation (#21407) 2020-09-29 17:38:13 +02:00
block_validator_test.go cmd, core, eth: background transaction indexing (#20302) 2020-05-11 18:58:43 +03:00
blockchain.go core: nuke legacy snapshot supporting (#22663) 2021-04-20 08:27:46 +03:00
blockchain_insert.go core: fix blockchain insert report time interval calculation (#21723) 2020-10-21 16:53:30 +02:00
blockchain_repair_test.go all: add read-only option to database (#22407) 2021-03-22 19:06:30 +01:00
blockchain_sethead_test.go all: add read-only option to database (#22407) 2021-03-22 19:06:30 +01:00
blockchain_snapshot_test.go core: nuke legacy snapshot supporting (#22663) 2021-04-20 08:27:46 +03:00
blockchain_test.go all: make logs a bit easier on the eye to digest (#22665) 2021-04-15 20:35:00 +03:00
blocks.go core: typos and comments improve 2017-05-25 17:14:33 +03:00
bloom_indexer.go eth: move eth.Config to a common package (#22205) 2021-02-05 13:51:15 +01:00
chain_indexer.go all: make logs a bit easier on the eye to digest (#22665) 2021-04-15 20:35:00 +03:00
chain_indexer_test.go core: fix potential race in chainIndexerTest (#22346) 2021-03-19 13:32:57 +01:00
chain_makers.go core: add BlockGen.GetBalance method (#22589) 2021-03-29 20:54:49 +02:00
chain_makers_test.go cmd, core, eth: background transaction indexing (#20302) 2020-05-11 18:58:43 +03:00
dao_test.go les: historical data garbage collection (#19570) 2020-07-13 11:02:54 +02:00
error.go all: add support for EIP-2718, EIP-2930 transactions (#21502) 2021-02-25 15:26:57 +01:00
events.go eth/filters: remove use of event.TypeMux for pending logs (#20312) 2019-12-10 12:39:14 +01:00
evm.go core, all: split vm.Context into BlockContext and TxContext (#21672) 2020-11-13 13:42:19 +01:00
gaspool.go miner: avoid unnecessary work (#15883) 2018-01-15 12:57:06 +02:00
gen_genesis.go all: regenerate codecs with gencodec commit 90983d99de (#15830) 2018-01-08 15:13:22 +02:00
gen_genesis_account.go all: regenerate codecs with gencodec commit 90983d99de (#15830) 2018-01-08 15:13:22 +02:00
genesis.go all: define Berlin hard fork spec 2021-02-26 14:24:07 +02:00
genesis_alloc.go all: add support for EIP-2718, EIP-2930 transactions (#21502) 2021-02-25 15:26:57 +01:00
genesis_test.go core: add TestGenesisHashes and fix YoloV3 (#22559) 2021-04-16 00:32:16 +02:00
headerchain.go all: make logs a bit easier on the eye to digest (#22665) 2021-04-15 20:35:00 +03:00
headerchain_test.go core,les: headerchain import in batches (#21471) 2020-12-09 11:13:02 +01:00
mkalloc.go core/vm: 64 bit memory and gas calculations (#19210) 2019-03-12 11:40:05 +02:00
rlp_test.go cmd, core, eth: background transaction indexing (#20302) 2020-05-11 18:58:43 +03:00
state_prefetcher.go all: add support for EIP-2718, EIP-2930 transactions (#21502) 2021-02-25 15:26:57 +01:00
state_processor.go all: add support for EIP-2718, EIP-2930 transactions (#21502) 2021-02-25 15:26:57 +01:00
state_processor_test.go trie : use trie.NewStackTrie instead of new(trie.Trie) (#22246) 2021-02-02 13:09:23 +01:00
state_transition.go core, eth, internal/ethapi: create access list RPC API (#22550) 2021-04-07 17:54:31 +03:00
tx_cacher.go Comment error (#18303) 2018-12-14 11:15:31 +01:00
tx_journal.go core: fix typos in comment (#17531) 2018-08-28 10:04:33 +03:00
tx_list.go core/txpool: remove "local" notion from the txpool price heap (#21478) 2020-12-11 10:44:57 +01:00
tx_list_test.go Revert "core, txpool: less allocations when handling transactions (#21232)" 2020-07-09 14:02:03 +02:00
tx_noncer.go core: fix write concurrency in txpool (#19835) 2019-07-17 13:39:41 +03:00
tx_pool.go core: fix method comment for `txpool.requestReset` (#22543) 2021-03-22 09:10:51 +02:00
tx_pool_test.go trie : use trie.NewStackTrie instead of new(trie.Trie) (#22246) 2021-02-02 13:09:23 +01:00
types.go core: prefetch next block state concurrently 2019-04-01 11:06:15 +03:00