diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2022-12-23 17:50:46 -0700 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2022-12-23 18:01:23 -0700 |
commit | 8fc3c78924da1dedd3adce3b923adf58e5ca732a (patch) | |
tree | 6f415a75120dae7cbe1a22bad1e7d2fd31a5bee8 /lib/btrfsprogs/btrfsinspect/rebuildnodes/btrees/rebuilt_btrees.go | |
parent | 51d6ccf1e5af4d88bfe6842b06fa1bc2d5cc732c (diff) |
rebuildnodes: Have the graph store keys; avoid I/O when indexing a tree
Diffstat (limited to 'lib/btrfsprogs/btrfsinspect/rebuildnodes/btrees/rebuilt_btrees.go')
-rw-r--r-- | lib/btrfsprogs/btrfsinspect/rebuildnodes/btrees/rebuilt_btrees.go | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/lib/btrfsprogs/btrfsinspect/rebuildnodes/btrees/rebuilt_btrees.go b/lib/btrfsprogs/btrfsinspect/rebuildnodes/btrees/rebuilt_btrees.go index 1d5ba14..f919b37 100644 --- a/lib/btrfsprogs/btrfsinspect/rebuildnodes/btrees/rebuilt_btrees.go +++ b/lib/btrfsprogs/btrfsinspect/rebuildnodes/btrees/rebuilt_btrees.go @@ -181,20 +181,20 @@ func (ts *RebuiltTrees) AddRoot(ctx context.Context, treeID btrfsprim.ObjID, roo continue } tree.Leafs.Insert(leaf) - for j, item := range ts.keyIO.ReadNode(leaf).Data.BodyLeaf { + for j, itemKey := range ts.graph.Nodes[leaf].Items { newPtr := keyio.ItemPtr{ Node: leaf, Idx: j, } - if oldPtr, exists := tree.Items.Load(item.Key); !exists { - tree.Items.Store(item.Key, newPtr) + if oldPtr, exists := tree.Items.Load(itemKey); !exists { + tree.Items.Store(itemKey, newPtr) numAdded++ } else { oldGen := ts.graph.Nodes[oldPtr.Node].Generation newGen := ts.graph.Nodes[newPtr.Node].Generation switch { case oldGen < newGen: - tree.Items.Store(item.Key, newPtr) + tree.Items.Store(itemKey, newPtr) numReplaced++ case oldGen > newGen: // keep the old one @@ -203,12 +203,12 @@ func (ts *RebuiltTrees) AddRoot(ctx context.Context, treeID btrfsprim.ObjID, roo // handle this is, and so if this happens I want the program to crash // and force me to figure out how to handle it. panic(fmt.Errorf("dup key=%v in tree=%v: old=%v=%#v ; new=%v=%#v", - item.Key, treeID, + itemKey, treeID, oldPtr, ts.graph.Nodes[oldPtr.Node], newPtr, ts.graph.Nodes[newPtr.Node])) } } - ts.cbAddedItem(ctx, treeID, item.Key) + ts.cbAddedItem(ctx, treeID, itemKey) progress(i) } } |