}
}
- 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)
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.
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.
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.