aboutsummaryrefslogtreecommitdiffstats
path: root/trie/trie.go
Commit message (Collapse)AuthorAgeFilesLines
* trie: cache collapsed tries node, not rlp blobs (#16876)Péter Szilágyi2018-06-211-5/+3
| | | | | | | | | | | | The current trie memory database/cache that we do pruning on stores trie nodes as binary rlp encoded blobs, and also stores the node relationships/references for GC purposes. However, most of the trie nodes (everything apart from a value node) is in essence just a collection of references. This PR switches out the RLP encoded trie blobs with the collapsed-but-not-serialized trie nodes. This permits most of the references to be recovered from within the node data structure, avoiding the need to track them a second time (expensive memory wise).
* eth, node, trie: fix minor typos (#16802)Wenbiao Zheng2018-05-241-1/+1
|
* metrics: pull library and introduce ResettingTimer and InfluxDB reporter ↵Anton Evangelatov2018-02-231-1/+1
| | | | | | | | | | | | | | | | | | | | (#15910) * go-metrics: fork library and introduce ResettingTimer and InfluxDB reporter. * vendor: change nonsense/go-metrics to ethersphere/go-metrics * go-metrics: add tests. move ResettingTimer logic from reporter to type. * all, metrics: pull in metrics package in go-ethereum * metrics/test: make sure metrics are enabled for tests * metrics: apply gosimple rules * metrics/exp, internal/debug: init expvar endpoint when starting pprof server * internal/debug: tiny comment formatting fix
* core, trie: intermediate mempool between trie and database (#15857)Péter Szilágyi2018-02-061-59/+31
| | | This commit reduces database I/O by not writing every state trie to disk.
* Revert "trie: make fullnode children hash calculation concurrently (#15131)" ↵Péter Szilágyi2018-01-151-0/+1
| | | | | (#15889) This reverts commit 0f7fbb85d6e939510a3e3bb6493a9a332ddfd8e8.
* various: remove redundant parentheses (#15793)Furkan KAMACI2018-01-031-1/+1
|
* trie: make fullnode children hash calculation concurrently (#15131)gary rong2017-11-271-1/+0
| | | | | | | | | | * trie: make fullnode children hash calculation concurrently * trie: thread out only on topmost fullnode * trie: clean up full node children hash calculation * trie: minor code fixups
* core, eth/downloader: commit block data using batches (#15115)Felix Lange2017-09-101-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * ethdb: add Putter interface and Has method * ethdb: improve docs and add IdealBatchSize * ethdb: remove memory batch lock Batches are not safe for concurrent use. * core: use ethdb.Putter for Write* functions This covers the easy cases. * core/state: simplify StateSync * trie: optimize local node check * ethdb: add ValueSize to Batch * core: optimize HasHeader check This avoids one random database read get the block number. For many uses of HasHeader, the expectation is that it's actually there. Using Has avoids a load + decode of the value. * core: write fast sync block data in batches Collect writes into batches up to the ideal size instead of issuing many small, concurrent writes. * eth/downloader: commit larger state batches Collect nodes into a batch up to the ideal size instead of committing whenever a node is received. * core: optimize HasBlock check This avoids a random database read to get the number. * core: use numberCache in HasHeader numberCache has higher capacity, increasing the odds of finding the header without a database lookup. * core: write imported block data using a batch Restore batch writes of state and add blocks, tx entries, receipts to the same batch. The change also simplifies the miner. This commit also removes posting of logs when a forked block is imported. * core: fix DB write error handling * ethdb: use RLock for Has * core: fix HasBlock comment
* trie: more node iterator improvements (#14615)Felix Lange2017-06-211-14/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * ethdb: remove Set Set deadlocks immediately and isn't part of the Database interface. * trie: add Err to Iterator This is useful for testing because the underlying NodeIterator doesn't need to be kept in a separate variable just to get the error. * trie: add LeafKey to iterator, panic when not at leaf LeafKey is useful for callers that can't interpret Path. * trie: retry failed seek/peek in iterator Next Instead of failing iteration irrecoverably, make it so Next retries the pending seek or peek every time. Smaller changes in this commit make this easier to test: * The iterator previously returned from Next on encountering a hash node. This caused it to visit the same path twice. * Path returned nibbles with terminator symbol for valueNode attached to fullNode, but removed it for valueNode attached to shortNode. Now the terminator is always present. This makes Path unique to each node and simplifies Leaf. * trie: add Path to MissingNodeError The light client trie iterator needs to know the path of the node that's missing so it can retrieve a proof for it. NodeIterator.Path is not sufficient because it is updated when the node is resolved and actually visited by the iterator. Also remove unused fields. They were added a long time ago before we knew which fields would be needed for the light client.
* rlp, trie, contracts, compression, consensus: improve comments (#14580)S. Matthew English2017-06-121-3/+3
|
* trie: add start key to NodeIterator constructorsFelix Lange2017-04-251-3/+4
| | | | | | | | | The 'step' method is split into two parts, 'peek' and 'push'. peek returns the next state but doesn't make it current. The end of iteration was previously tracked by setting 'trie' to nil. End of iteration is now tracked using the 'iteratorEnd' error, which is slightly cleaner and requires less code.
* trie: clean up iterator constructorsFelix Lange2017-04-251-2/+2
| | | | | | | Make it so each iterator has exactly one public constructor: - NodeIterators can be created through a method. - Iterators can be created through NewIterator on any NodeIterator.
* trie: rework and document key encodingFelix Lange2017-04-251-3/+3
| | | | | 'encode' and 'decode' are meaningless because the code deals with three encodings. Document the encodings and give a name to each one.
* trie: remove Key in MissingNodeErrorFelix Lange2017-04-181-1/+0
| | | | | | The key was constructed from nibbles, which isn't possible for all nodes. Remove the only use of Key in LightTrie by always retrying with the original key that was looked up.
* all: blidly swap out glog to our log15, logs need reworkPéter Szilágyi2017-02-231-8/+7
|
* trie: remove dependency on ethdbFelix Lange2017-01-061-1/+5
| | | | This removes the core/types -> leveldb dependency.
* cmd/geth, trie: report on trie cache unloads, also add debug logPéter Szilágyi2016-10-191-0/+7
|
* trie: add metric to track cache unloading (#3175)Felix Lange2016-10-191-1/+4
|
* trie: make the cache miss counter a real metricFelix Lange2016-10-191-7/+5
|
* Merge pull request #3153 from fjl/trie-unload-fixJeffrey Wilcke2016-10-191-10/+11
|\ | | | | trie: improve cache unloading mechanism
| * trie: ensure resolved nodes stay loadedFelix Lange2016-10-181-4/+7
| | | | | | | | | | | | | | | | Commit 40cdcf1183 broke the optimisation which kept nodes resolved during Get in the trie. The decoder assigned cache generation 0 unconditionally, causing resolved nodes to get flushed on Commit. This commit fixes it and adds two tests.
| * trie: avoid loading the root node twiceFelix Lange2016-10-181-6/+4
| | | | | | | | | | New checks whether the root node is present by loading it from the database. Keep the node around instead of discarding it.
* | cmd/geth, trie: track and report trie cache missesPéter Szilágyi2016-10-191-0/+14
|/
* trie, core/state: improve memory usage and performance (#3135)Felix Lange2016-10-151-57/+57
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * trie: store nodes as pointers This avoids memory copies when unwrapping node interface values. name old time/op new time/op delta Get 388ns ± 8% 215ns ± 2% -44.56% (p=0.000 n=15+15) GetDB 363ns ± 3% 202ns ± 2% -44.21% (p=0.000 n=15+15) UpdateBE 1.57µs ± 2% 1.29µs ± 3% -17.80% (p=0.000 n=13+15) UpdateLE 1.92µs ± 2% 1.61µs ± 2% -16.25% (p=0.000 n=14+14) HashBE 2.16µs ± 6% 2.18µs ± 6% ~ (p=0.436 n=15+15) HashLE 7.43µs ± 3% 7.21µs ± 3% -2.96% (p=0.000 n=15+13) * trie: close temporary databases in GetDB benchmark * trie: don't keep []byte from DB load around Nodes decoded from a DB load kept hashes and values as sub-slices of the DB value. This can be a problem because loading from leveldb often returns []byte with a cap that's larger than necessary, increasing memory usage. * trie: unload old cached nodes * trie, core/state: use cache unloading for account trie * trie: use explicit private flags (fixes Go 1.5 reflection issue). * trie: fixup cachegen overflow at request of nick * core/state: rename journal size constant
* trie: fix delete bug for values contained in fullNodeFelix Lange2016-09-301-0/+3
| | | | | | | | | Delete crashed if a fullNode contained a valueNode directly. This bug is very unlikely to occur with SecureTrie, but can happen with regular tries. This commit also introduces a randomised test which triggers all trie operations, which should prevent such bugs in the future. Credit for finding this bug goes to Github user @rjl493456442.
* trie: remove dependency on package cryptoFelix Lange2016-09-301-3/+6
| | | | | Package crypto needs cgo, which is inconvenient for some build configurations.
* core, trie: replace state caches with trie journalFelix Lange2016-09-281-167/+45
|
* core, core/state, trie: enterprise hand-tuned multi-level cachingPéter Szilágyi2016-05-261-87/+150
|
* all: Rename crypto.Sha3{,Hash}() to crypto.Keccak256{,Hash}()Ricardo Catalinas Jiménez2016-02-221-1/+1
| | | | As we aren't really using the standarized SHA-3
* light: implemented odr-capable trie and state structureszsfelfoldi2015-12-171-2/+3
|
* trie: added error handlingzsfelfoldi2015-12-011-58/+146
| | | | Created alternate versions of Trie and SecureTrie functions that can return a MissingNodeError (used by ODR services)
* eth/downloader: concurrent receipt and state processingPéter Szilágyi2015-10-191-0/+5
|
* core, trie: new trieFelix Lange2015-09-231-293/+346
|
* eth, trie: removed key prefixing from state entries & merge db fixJeffrey Wilcke2015-08-141-2/+0
| | | | | | | | | Fixed database merge strategy to use the correct database. Due to a copy paste fail when doing type evaluation the same database was being iterated (chain), all others were ignored. Removed state prefixing because {H(code): code} is stored in the same database as the rest of the state.
* core, eth, trie, xeth: merged state, chain, extra databases in oneJeffrey Wilcke2015-08-081-0/+2
|
* faster hex-prefix codec and string -> []byteEthan Buchman2015-08-061-5/+5
|
* all: fix license headers one more timeFelix Lange2015-07-241-1/+1
| | | | I forgot to update one instance of "go-ethereum" in commit 3f047be5a.
* all: update license headers to distiguish GPL/LGPLFelix Lange2015-07-231-4/+4
| | | | | All code outside of cmd/ is licensed as LGPL. The headers now reflect this by calling the whole work "the go-ethereum library".
* all: add some godoc synopsis commentsFelix Lange2015-07-071-0/+1
|
* all: update license informationFelix Lange2015-07-071-0/+16
|
* trie: dirty trackingJeffrey Wilcke2015-07-041-8/+29
|
* fixed testsobscuren2015-03-191-2/+7
|
* Fixed mkdnode & added some testsobscuren2015-03-191-5/+7
|
* Moved ethutil => commonobscuren2015-03-161-8/+8
|
* Fixed a copy issue in the trie which could cause a consensus failureobscuren2015-02-031-5/+16
|
* Moved ptrie => trie. Removed old trieobscuren2015-01-081-509/+216
|
* Refactored ethutil.Config.Db outobscuren2015-01-071-9/+5
|
* Added some comparison tests for the new ptrieobscuren2014-11-181-1/+6
|
* Transaction execution fixesobscuren2014-11-121-13/+19
|
* Added storage root to dumpobscuren2014-11-041-1/+1
|
* ethtrie => trieobscuren2014-10-311-0/+620