]> git.giacomolli.uk - onechat/blobdiff - view.go
Queue external data for the next root turn
[onechat] / view.go
diff --git a/view.go b/view.go
index 4a6e567563030631fbcd55fbc719a1adaeb8e119..9af1c21476fccfb2d1aa7ba394d8a3120ef2c35b 100644 (file)
--- a/view.go
+++ b/view.go
@@ -88,13 +88,18 @@ func (v *View) Append(tree ViewNodeReader) (bool, error) {
        line := NodeKey{0, v.end}
        _, err := v.load(tree, line)
        if err != nil {
-               return false, err
+               return false, fmt.Errorf("load appended leaf: %w", err)
        }
 
        v.lines = append(v.lines, line)
        v.end++
 
-       return v.fit(tree)
+       merged, err := v.fit(tree)
+       if err != nil {
+               return merged, fmt.Errorf("fit appended view: %w", err)
+       }
+
+       return merged, nil
 }
 
 // load keeps the node of line when it is built, and tells if it is.
@@ -121,14 +126,18 @@ func (v *View) fit(tree ViewNodeReader) (bool, error) {
        for v.merging && size > v.low {
                best, err := v.mostDue(tree)
                if err != nil || best < 0 {
-                       return merged, err
+                       if err != nil {
+                               return merged, fmt.Errorf("choose merge candidate: %w", err)
+                       }
+
+                       return merged, nil
                }
 
                left, right := v.lines[best], v.lines[best+1]
                parent := NodeKey{left.level + 1, left.index / 2}
                _, err = v.load(tree, parent)
                if err != nil {
-                       return merged, err
+                       return merged, fmt.Errorf("load merged parent: %w", err)
                }
 
                size += v.lineSize(parent) - v.lineSize(left) - v.lineSize(right)
@@ -341,7 +350,7 @@ func restoreView(state ViewState, high, low int, tree ViewNodeReader) (*View, er
 
                built, err := v.load(tree, line)
                if err != nil {
-                       return nil, err
+                       return nil, fmt.Errorf("load restored view node: %w", err)
                }
 
                if line.level > 0 && !built {