code: func (r *RollingUpdater) cleanupWithClients(oldRc, newRc *api.ReplicationController, config *RollingUpdaterConfig) error {
  	// Clean up annotations
  	var err error
  	newRc, err = r.c.ReplicationControllers(r.ns).Get(newRc.Name)
  	if err != nil {
  		return err
  	}
  	delete(newRc.Annotations, sourceIdAnnotation)
  	delete(newRc.Annotations, desiredReplicasAnnotation)
  
  	newRc, err = r.c.ReplicationControllers(r.ns).Update(newRc)
  	if err != nil {
  		return err
  	}
  	if err = wait.Poll(config.Interval, config.Timeout, client.ControllerHasDesiredReplicas(r.c, newRc)); err != nil {
  		return err
  	}
  	newRc, err = r.c.ReplicationControllers(r.ns).Get(newRc.Name)
  	if err != nil {
  		return err
  	}
  
  	switch config.CleanupPolicy {
  	case DeleteRollingUpdateCleanupPolicy:
  		// delete old rc
  		fmt.Fprintf(config.Out, "Update succeeded. Deleting %s\n", oldRc.Name)
  		return r.c.ReplicationControllers(r.ns).Delete(oldRc.Name)
  	case RenameRollingUpdateCleanupPolicy:
  		// delete old rc
  		fmt.Fprintf(config.Out, "Update succeeded. Deleting old controller: %s\n", oldRc.Name)
  		if err := r.c.ReplicationControllers(r.ns).Delete(oldRc.Name); err != nil {
  			return err
  		}
  		fmt.Fprintf(config.Out, "Renaming %s to %s\n", newRc.Name, oldRc.Name)
  		return Rename(r.c, newRc, oldRc.Name)
  	case PreserveRollingUpdateCleanupPolicy:
  		return nil
  	default:
  		return nil
  	}
  }
docs: // cleanupWithClients performs cleanup tasks after the rolling update. Update
  // process related annotations are removed from oldRc and newRc. The
  // CleanupPolicy on config is executed.