// worker runs a worker thread that just dequeues items, processes them, and marks them done. func (rq *ResourceQuotaController) worker(queue workqueue.RateLimitingInterface) func() { workFunc := func() bool { key, quit := queue.Get() if quit { return true } defer queue.Done(key) err := rq.syncHandler(key.(string)) if err == nil { queue.Forget(key) return false } utilruntime.HandleError(err) queue.AddRateLimited(key) return false } return func() { for { if quit := workFunc(); quit { glog.Infof("resource quota controller worker shutting down") return } } } }
// complete optionally requeues key, then calls queue.Done(key) func (e *TokensController) retryOrForget(queue workqueue.RateLimitingInterface, key interface{}, requeue bool) { if !requeue { queue.Forget(key) return } requeueCount := queue.NumRequeues(key) if requeueCount < e.maxRetries { queue.AddRateLimited(key) return } glog.V(4).Infof("retried %d times: %#v", requeueCount, key) queue.Forget(key) }