mirror of https://github.com/etcd-io/bbolt.git
Merge pull request #159 from Shopify/pgid_overflow_checks
add asserts for detecting pgid high watermark overflowpull/34/head
commit
5f13a416ce
|
@ -476,6 +476,7 @@ func (b *Bucket) spill() error {
|
|||
b.rootNode = b.rootNode.root()
|
||||
|
||||
// Update the root node for this bucket.
|
||||
_assert(b.rootNode.pgid < b.tx.meta.pgid, "pgid (%d) above high water mark (%d)", b.rootNode.pgid, b.tx.meta.pgid)
|
||||
b.root = b.rootNode.pgid
|
||||
|
||||
return nil
|
||||
|
|
4
db.go
4
db.go
|
@ -705,6 +705,10 @@ func (m *meta) copy(dest *meta) {
|
|||
|
||||
// write writes the meta onto a page.
|
||||
func (m *meta) write(p *page) {
|
||||
|
||||
_assert(m.root.root < m.pgid, "root bucket pgid (%d) above high water mark (%d)", m.root.root, m.pgid)
|
||||
_assert(m.freelist < m.pgid, "freelist pgid (%d) above high water mark (%d)", m.freelist, m.pgid)
|
||||
|
||||
// Page id is either going to be 0 or 1 which we can determine by the transaction ID.
|
||||
p.id = pgid(m.txid % 2)
|
||||
p.flags |= metaPageFlag
|
||||
|
|
4
node.go
4
node.go
|
@ -98,6 +98,8 @@ func (n *node) prevSibling() *node {
|
|||
|
||||
// put inserts a key/value.
|
||||
func (n *node) put(oldKey, newKey, value []byte, pgid pgid, flags uint32) {
|
||||
_assert(pgid < n.bucket.tx.meta.pgid, "pgid (%d) above high water mark (%d)", pgid, n.bucket.tx.meta.pgid)
|
||||
|
||||
// Find insertion index.
|
||||
index := sort.Search(len(n.inodes), func(i int) bool { return bytes.Compare(n.inodes[i].key, oldKey) != -1 })
|
||||
|
||||
|
@ -278,6 +280,7 @@ func (n *node) spill() error {
|
|||
}
|
||||
|
||||
// Write the node.
|
||||
_assert(p.id < tx.meta.pgid, "pgid (%d) above high water mark (%d)", p.id, tx.meta.pgid)
|
||||
node.pgid = p.id
|
||||
node.write(p)
|
||||
|
||||
|
@ -307,6 +310,7 @@ func (n *node) spill() error {
|
|||
}
|
||||
|
||||
// Write the new root.
|
||||
_assert(p.id < tx.meta.pgid, "pgid (%d) above high water mark (%d)", p.id, tx.meta.pgid)
|
||||
parent.pgid = p.id
|
||||
parent.write(p)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue