MCPcopy
hub / github.com/etcd-io/bbolt / recursivelyCheckBucketInPage

Method recursivelyCheckBucketInPage

tx_check.go:97–126  ·  view source on GitHub ↗
(pageId common.Pgid, reachable map[common.Pgid]*common.Page, freed map[common.Pgid]bool,
	kvStringer KVStringer, ch chan error)

Source from the content-addressed store, hash-verified

95}
96
97func (tx *Tx) recursivelyCheckBucketInPage(pageId common.Pgid, reachable map[common.Pgid]*common.Page, freed map[common.Pgid]bool,
98 kvStringer KVStringer, ch chan error) {
99 p := tx.page(pageId)
100
101 switch {
102 case p.IsBranchPage():
103 for i := range p.BranchPageElements() {
104 elem := p.BranchPageElement(uint16(i))
105 tx.recursivelyCheckBucketInPage(elem.Pgid(), reachable, freed, kvStringer, ch)
106 }
107 case p.IsLeafPage():
108 for i := range p.LeafPageElements() {
109 elem := p.LeafPageElement(uint16(i))
110 if elem.IsBucketEntry() {
111 inBkt := common.NewInBucket(pageId, 0)
112 tmpBucket := Bucket{
113 InBucket: &inBkt,
114 rootNode: &node{isLeaf: p.IsLeafPage()},
115 FillPercent: DefaultFillPercent,
116 tx: tx,
117 }
118 if child := tmpBucket.Bucket(elem.Key()); child != nil {
119 tx.recursivelyCheckBucket(child, reachable, freed, kvStringer, ch)
120 }
121 }
122 }
123 default:
124 ch <- fmt.Errorf("unexpected page type (flags: %x) for pgId:%d", p.Flags(), pageId)
125 }
126}
127
128func (tx *Tx) recursivelyCheckBucket(b *Bucket, reachable map[common.Pgid]*common.Page, freed map[common.Pgid]bool,
129 kvStringer KVStringer, ch chan error) {

Callers 1

recursivelyCheckPageMethod · 0.95

Calls 15

pageMethod · 0.95
BucketMethod · 0.95
NewInBucketFunction · 0.92
IsBranchPageMethod · 0.80
BranchPageElementsMethod · 0.80
BranchPageElementMethod · 0.80
IsLeafPageMethod · 0.80
LeafPageElementsMethod · 0.80
LeafPageElementMethod · 0.80
IsBucketEntryMethod · 0.80
ErrorfMethod · 0.65

Tested by

no test coverage detected