🐛 Error when source.Start() never returns #2997
Open
+91
−45
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Contrary to everything else in controller-runtime, we expect
source.Start
to be non-blocking. If someone implements a custom source and gets this wrong, the resulting behavior is that the binary starts successfully, but no reconciliation happens which is extremely difficult to understand and debug.This change makes us use the
CacheSyncTimeout
not only for the sourcesWaitForSync
but also for itsStart
.It is worth noting that the current design of both requiring
Start
to not block andWaitForSync
to block is very confusing. It likely came to be because we basicaly require two distinct contexsts inStart
, one to indicate the lifetime of theSource
and one to indicate theStart
timeout.To overall simplify and improve the code, the change also parallelizes the
Start
of the sources.