diff --git a/node.go b/node.go index 242e423..cda5201 100644 --- a/node.go +++ b/node.go @@ -9,9 +9,9 @@ import ( // node represents an in-memory, deserialized page. type node struct { bucket *Bucket - dirty bool isLeaf bool unbalanced bool + spilled bool key []byte pgid pgid parent *node @@ -313,6 +313,9 @@ func (n *node) splitIndex(threshold int) (index, sz int) { // Returns an error if dirty pages cannot be allocated. func (n *node) spill() error { var tx = n.bucket.tx + if n.spilled { + return nil + } // Spill child nodes first. Child nodes can materialize sibling nodes in // the case of split-merge so we cannot use a range loop. We have to check @@ -346,6 +349,7 @@ func (n *node) spill() error { _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) + node.spilled = true // Insert into parent inodes. if node.parent != nil {