You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When a sync controller fails during startup, it is removed from DynamicMultiClusterManager.runnables, but its entry remains in the sync manager's syncCancels map.
Subsequent calls to ensureSyncController() for the same PublishedResource UID/resourceVersion find this stale entry and return an empty result and nil error without creating a replacement controller.
The controller has stopped, but the sync manager still considers it present.
Steps To Reproduce
Run the agent with an enabled PublishedResource and verify that an annotation update on an existing object in kcp propagates to the service cluster.
Restart the agent with a temporary proxy that returns HTTP 503 for LIST/WATCH requests to that resource in the service cluster. Keep API discovery and other API requests available.
Keep those requests blocked for longer than the controller's cache sync timeout. In this test, requests were blocked for 180 seconds.
Observe Controller failed to start with a cache sync timeout error.
Restore API access without restarting the agent or modifying the PublishedResource.
Update the annotation on the same object in kcp.
Observe that the update does not propagate to the service cluster and no replacement sync controller is created. Confirm that the PublishedResource's resourceVersion is unchanged.
Restart the agent and observe that the pending annotation update propagates.
Expected Behaviour
When a sync controller fails during startup, the sync manager should clear the failed controller's registration and retry startup with backoff.
Once API access is restored, synchronization should resume without restarting the agent or modifying the PublishedResource.
Additional Context
Related: #182 concerns old controllers remaining active after PublishedResource updates. This report concerns failed controllers preventing subsequent startup retries.
I now save the sync controller's cancel function only after it has started successfully, so a failed start no longer blocks the next retry. I added a unit test for this. (PR: #191)
Activity
Sarthak-Shreshtha01 commentedon Oct 8, 2026
I now save the sync controller's cancel function only after it has started successfully, so a failed start no longer blocks the next retry. I added a unit test for this. (PR: #191)