]> git.giacomolli.uk - onechat/blobdiff - tree.go
Complete context on forwarded local errors
[onechat] / tree.go
diff --git a/tree.go b/tree.go
index db93b1d70357bb98e893e6ee6484b05570b24885..765016eaba3e14c1ebd2dba4b5b30356346418e4 100644 (file)
--- a/tree.go
+++ b/tree.go
@@ -122,7 +122,7 @@ func (t *Tree) open(ctx context.Context, total int) error {
                }
        }
 
-       return t.journal.Scan(ctx, start, func(line []byte, place Position) error {
+       err = t.journal.Scan(ctx, start, func(line []byte, place Position) error {
                var node Node
 
                err := json.Unmarshal(line, &node)
@@ -132,15 +132,25 @@ func (t *Tree) open(ctx context.Context, total int) error {
 
                err = t.check(node)
                if err != nil {
-                       return err
+                       return fmt.Errorf("validate scanned node: %w", err)
                }
 
                if nodeEnd(node.Level, node.Index) > total {
                        return fmt.Errorf("node (%d, %d) covers messages after the log", node.Level, node.Index)
                }
 
-               return t.addIndex(NodeKey{node.Level, node.Index}, place)
+               err = t.addIndex(NodeKey{node.Level, node.Index}, place)
+               if err != nil {
+                       return fmt.Errorf("index scanned node: %w", err)
+               }
+
+               return nil
        })
+       if err != nil {
+               return fmt.Errorf("scan node journal: %w", err)
+       }
+
+       return nil
 }
 
 // Close closes the files of the tree.
@@ -188,7 +198,12 @@ func (t *Tree) writeLevel(node NodeKey, place Position) error {
        record := make([]byte, positionBytes)
        encodePosition(record, place)
 
-       return level.Write(node.index, record)
+       err = level.Write(node.index, record)
+       if err != nil {
+               return fmt.Errorf("write node level record: %w", err)
+       }
+
+       return nil
 }
 
 // check makes sure that node is valid and can join the tree now.
@@ -240,7 +255,12 @@ func (t *Tree) addIndex(node NodeKey, place Position) error {
                return fmt.Errorf("append node order: %w", err)
        }
 
-       return t.writeLevel(node, place)
+       err = t.writeLevel(node, place)
+       if err != nil {
+               return fmt.Errorf("write indexed node level: %w", err)
+       }
+
+       return nil
 }
 
 // level returns the index of level, and opens it at first use.