aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--node.go37
-rw-r--r--tx.go14
2 files changed, 12 insertions, 39 deletions
diff --git a/node.go b/node.go
index c9fb21c..e9d64af 100644
--- a/node.go
+++ b/node.go
@@ -463,43 +463,6 @@ func (n *node) rebalance() {
target = n.prevSibling()
}
- // If target node has extra nodes then just move one over.
- if target.numChildren() > target.minKeys() {
- if useNextSibling {
- // Reparent and move node.
- if child, ok := n.bucket.nodes[target.inodes[0].pgid]; ok {
- child.parent.removeChild(child)
- child.parent = n
- child.parent.children = append(child.parent.children, child)
- }
- n.inodes = append(n.inodes, target.inodes[0])
- target.inodes = target.inodes[1:]
-
- // Update target key on parent.
- target.parent.put(target.key, target.inodes[0].key, nil, target.pgid, 0)
- target.key = target.inodes[0].key
- _assert(len(target.key) > 0, "rebalance(1): zero-length node key")
- } else {
- // Reparent and move node.
- if child, ok := n.bucket.nodes[target.inodes[len(target.inodes)-1].pgid]; ok {
- child.parent.removeChild(child)
- child.parent = n
- child.parent.children = append(child.parent.children, child)
- }
- n.inodes = append(n.inodes, inode{})
- copy(n.inodes[1:], n.inodes)
- n.inodes[0] = target.inodes[len(target.inodes)-1]
- target.inodes = target.inodes[:len(target.inodes)-1]
- }
-
- // Update parent key for node.
- n.parent.put(n.key, n.inodes[0].key, nil, n.pgid, 0)
- n.key = n.inodes[0].key
- _assert(len(n.key) > 0, "rebalance(2): zero-length node key")
-
- return
- }
-
// If both this node and the target node are too small then merge them.
if useNextSibling {
// Reparent all child nodes being moved.
diff --git a/tx.go b/tx.go
index 299c073..b8510fd 100644
--- a/tx.go
+++ b/tx.go
@@ -5,6 +5,7 @@ import (
"io"
"os"
"sort"
+ "strings"
"time"
"unsafe"
)
@@ -202,8 +203,17 @@ func (tx *Tx) Commit() error {
// If strict mode is enabled then perform a consistency check.
// Only the first consistency error is reported in the panic.
if tx.db.StrictMode {
- if err, ok := <-tx.Check(); ok {
- panic("check fail: " + err.Error())
+ ch := tx.Check()
+ var errs []string
+ for {
+ err, ok := <-ch
+ if !ok {
+ break
+ }
+ errs = append(errs, err.Error())
+ }
+ if len(errs) > 0 {
+ panic("check fail: " + strings.Join(errs, "\n"))
}
}