code: func (dc *DeploymentController) deleteReplicaSet(obj interface{}) {
  	rs, ok := obj.(*apps.ReplicaSet)
  
  	// When a delete is dropped, the relist will notice a pod in the store not
  	// in the list, leading to the insertion of a tombstone object which contains
  	// the deleted key/value. Note that this value might be stale. If the ReplicaSet
  	// changed labels the new deployment will not be woken up till the periodic resync.
  	if !ok {
  		tombstone, ok := obj.(cache.DeletedFinalStateUnknown)
  		if !ok {
  			utilruntime.HandleError(fmt.Errorf("Couldn't get object from tombstone %#v", obj))
  			return
  		}
  		rs, ok = tombstone.Obj.(*apps.ReplicaSet)
  		if !ok {
  			utilruntime.HandleError(fmt.Errorf("Tombstone contained object that is not a ReplicaSet %#v", obj))
  			return
  		}
  	}
  
  	controllerRef := metav1.GetControllerOf(rs)
  	if controllerRef == nil {
  		// No controller should care about orphans being deleted.
  		return
  	}
  	d := dc.resolveControllerRef(rs.Namespace, controllerRef)
  	if d == nil {
  		return
  	}
  	klog.V(4).Infof("ReplicaSet %s deleted.", rs.Name)
  	dc.enqueueDeployment(d)
  }
docs: // deleteReplicaSet enqueues the deployment that manages a ReplicaSet when
  // the ReplicaSet is deleted. obj could be an *apps.ReplicaSet, or
  // a DeletionFinalStateUnknown marker item.