From 38602f814a1e9c6d49ffe7253c77ab8e385877a2 Mon Sep 17 00:00:00 2001 From: Thomas Kosiewski Date: Wed, 11 Feb 2026 10:45:45 +0100 Subject: [PATCH] fix: avoid noisy reconcile errors after resource create Change-Id: Iae9bd07b436ee7b24eaac7b3a40baed45883dd96 Signed-off-by: Thomas Kosiewski --- examples/cloudnativepg/README.md | 6 +++--- examples/cloudnativepg/codercontrolplane.yaml | 2 +- internal/controller/codercontrolplane_controller.go | 11 ++++------- internal/controller/workspaceproxy_controller.go | 12 ++++-------- 4 files changed, 12 insertions(+), 19 deletions(-) diff --git a/examples/cloudnativepg/README.md b/examples/cloudnativepg/README.md index 0bc17690..7f593c7d 100644 --- a/examples/cloudnativepg/README.md +++ b/examples/cloudnativepg/README.md @@ -63,12 +63,12 @@ kubectl -n coder get codercontrolplane coder In one terminal: ```bash -kubectl -n coder port-forward svc/coder 8080:80 +kubectl -n coder port-forward svc/coder 3000:80 ``` Then open: -- +- Use the setup flow to create the first admin user. @@ -76,7 +76,7 @@ Use the setup flow to create the first admin user. This example sets: -- `CODER_ACCESS_URL=http://localhost:8080` +- `CODER_ACCESS_URL=http://localhost:3000` That value is convenient for UI smoke tests through `kubectl port-forward`, but it is not suitable for end-to-end workspace connectivity because in-cluster components cannot reach your local `localhost`. diff --git a/examples/cloudnativepg/codercontrolplane.yaml b/examples/cloudnativepg/codercontrolplane.yaml index 2258d090..6f0a9a8f 100644 --- a/examples/cloudnativepg/codercontrolplane.yaml +++ b/examples/cloudnativepg/codercontrolplane.yaml @@ -15,4 +15,4 @@ spec: name: coder-db-app key: uri - name: CODER_ACCESS_URL - value: http://localhost:8080 + value: http://localhost:3000 diff --git a/internal/controller/codercontrolplane_controller.go b/internal/controller/codercontrolplane_controller.go index 1b0a0705..2fc30203 100644 --- a/internal/controller/codercontrolplane_controller.go +++ b/internal/controller/codercontrolplane_controller.go @@ -12,7 +12,6 @@ import ( apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/intstr" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" @@ -127,9 +126,8 @@ func (r *CoderControlPlaneReconciler) reconcileDeployment(ctx context.Context, c return nil, fmt.Errorf("reconcile control plane deployment: %w", err) } - if err := r.Get(ctx, types.NamespacedName{Name: deployment.Name, Namespace: deployment.Namespace}, deployment); err != nil { - return nil, fmt.Errorf("get reconciled deployment: %w", err) - } + // Avoid an immediate cached read-after-write here; cache propagation lag can + // transiently return NotFound for just-created objects and produce noisy reconcile errors. return deployment, nil } @@ -168,9 +166,8 @@ func (r *CoderControlPlaneReconciler) reconcileService(ctx context.Context, code return nil, fmt.Errorf("reconcile control plane service: %w", err) } - if err := r.Get(ctx, types.NamespacedName{Name: service.Name, Namespace: service.Namespace}, service); err != nil { - return nil, fmt.Errorf("get reconciled service: %w", err) - } + // Avoid an immediate cached read-after-write here; cache propagation lag can + // transiently return NotFound for just-created objects and produce noisy reconcile errors. return service, nil } diff --git a/internal/controller/workspaceproxy_controller.go b/internal/controller/workspaceproxy_controller.go index 796470e4..faa48e2d 100644 --- a/internal/controller/workspaceproxy_controller.go +++ b/internal/controller/workspaceproxy_controller.go @@ -227,10 +227,8 @@ func (r *WorkspaceProxyReconciler) reconcileDeployment( return nil, fmt.Errorf("reconcile workspace proxy deployment: %w", err) } - if err := r.Get(ctx, types.NamespacedName{Name: deployment.Name, Namespace: deployment.Namespace}, deployment); err != nil { - return nil, fmt.Errorf("get reconciled deployment: %w", err) - } - + // Avoid an immediate cached read-after-write here; cache propagation lag can + // transiently return NotFound for just-created objects and produce noisy reconcile errors. return deployment, nil } @@ -270,10 +268,8 @@ func (r *WorkspaceProxyReconciler) reconcileService(ctx context.Context, workspa return nil, fmt.Errorf("reconcile workspace proxy service: %w", err) } - if err := r.Get(ctx, types.NamespacedName{Name: serviceName, Namespace: service.Namespace}, service); err != nil { - return nil, fmt.Errorf("get reconciled service: %w", err) - } - + // Avoid an immediate cached read-after-write here; cache propagation lag can + // transiently return NotFound for just-created objects and produce noisy reconcile errors. return service, nil }