code: func (d *namespacedResourcesDeleter) retryOnConflictError(namespace *v1.Namespace, fn updateNamespaceFunc) (result *v1.Namespace, err error) {
  	latestNamespace := namespace
  	for {
  		result, err = fn(latestNamespace)
  		if err == nil {
  			return result, nil
  		}
  		if !errors.IsConflict(err) {
  			return nil, err
  		}
  		prevNamespace := latestNamespace
  		latestNamespace, err = d.nsClient.Get(latestNamespace.Name, metav1.GetOptions{})
  		if err != nil {
  			return nil, err
  		}
  		if prevNamespace.UID != latestNamespace.UID {
  			return nil, fmt.Errorf("namespace uid has changed across retries")
  		}
  	}
  }
docs: // retryOnConflictError retries the specified fn if there was a conflict error
  // it will return an error if the UID for an object changes across retry operations.
  // TODO RetryOnConflict should be a generic concept in client code