aboutsummaryrefslogtreecommitdiffhomepage
path: root/main.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2025-02-25 00:32:07 +0900
committerOphestra <cat@gensokyo.uk>2025-02-25 00:45:00 +0900
commitf0a082ec84172f5b3f001bcc757bade06feb0457 (patch)
tree2a9dcb14fa5baea7a6da2fd964461fc67e31bf01 /main.go
parent751aa350ee606bbed5405ba5a1d8f27f5b07cf1e (diff)
fortify: improve handling of RevertErr
All this error wrapping is getting a bit ridiculous and I might want to do something about that somewhere down the line. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'main.go')
-rw-r--r--main.go43
1 files changed, 42 insertions, 1 deletions
diff --git a/main.go b/main.go
index be32f0b4..dc738e58 100644
--- a/main.go
+++ b/main.go
@@ -304,7 +304,48 @@ func runApp(a fst.App, config *fst.Config) {
}
}
if rs.RevertErr != nil {
- fmsg.PrintBaseError(rs.RevertErr, "generic error returned during cleanup:")
+ var stateStoreError *app.StateStoreError
+ if !errors.As(rs.RevertErr, &stateStoreError) || stateStoreError == nil {
+ fmsg.PrintBaseError(rs.RevertErr, "generic fault during cleanup:")
+ goto out
+ }
+
+ if stateStoreError.Err != nil {
+ if len(stateStoreError.Err) == 2 {
+ if stateStoreError.Err[0] != nil {
+ if joinedErrs, ok := stateStoreError.Err[0].(interface{ Unwrap() []error }); !ok {
+ fmsg.PrintBaseError(stateStoreError.Err[0], "generic fault during revert:")
+ } else {
+ for _, err := range joinedErrs.Unwrap() {
+ if err != nil {
+ fmsg.PrintBaseError(err, "fault during revert:")
+ }
+ }
+ }
+ }
+ if stateStoreError.Err[1] != nil {
+ log.Printf("cannot close store: %v", stateStoreError.Err[1])
+ }
+ } else {
+ log.Printf("fault during cleanup: %v",
+ errors.Join(stateStoreError.Err...))
+ }
+ }
+
+ if stateStoreError.OpErr != nil {
+ log.Printf("blind revert due to store fault: %v",
+ stateStoreError.OpErr)
+ }
+
+ if stateStoreError.DoErr != nil {
+ fmsg.PrintBaseError(stateStoreError.DoErr, "state store operation unsuccessful:")
+ }
+
+ if stateStoreError.Inner && stateStoreError.InnerErr != nil {
+ fmsg.PrintBaseError(stateStoreError.InnerErr, "cannot destroy state entry:")
+ }
+
+ out:
if rs.ExitCode == 0 {
rs.ExitCode = 128
}