Wire contexts to Bootstrap controllers

This commit is contained in:
Mike Dame
2021-04-22 14:20:58 -04:00
parent afd55590e2
commit 6ce2924818
5 changed files with 35 additions and 33 deletions

View File

@@ -111,20 +111,20 @@ func NewTokenCleaner(cl clientset.Interface, secrets coreinformers.SecretInforme
}
// Run runs controller loops and returns when they are done
func (tc *TokenCleaner) Run(stopCh <-chan struct{}) {
func (tc *TokenCleaner) Run(ctx context.Context) {
defer utilruntime.HandleCrash()
defer tc.queue.ShutDown()
klog.Infof("Starting token cleaner controller")
defer klog.Infof("Shutting down token cleaner controller")
if !cache.WaitForNamedCacheSync("token_cleaner", stopCh, tc.secretSynced) {
if !cache.WaitForNamedCacheSync("token_cleaner", ctx.Done(), tc.secretSynced) {
return
}
go wait.Until(tc.worker, 10*time.Second, stopCh)
go wait.UntilWithContext(ctx, tc.worker, 10*time.Second)
<-stopCh
<-ctx.Done()
}
func (tc *TokenCleaner) enqueueSecrets(obj interface{}) {
@@ -137,20 +137,20 @@ func (tc *TokenCleaner) enqueueSecrets(obj interface{}) {
}
// worker runs a thread that dequeues secrets, handles them, and marks them done.
func (tc *TokenCleaner) worker() {
for tc.processNextWorkItem() {
func (tc *TokenCleaner) worker(ctx context.Context) {
for tc.processNextWorkItem(ctx) {
}
}
// processNextWorkItem deals with one key off the queue. It returns false when it's time to quit.
func (tc *TokenCleaner) processNextWorkItem() bool {
func (tc *TokenCleaner) processNextWorkItem(ctx context.Context) bool {
key, quit := tc.queue.Get()
if quit {
return false
}
defer tc.queue.Done(key)
if err := tc.syncFunc(key.(string)); err != nil {
if err := tc.syncFunc(ctx, key.(string)); err != nil {
tc.queue.AddRateLimited(key)
utilruntime.HandleError(fmt.Errorf("Sync %v failed with : %v", key, err))
return true
@@ -160,7 +160,7 @@ func (tc *TokenCleaner) processNextWorkItem() bool {
return true
}
func (tc *TokenCleaner) syncFunc(key string) error {
func (tc *TokenCleaner) syncFunc(ctx context.Context, key string) error {
startTime := time.Now()
defer func() {
klog.V(4).Infof("Finished syncing secret %q (%v)", key, time.Since(startTime))
@@ -182,12 +182,12 @@ func (tc *TokenCleaner) syncFunc(key string) error {
}
if ret.Type == bootstrapapi.SecretTypeBootstrapToken {
tc.evalSecret(ret)
tc.evalSecret(ctx, ret)
}
return nil
}
func (tc *TokenCleaner) evalSecret(o interface{}) {
func (tc *TokenCleaner) evalSecret(ctx context.Context, o interface{}) {
secret := o.(*v1.Secret)
ttl, alreadyExpired := bootstrapsecretutil.GetExpiration(secret, time.Now())
if alreadyExpired {
@@ -196,7 +196,7 @@ func (tc *TokenCleaner) evalSecret(o interface{}) {
if len(secret.UID) > 0 {
options.Preconditions = &metav1.Preconditions{UID: &secret.UID}
}
err := tc.client.CoreV1().Secrets(secret.Namespace).Delete(context.TODO(), secret.Name, options)
err := tc.client.CoreV1().Secrets(secret.Namespace).Delete(ctx, secret.Name, options)
// NotFound isn't a real error (it's already been deleted)
// Conflict isn't a real error (the UID precondition failed)
if err != nil && !apierrors.IsConflict(err) && !apierrors.IsNotFound(err) {