eth/protocol/snap: improve delete function

This commit is contained in:
Gary Rong 2024-08-05 11:52:27 +08:00
parent 2c1ab5562a
commit 06fc32f520

View file

@ -212,19 +212,24 @@ func (t *pathTrie) update(key, value []byte) error {
// delete implements genTrie interface, deleting the item from the stack trie. // delete implements genTrie interface, deleting the item from the stack trie.
func (t *pathTrie) delete(key []byte) error { func (t *pathTrie) delete(key []byte) error {
// reset the trie along with the trackers. Be aware that the last // Commit the trie since the right boundary is incomplete because
// inserted item (potentially along with some internal trie nodes) // of the deleted item. This will implicitly discard the last inserted
// will be silently discarded by trie resetting. // item and clean some ancestor trie nodes of the last committed
// item in the database.
t.commit(false)
// Reset the trie and all the internal trackers
t.first = nil t.first = nil
t.last = nil t.last = nil
t.tr.Reset() t.tr.Reset()
// explicitly mark the left boundary as incomplete, as the left-side // Explicitly mark the left boundary as incomplete, as the left-side
// item of the next one has been removed. Be aware that the next item // item of the next one has been deleted. Be aware that the next item
// to be inserted to will be ignored from committing as well. // to be inserted will be ignored from committing as well as it's on
// the left boundary.
t.skipLeftBoundary = true t.skipLeftBoundary = true
// explicitly delete the potential leftover nodes on the specific // Explicitly delete the potential leftover nodes on the specific
// path from the database. // path from the database.
tkey := t.tr.TrieKey(key) tkey := t.tr.TrieKey(key)
for i := 0; i <= len(tkey); i++ { for i := 0; i <= len(tkey); i++ {