|
|
|
@ -169,11 +169,17 @@ type Tree struct { |
|
|
|
|
// store (with a number of memory layers from a journal), ensuring that the head
|
|
|
|
|
// of the snapshot matches the expected one.
|
|
|
|
|
//
|
|
|
|
|
// If the snapshot is missing or the disk layer is broken, the entire is deleted
|
|
|
|
|
// and will be reconstructed from scratch based on the tries in the key-value
|
|
|
|
|
// store, on a background thread. If the memory layers from the journal is not
|
|
|
|
|
// continuous with disk layer or the journal is missing, all diffs will be discarded
|
|
|
|
|
// iff it's in "recovery" mode, otherwise rebuild is mandatory.
|
|
|
|
|
// If the snapshot is missing or the disk layer is broken, the snapshot will be
|
|
|
|
|
// reconstructed using both the existing data and the state trie.
|
|
|
|
|
// The repair happens on a background thread.
|
|
|
|
|
//
|
|
|
|
|
// If the memory layers in the journal do not match the disk layer (e.g. there is
|
|
|
|
|
// a gap) or the journal is missing, there are two repair cases:
|
|
|
|
|
//
|
|
|
|
|
// - if the 'recovery' parameter is true, all memory diff-layers will be discarded.
|
|
|
|
|
// This case happens when the snapshot is 'ahead' of the state trie.
|
|
|
|
|
// - otherwise, the entire snapshot is considered invalid and will be recreated on
|
|
|
|
|
// a background thread.
|
|
|
|
|
func New(diskdb ethdb.KeyValueStore, triedb *trie.Database, cache int, root common.Hash, async bool, rebuild bool, recovery bool) (*Tree, error) { |
|
|
|
|
// Create a new, empty snapshot tree
|
|
|
|
|
snap := &Tree{ |
|
|
|
|