code: func checkAndUpdatePod(existing, ref *v1.Pod) (needUpdate, needReconcile, needGracefulDelete bool) {
  
  	// 1. this is a reconcile
  	// TODO: it would be better to update the whole object and only preserve certain things
  	//       like the source annotation or the UID (to ensure safety)
  	if !podsDifferSemantically(existing, ref) {
  		// this is not an update
  		// Only check reconcile when it is not an update, because if the pod is going to
  		// be updated, an extra reconcile is unnecessary
  		if !reflect.DeepEqual(existing.Status, ref.Status) {
  			// Pod with changed pod status needs reconcile, because kubelet should
  			// be the source of truth of pod status.
  			existing.Status = ref.Status
  			needReconcile = true
  		}
  		return
  	}
  
  	// Overwrite the first-seen time with the existing one. This is our own
  	// internal annotation, there is no need to update.
  	ref.Annotations[kubetypes.ConfigFirstSeenAnnotationKey] = existing.Annotations[kubetypes.ConfigFirstSeenAnnotationKey]
  
  	existing.Spec = ref.Spec
  	existing.Labels = ref.Labels
  	existing.DeletionTimestamp = ref.DeletionTimestamp
  	existing.DeletionGracePeriodSeconds = ref.DeletionGracePeriodSeconds
  	existing.Status = ref.Status
  	updateAnnotations(existing, ref)
  
  	// 2. this is an graceful delete
  	if ref.DeletionTimestamp != nil {
  		needGracefulDelete = true
  	} else {
  		// 3. this is an update
  		needUpdate = true
  	}
  
  	return
  }
docs: // checkAndUpdatePod updates existing, and:
  //   * if ref makes a meaningful change, returns needUpdate=true
  //   * if ref makes a meaningful change, and this change is graceful deletion, returns needGracefulDelete=true
  //   * if ref makes no meaningful change, but changes the pod status, returns needReconcile=true
  //   * else return all false
  //   Now, needUpdate, needGracefulDelete and needReconcile should never be both true