code: func (c *jobController) processNextItem() bool {
  	key, quit := c.queue.Get()
  	if quit {
  		return false
  	}
  
  	defer c.queue.Done(key)
  
  	err := c.processItem(key.(string))
  	if err == nil {
  		// No error, tell the queue to stop tracking history
  		c.queue.Forget(key)
  	} else if c.queue.NumRequeues(key) < maxRetries {
  		glog.Errorf("Error processing %s (will retry): %v", key, err)
  		// requeue the item to work on later
  		c.queue.AddRateLimited(key)
  	} else {
  		// err != nil and too many retries
  		glog.Errorf("Error processing %s (giving up): %v", key, err)
  		c.queue.Forget(key)
  		utilruntime.HandleError(err)
  	}
  
  	return true
  }
docs: // processNextItem serially handles the events provided by the informer.