X-Git-Url: https://git.giacomolli.uk/onechat/blobdiff_plain/448c931a776c3e3f65ca2eab11da0c062d597818..9346d20fe4297dce1aa16171749a7ef3e41ce7bd:/tree.go diff --git a/tree.go b/tree.go index db93b1d..765016e 100644 --- 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.