This fixes two instances where loop variables were being incorrectly
used:
- using a loop variable in a closure passed to `ginkgo.It()` is
incorrect, as the capture happens by reference and only the last test
case will be executed (multiple times).
- a similar issue happens in the context of a goroutine; specifically,
we need to create a copy of the `runDurationFunc` before calling it in
a goroutine as done by the controller's `Run` function.
With regards to the second issue, I believe it never came to the
surface because, in production code, only one `runDurationFunc` is
passed; tests don't exercise the multiple funcs path either.
Issues were automatically found with the `loopvarcapture` linter.
Signed-off-by: Renato Costa <renato@cockroachlabs.com>
Introducing a new metric controller_sync_error_count counting the
number of errors during sync() of a controller.
This adds more visibility to potential issues ranging from things like
connection problems to the API or webhooks to possible hard errors.
For context, please see #4956
Signed-off-by: Janis Meybohm <jmeybohm@wikimedia.org>
pkg/controller/controller.go:135:1: receiver name b should be consistent with previous receiver name c for controller
Signed-off-by: Richard Wall <richard.wall@jetstack.io>