mirror of https://github.com/etcd-io/bbolt.git
Merge pull request #657 from ahrtr/refactor_check_20231231
Move checking the invariant properties into a common methodpull/660/head
commit
9f1a1d35fb
16
tx_check.go
16
tx_check.go
|
@ -78,12 +78,7 @@ func (tx *Tx) recursivelyCheckBucket(b *Bucket, reachable map[common.Pgid]*commo
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check every page used by this bucket.
|
tx.checkInvariantProperties(b.RootPage(), reachable, freed, kvStringer, ch)
|
||||||
b.tx.forEachPage(b.RootPage(), func(p *common.Page, _ int, stack []common.Pgid) {
|
|
||||||
verifyPageReachable(p, tx.meta.Pgid(), stack, reachable, freed, ch)
|
|
||||||
})
|
|
||||||
|
|
||||||
tx.recursivelyCheckPageKeyOrder(b.RootPage(), kvStringer.KeyToString, ch)
|
|
||||||
|
|
||||||
// Check each bucket within this bucket.
|
// Check each bucket within this bucket.
|
||||||
_ = b.ForEachBucket(func(k []byte) error {
|
_ = b.ForEachBucket(func(k []byte) error {
|
||||||
|
@ -94,6 +89,15 @@ func (tx *Tx) recursivelyCheckBucket(b *Bucket, reachable map[common.Pgid]*commo
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (tx *Tx) checkInvariantProperties(pageId common.Pgid, reachable map[common.Pgid]*common.Page, freed map[common.Pgid]bool,
|
||||||
|
kvStringer KVStringer, ch chan error) {
|
||||||
|
tx.forEachPage(pageId, func(p *common.Page, _ int, stack []common.Pgid) {
|
||||||
|
verifyPageReachable(p, tx.meta.Pgid(), stack, reachable, freed, ch)
|
||||||
|
})
|
||||||
|
|
||||||
|
tx.recursivelyCheckPageKeyOrder(pageId, kvStringer.KeyToString, ch)
|
||||||
|
}
|
||||||
|
|
||||||
func verifyPageReachable(p *common.Page, hwm common.Pgid, stack []common.Pgid, reachable map[common.Pgid]*common.Page, freed map[common.Pgid]bool, ch chan error) {
|
func verifyPageReachable(p *common.Page, hwm common.Pgid, stack []common.Pgid, reachable map[common.Pgid]*common.Page, freed map[common.Pgid]bool, ch chan error) {
|
||||||
if p.Id() > hwm {
|
if p.Id() > hwm {
|
||||||
ch <- fmt.Errorf("page %d: out of bounds: %d (stack: %v)", int(p.Id()), int(hwm), stack)
|
ch <- fmt.Errorf("page %d: out of bounds: %d (stack: %v)", int(p.Id()), int(hwm), stack)
|
||||||
|
|
Loading…
Reference in New Issue