diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2022-12-28 18:49:09 -0700 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2023-01-05 19:48:17 -0700 |
commit | 8efc82d0b1a167830970135c78d173667080b116 (patch) | |
tree | 2dca71998f517fc80448ed6cdd3a6753a86926fa /cmd/btrfs-rec/inspect_rebuildnodes.go | |
parent | 52c1eb7a44f425b22f89e63a11aeb089f856a680 (diff) |
rebuildnodes: Support graceful shutdown
Diffstat (limited to 'cmd/btrfs-rec/inspect_rebuildnodes.go')
-rw-r--r-- | cmd/btrfs-rec/inspect_rebuildnodes.go | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/cmd/btrfs-rec/inspect_rebuildnodes.go b/cmd/btrfs-rec/inspect_rebuildnodes.go index e61e6d2..9c86c3a 100644 --- a/cmd/btrfs-rec/inspect_rebuildnodes.go +++ b/cmd/btrfs-rec/inspect_rebuildnodes.go @@ -33,21 +33,31 @@ func init() { } dlog.Infof(ctx, "... done reading %q", args[0]) - rebuiltNodes, err := rebuildnodes.RebuildNodes(ctx, fs, nodeScanResults) + rebuilder, err := rebuildnodes.NewRebuilder(ctx, fs, nodeScanResults) if err != nil { return err } - dlog.Info(ctx, "Writing re-built nodes to stdout...") - if err := writeJSONFile(os.Stdout, rebuiltNodes, lowmemjson.ReEncoder{ + dlog.Info(ctx, "Rebuilding node tree...") + rebuildErr := rebuilder.Rebuild(ctx) + dst := os.Stdout + if rebuildErr != nil { + dst = os.Stderr + dlog.Errorf(ctx, "rebuild error: %v", rebuildErr) + } + dlog.Infof(ctx, "Writing re-built nodes to %s...", dst.Name()) + if err := writeJSONFile(dst, rebuilder.ListRoots(), lowmemjson.ReEncoder{ Indent: "\t", ForceTrailingNewlines: true, }); err != nil { + if rebuildErr != nil { + return rebuildErr + } return err } dlog.Info(ctx, "... done writing") - return nil + return rebuildErr }, }) } |