diff --git a/apps/advisor/pkg/app/checktyperegisterer/checktyperegisterer.go b/apps/advisor/pkg/app/checktyperegisterer/checktyperegisterer.go index 53d45d460a7..67e588ec2b7 100644 --- a/apps/advisor/pkg/app/checktyperegisterer/checktyperegisterer.go +++ b/apps/advisor/pkg/app/checktyperegisterer/checktyperegisterer.go @@ -7,6 +7,8 @@ import ( "strings" "time" + "github.com/google/go-cmp/cmp" + "github.com/google/go-cmp/cmp/cmpopts" "github.com/grafana/grafana-app-sdk/app" "github.com/grafana/grafana-app-sdk/k8s" "github.com/grafana/grafana-app-sdk/logging" @@ -60,38 +62,6 @@ func New(cfg app.Config, log logging.Logger) (app.Runnable, error) { }, nil } -func (r *Runner) createOrUpdate(ctx context.Context, log logging.Logger, obj resource.Object) error { - id := obj.GetStaticMetadata().Identifier() - _, err := r.client.Create(ctx, id, obj, resource.CreateOptions{}) - if err != nil { - if errors.IsAlreadyExists(err) { - // Already exists, update - log.Debug("Check type already exists, updating", "identifier", id) - // Retrieve current annotations to avoid overriding them - current, err := r.client.Get(ctx, obj.GetStaticMetadata().Identifier()) - if err != nil { - return err - } - currentAnnotations := current.GetAnnotations() - if currentAnnotations == nil { - currentAnnotations = make(map[string]string) - } - annotations := obj.GetAnnotations() - maps.Copy(currentAnnotations, annotations) - obj.SetAnnotations(currentAnnotations) // This will update the annotations in the object - _, err = r.client.Update(ctx, id, obj, resource.UpdateOptions{}) - if err != nil && !errors.IsAlreadyExists(err) { - // Ignore the error, it's probably due to a race condition - log.Info("Error updating check type, ignoring", "error", err) - } - return nil - } - return err - } - log.Debug("Check type registered successfully", "identifier", id) - return nil -} - func (r *Runner) Run(ctx context.Context) error { logger := r.log.WithContext(ctx) for _, t := range r.checkRegistry.Checks() { @@ -121,26 +91,139 @@ func (r *Runner) Run(ctx context.Context) error { Steps: stepTypes, }, } - for i := 0; i < r.retryAttempts; i++ { - err := r.createOrUpdate(context.WithoutCancel(ctx), logger, obj) - if err != nil { - if strings.Contains(err.Error(), "apiserver is shutting down") { - logger.Debug("Error creating check type, not retrying", "error", err) - return nil - } - logger.Debug("Error creating check type, retrying", "error", err, "attempt", i+1) - if i == r.retryAttempts-1 { - logger.Error("Unable to register check type", "check_type", t.ID(), "error", err) - } else { - // Calculate exponential backoff delay: baseDelay * 2^attempt - delay := r.retryDelay * time.Duration(1<