go-ethereum/triedb/pathdb
YQ AltLayer eabbd68c19 triedb/pathdb: fix trienode history gap when newly enabled on existing node
When enabling trienode history (--history.trienode=0) on a node that
already has state at block N, repairHistory() returns a fatal error:
"gap between state [#N] and trienode history [#0]"

This happens because the newly created trienode freezer has 0 entries
while state is at block N. The gap check on line 427 treats this as a
data corruption error, but the function's own comments document that
it should "detect and resolve such gaps" for the optional trienode
history.

Fix by detecting the newly-enabled case (empty freezer + non-zero
stateID) and skipping both the gap check and the head truncation.
An empty freezer with head=0 would also fail truncateFromHead because
ohead(0) < nhead(stateID) is outside the valid range.

The trienode history will begin accumulating naturally from the
current state forward, which is the expected behavior documented
in the v1.17.0 release notes.

Fixes ethereum/go-ethereum#33907
2026-03-01 12:20:50 +00:00
..
buffer.go triedb/pathdb: enable trienode history (#32621) 2026-01-17 21:23:48 +08:00
config.go core, eth, internal, triedb/pathdb: enable eth_getProofs for history (#32727) 2026-01-22 09:19:27 +08:00
context.go core, triedb/pathdb: final integration (snapshot integration pt 5) (#30661) 2025-05-16 18:29:38 +08:00
database.go triedb/pathdb: return nodeLoc by value to avoid heap allocation (#33819) 2026-02-11 22:14:43 +08:00
database_test.go triedb/pathdb: implement trienode history indexing scheme (#33551) 2026-01-17 20:28:37 +08:00
difflayer.go triedb/pathdb: return nodeLoc by value to avoid heap allocation (#33819) 2026-02-11 22:14:43 +08:00
difflayer_test.go cmd, core, eth, triedb/pathdb: track node origins in the path database (#32418) 2025-09-05 10:37:05 +08:00
disklayer.go triedb/pathdb: return nodeLoc by value to avoid heap allocation (#33819) 2026-02-11 22:14:43 +08:00
errors.go core, triedb/pathdb: final integration (snapshot integration pt 5) (#30661) 2025-05-16 18:29:38 +08:00
execute.go cmd, core, eth, triedb/pathdb: track node origins in the path database (#32418) 2025-09-05 10:37:05 +08:00
fileutils_unix.go triedb/pathdb: introduce file-based state journal (#32060) 2025-07-15 11:45:20 +08:00
fileutils_windows.go triedb/pathdb: introduce file-based state journal (#32060) 2025-07-15 11:45:20 +08:00
flush.go triedb/pathdb: use copy instead of append to reduce memory alloc (#33044) 2025-12-11 09:37:16 +08:00
generate.go core, eth: add lock protection in snap sync (#33428) 2025-12-19 09:36:48 +01:00
generate_test.go triedb/pathdb, eth: use double-buffer mechanism in pathdb (#30464) 2025-06-22 20:40:54 +08:00
history.go triedb/pathdb: fix trienode history gap when newly enabled on existing node 2026-03-01 12:20:50 +00:00
history_index.go triedb/pathdb: improve trienode reader for searching (#33681) 2026-01-27 20:05:35 +08:00
history_index_block.go triedb/pathdb: improve trienode reader for searching (#33681) 2026-01-27 20:05:35 +08:00
history_index_block_test.go triedb/pathdb: introduce extension to history index structure (#33399) 2026-01-08 09:57:35 +01:00
history_index_iterator.go core, eth, internal, triedb/pathdb: enable eth_getProofs for history (#32727) 2026-01-22 09:19:27 +08:00
history_index_iterator_test.go core, eth, internal, triedb/pathdb: enable eth_getProofs for history (#32727) 2026-01-22 09:19:27 +08:00
history_index_test.go triedb/pathdb: introduce extension to history index structure (#33399) 2026-01-08 09:57:35 +01:00
history_indexer.go core, eth, internal, triedb/pathdb: enable eth_getProofs for history (#32727) 2026-01-22 09:19:27 +08:00
history_indexer_test.go triedb/pathdb: generalize the history indexer (#32523) 2025-09-17 15:57:16 +02:00
history_inspect.go triedb/pathdb: allow single-element history ranges (#33329) 2025-12-01 10:19:21 +08:00
history_reader.go triedb/pathdb: improve trienode reader for searching (#33681) 2026-01-27 20:05:35 +08:00
history_reader_test.go triedb/pathdb: implement trienode history indexing scheme (#33551) 2026-01-17 20:28:37 +08:00
history_state.go triedb/pathdb: implement trienode history indexing scheme (#33551) 2026-01-17 20:28:37 +08:00
history_state_test.go core/rawdb, triedb/pathdb: introduce trienode history (#32596) 2025-10-10 14:51:27 +08:00
history_trienode.go triedb/pathdb: preallocate slices in decodeRestartTrailer (#33715) 2026-01-30 21:14:15 +08:00
history_trienode_test.go triedb/pathdb: improve trienode reader for searching (#33681) 2026-01-27 20:05:35 +08:00
history_trienode_utils.go triedb/pathdb: implement trienode history indexing scheme (#33551) 2026-01-17 20:28:37 +08:00
history_trienode_utils_test.go triedb/pathdb: implement trienode history indexing scheme (#33551) 2026-01-17 20:28:37 +08:00
holdable_iterator.go trie/pathdb: state iterator (snapshot integration pt 4) (#30654) 2024-12-16 21:10:08 +08:00
holdable_iterator_test.go trie/pathdb: state iterator (snapshot integration pt 4) (#30654) 2024-12-16 21:10:08 +08:00
iterator.go all: fix problematic function name in comment (#32513) 2025-08-29 08:54:23 +08:00
iterator_binary.go triedb/pathdb, eth: use double-buffer mechanism in pathdb (#30464) 2025-06-22 20:40:54 +08:00
iterator_fast.go triedb/pathdb, eth: use double-buffer mechanism in pathdb (#30464) 2025-06-22 20:40:54 +08:00
iterator_test.go triedb/pathdb: fix journal resolution in pathdb (#32097) 2025-06-26 17:19:02 +02:00
journal.go triedb/pathdb: enable trienode history (#32621) 2026-01-17 21:23:48 +08:00
layertree.go cmd, core, eth, triedb/pathdb: track node origins in the path database (#32418) 2025-09-05 10:37:05 +08:00
layertree_test.go cmd, core, eth, triedb/pathdb: track node origins in the path database (#32418) 2025-09-05 10:37:05 +08:00
lookup.go triedb/pathdb: use copy instead of append to reduce memory alloc (#33044) 2025-12-11 09:37:16 +08:00
metrics.go core, eth, internal, triedb/pathdb: enable eth_getProofs for history (#32727) 2026-01-22 09:19:27 +08:00
nodes.go core, eth, internal, triedb/pathdb: enable eth_getProofs for history (#32727) 2026-01-22 09:19:27 +08:00
nodes_test.go rlp, trie, triedb/pathdb: compress trienode history (#32913) 2026-01-08 21:58:02 +08:00
reader.go triedb/pathdb: return nodeLoc by value to avoid heap allocation (#33819) 2026-02-11 22:14:43 +08:00
states.go triedb/pathdb: preallocate slices in encode methods (#33736) 2026-02-02 15:27:37 +08:00
states_test.go all: update license comments and AUTHORS (#31133) 2025-02-05 23:01:17 +01:00
verifier.go all: improve ETA calculation across all progress indicators (#32521) 2025-09-01 13:47:02 +08:00