VictoriaMetrics / operator

Kubernetes operator for Victoria Metrics
Apache License 2.0
410 stars 141 forks source link

retry Update requests #901

Closed f41gh7 closed 3 months ago

f41gh7 commented 4 months ago

Currently, operator may produce a conflict error if object was already modified by some kubernetes controller or any other external controller.

This error can be retried with the following code:

err := retry.RetryOnConflict(retry.DefaultRetry, func() error {    var res apiv1.MyResource    err := r.Get(ctx, types.NamespacedName{        Name:      resourceName,        Namespace: resourceNamespace,    }, &res)    if err != nil {        return err    }    res.Status.Replias = readyReplicas        return r.Status().Update(ctx, &res)})if err != nil {    return fmt.Errorf("failed to update resource status: %w", err)}

https://alenkacz.medium.com/kubernetes-operators-best-practices-understanding-conflict-errors-d05353dff421 https://pkg.go.dev/k8s.io/client-go/util/retry#RetryOnConflict

f41gh7 commented 3 months ago

Operator performs proper checks for conflict error and retry requests.

Must be fixed at v0.43.0 release