code: func (c *mutationCache) Mutation(obj interface{}) {
  	c.lock.Lock()
  	defer c.lock.Unlock()
  
  	key, err := DeletionHandlingMetaNamespaceKeyFunc(obj)
  	if err != nil {
  		// this is a "nice to have", so failures shouldn't do anything weird
  		utilruntime.HandleError(err)
  		return
  	}
  
  	if objRuntime, ok := obj.(runtime.Object); ok {
  		if mutatedObj, exists := c.mutationCache.Get(key); exists {
  			if mutatedObjRuntime, ok := mutatedObj.(runtime.Object); ok {
  				if c.comparator.CompareResourceVersion(objRuntime, mutatedObjRuntime) < 0 {
  					return
  				}
  			}
  		}
  	}
  	c.mutationCache.Add(key, obj, c.ttl)
  }
docs: // Mutation adds a change to the cache that can be returned in GetByKey if it is newer than the backingCache
  // copy.  If you call Mutation twice with the same object on different threads, one will win, but its not defined
  // which one.  This doesn't affect correctness, since the GetByKey guaranteed of "later of these two caches" is
  // preserved, but you may not get the version of the object you want.  The object you get is only guaranteed to
  // "one that was valid at some point in time", not "the one that I want".