Commit 442970ff authored by Adrian Sutton's avatar Adrian Sutton

op-program: Continue derivation after temporary errors

parent 1098c07d
...@@ -61,6 +61,11 @@ func (d *Driver) Step(ctx context.Context) error { ...@@ -61,6 +61,11 @@ func (d *Driver) Step(ctx context.Context) error {
} }
d.logger.Debug("Data is lacking") d.logger.Debug("Data is lacking")
return nil return nil
} else if errors.Is(err, derive.ErrTemporary) {
// While most temporary errors are due to requests for external data failing which can't happen,
// they may also be returned due to other events like channels timing out so need to be handled
d.logger.Warn("Temporary error in derivation", "err", err)
return nil
} else if err != nil { } else if err != nil {
return fmt.Errorf("pipeline err: %w", err) return fmt.Errorf("pipeline err: %w", err)
} }
......
...@@ -23,7 +23,7 @@ func TestDerivationComplete(t *testing.T) { ...@@ -23,7 +23,7 @@ func TestDerivationComplete(t *testing.T) {
func TestTemporaryError(t *testing.T) { func TestTemporaryError(t *testing.T) {
driver := createDriver(t, fmt.Errorf("whoopsie: %w", derive.ErrTemporary)) driver := createDriver(t, fmt.Errorf("whoopsie: %w", derive.ErrTemporary))
err := driver.Step(context.Background()) err := driver.Step(context.Background())
require.ErrorIs(t, err, derive.ErrTemporary) require.NoError(t, err, "should allow derivation to continue after temporary error")
} }
func TestNotEnoughDataError(t *testing.T) { func TestNotEnoughDataError(t *testing.T) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment