summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/errors.go8
-rw-r--r--recording/runner.go18
2 files changed, 18 insertions, 8 deletions
diff --git a/common/errors.go b/common/errors.go
index fa2d492..62899c1 100644
--- a/common/errors.go
+++ b/common/errors.go
@@ -42,6 +42,10 @@ func (e *RecoverableTaskError) Error() string {
return fmt.Sprintf("%v: %v", e.message, e.err)
}
+func (e *RecoverableTaskError) Unwrap() error {
+ return e.err
+}
+
func NewRecoverableTaskError(message string, err error) error {
return &RecoverableTaskError{message: message, err: err}
}
@@ -55,6 +59,10 @@ func (e *UnrecoverableTaskError) Error() string {
return fmt.Sprintf("%v: %v", e.message, e.err)
}
+func (e *UnrecoverableTaskError) Unwrap() error {
+ return e.err
+}
+
func NewUnrecoverableTaskError(message string, err error) error {
return &UnrecoverableTaskError{message: message, err: err}
}
diff --git a/recording/runner.go b/recording/runner.go
index 8c1e047..f12e9cd 100644
--- a/recording/runner.go
+++ b/recording/runner.go
@@ -40,7 +40,11 @@ func (t *RunningTask) runTaskWithAutoRestart() {
t.status = StRunning
loop:
for {
- switch err := tryRunTask(t); err.(type) {
+ err := tryRunTask(t)
+ if errors.Is(err, context.Canceled) {
+ break
+ }
+ switch err.(type) {
case nil:
t.logger.Info("Task stopped: %v", t.String())
case *common.RecoverableTaskError:
@@ -49,9 +53,7 @@ loop:
}
t.status = StRestarting
default:
- if !errors.Is(err, context.Canceled) {
- t.logger.Error("Cannot recover from error: %v", err)
- }
+ t.logger.Error("Cannot recover from error: %v", err)
break loop
}
}
@@ -123,6 +125,10 @@ func tryRunTask(t *RunningTask) error {
liveStatusChecker,
t.logger,
)
+ // the context is cancelled
+ if errors.Is(err, context.Canceled) {
+ break loop
+ }
switch err.(type) {
case nil:
// live is started, stop watcher loop and start the recorder
@@ -139,10 +145,6 @@ func tryRunTask(t *RunningTask) error {
t.logger.Error("Error occurred in live status watcher: %v", err)
default:
run = false
- // the task is being cancelled
- if errors.Is(err, context.Canceled) {
- break loop
- }
// unknown error type, this should not happen
t.logger.Error("Unexpected type of error in watcher: %v", err)
}