From a4dd32dacb1878676316d00bea5263a9b57b3f3d Mon Sep 17 00:00:00 2001 From: arao Date: Thu, 26 Mar 2026 11:32:21 -0700 Subject: [PATCH] ENG-00000 adding new finalize-with-error --- service/operator/service.go | 10 ++++++++++ view/state/hook.go | 5 +++++ 2 files changed, 15 insertions(+) diff --git a/service/operator/service.go b/service/operator/service.go index a5a61ecb..ee930050 100644 --- a/service/operator/service.go +++ b/service/operator/service.go @@ -143,6 +143,16 @@ func (s *Service) finalize(ctx context.Context, ret interface{}, err error, aSes err = injectorFinalizer.Finalize(ctx, lookup) return ret, err } + if finalizer, ok := ret.(state.FinalizerWithError); ok { + finalizeErr := finalizer.Finalize(ctx, err) + if err != nil { + if finalizeErr != nil { + return ret, errors.Join(err, finalizeErr) + } + return ret, err + } + return ret, finalizeErr + } if err != nil { return ret, err } diff --git a/view/state/hook.go b/view/state/hook.go index e871f4d6..144dd93a 100644 --- a/view/state/hook.go +++ b/view/state/hook.go @@ -17,6 +17,11 @@ type Finalizer interface { Finalize(ctx context.Context) error } +// FinaliserWithError is an error-aware finalizer that receives an error from previous steps. +type FinalizerWithError interface { + Finalize(ctx context.Context, err error) error +} + type InjectorFinalizer interface { Finalize(ctx context.Context, getInjector func(ctx context.Context, path http.Route) (state.Injector, error)) error }