mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-10-31 18:28:13 +00:00 
			
		
		
		
	Updating the registry to return whether the resource was immediately deleted
This commit is contained in:
		| @@ -78,6 +78,6 @@ func (s *storage) UpdateCluster(ctx genericapirequest.Context, cluster *federati | ||||
| } | ||||
|  | ||||
| func (s *storage) DeleteCluster(ctx genericapirequest.Context, name string) error { | ||||
| 	_, err := s.Delete(ctx, name, nil) | ||||
| 	_, _, err := s.Delete(ctx, name, nil) | ||||
| 	return err | ||||
| } | ||||
|   | ||||
							
								
								
									
										2
									
								
								pkg/master/thirdparty/thirdparty.go
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								pkg/master/thirdparty/thirdparty.go
									
									
									
									
										vendored
									
									
								
							| @@ -175,7 +175,7 @@ func (m *ThirdPartyResourceServer) removeAllThirdPartyResources(registry *thirdp | ||||
| 	} | ||||
| 	for ix := range list.Items { | ||||
| 		item := &list.Items[ix] | ||||
| 		if _, err := registry.Delete(ctx, item.Name, nil); err != nil { | ||||
| 		if _, _, err := registry.Delete(ctx, item.Name, nil); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
|   | ||||
| @@ -79,6 +79,6 @@ func (s *storage) GetCSR(ctx genericapirequest.Context, name string, options *me | ||||
| } | ||||
|  | ||||
| func (s *storage) DeleteCSR(ctx genericapirequest.Context, name string) error { | ||||
| 	_, err := s.Delete(ctx, name, nil) | ||||
| 	_, _, err := s.Delete(ctx, name, nil) | ||||
| 	return err | ||||
| } | ||||
|   | ||||
| @@ -87,7 +87,6 @@ func (s *storage) UpdateConfigMap(ctx genericapirequest.Context, cfg *api.Config | ||||
| } | ||||
|  | ||||
| func (s *storage) DeleteConfigMap(ctx genericapirequest.Context, name string) error { | ||||
| 	_, err := s.Delete(ctx, name, nil) | ||||
|  | ||||
| 	_, _, err := s.Delete(ctx, name, nil) | ||||
| 	return err | ||||
| } | ||||
|   | ||||
| @@ -71,6 +71,6 @@ func (s *storage) UpdateEndpoints(ctx genericapirequest.Context, endpoints *api. | ||||
| } | ||||
|  | ||||
| func (s *storage) DeleteEndpoints(ctx genericapirequest.Context, name string) error { | ||||
| 	_, err := s.Delete(ctx, name, nil) | ||||
| 	_, _, err := s.Delete(ctx, name, nil) | ||||
| 	return err | ||||
| } | ||||
|   | ||||
| @@ -77,6 +77,6 @@ func (s *storage) UpdateNamespace(ctx genericapirequest.Context, namespace *api. | ||||
| } | ||||
|  | ||||
| func (s *storage) DeleteNamespace(ctx genericapirequest.Context, namespaceID string) error { | ||||
| 	_, err := s.Delete(ctx, namespaceID, nil) | ||||
| 	_, _, err := s.Delete(ctx, namespaceID, nil) | ||||
| 	return err | ||||
| } | ||||
|   | ||||
| @@ -82,10 +82,10 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST, *Finaliz | ||||
| } | ||||
|  | ||||
| // Delete enforces life-cycle rules for namespace termination | ||||
| func (r *REST) Delete(ctx genericapirequest.Context, name string, options *metav1.DeleteOptions) (runtime.Object, error) { | ||||
| func (r *REST) Delete(ctx genericapirequest.Context, name string, options *metav1.DeleteOptions) (runtime.Object, bool, error) { | ||||
| 	nsObj, err := r.Get(ctx, name, &metav1.GetOptions{}) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 		return nil, false, err | ||||
| 	} | ||||
|  | ||||
| 	namespace := nsObj.(*api.Namespace) | ||||
| @@ -105,7 +105,7 @@ func (r *REST) Delete(ctx genericapirequest.Context, name string, options *metav | ||||
| 			name, | ||||
| 			fmt.Errorf("Precondition failed: UID in precondition: %v, UID in object meta: %v", *options.Preconditions.UID, namespace.UID), | ||||
| 		) | ||||
| 		return nil, err | ||||
| 		return nil, false, err | ||||
| 	} | ||||
|  | ||||
| 	// upon first request to delete, we switch the phase to start namespace termination | ||||
| @@ -113,7 +113,7 @@ func (r *REST) Delete(ctx genericapirequest.Context, name string, options *metav | ||||
| 	if namespace.DeletionTimestamp.IsZero() { | ||||
| 		key, err := r.Store.KeyFunc(ctx, name) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 			return nil, false, err | ||||
| 		} | ||||
|  | ||||
| 		preconditions := storage.Preconditions{UID: options.Preconditions.UID} | ||||
| @@ -159,16 +159,16 @@ func (r *REST) Delete(ctx genericapirequest.Context, name string, options *metav | ||||
| 			if _, ok := err.(*apierrors.StatusError); !ok { | ||||
| 				err = apierrors.NewInternalError(err) | ||||
| 			} | ||||
| 			return nil, err | ||||
| 			return nil, false, err | ||||
| 		} | ||||
|  | ||||
| 		return out, nil | ||||
| 		return out, false, nil | ||||
| 	} | ||||
|  | ||||
| 	// prior to final deletion, we must ensure that finalizers is empty | ||||
| 	if len(namespace.Spec.Finalizers) != 0 { | ||||
| 		err = apierrors.NewConflict(api.Resource("namespaces"), namespace.Name, fmt.Errorf("The system is ensuring all content is removed from this namespace.  Upon completion, this namespace will automatically be purged by the system.")) | ||||
| 		return nil, err | ||||
| 		return nil, false, err | ||||
| 	} | ||||
| 	return r.Store.Delete(ctx, name, options) | ||||
| } | ||||
|   | ||||
| @@ -78,6 +78,6 @@ func (s *storage) GetNode(ctx genericapirequest.Context, name string, options *m | ||||
| } | ||||
|  | ||||
| func (s *storage) DeleteNode(ctx genericapirequest.Context, name string) error { | ||||
| 	_, err := s.Delete(ctx, name, nil) | ||||
| 	_, _, err := s.Delete(ctx, name, nil) | ||||
| 	return err | ||||
| } | ||||
|   | ||||
| @@ -136,7 +136,7 @@ func (r *EvictionREST) Create(ctx genericapirequest.Context, obj runtime.Object) | ||||
| 	// At this point there was either no PDB or we succeded in decrementing | ||||
|  | ||||
| 	// Try the delete | ||||
| 	_, err = r.store.Delete(ctx, eviction.Name, eviction.DeleteOptions) | ||||
| 	_, _, err = r.store.Delete(ctx, eviction.Name, eviction.DeleteOptions) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|   | ||||
| @@ -90,6 +90,6 @@ func (s *storage) UpdateController(ctx genericapirequest.Context, controller *ap | ||||
| } | ||||
|  | ||||
| func (s *storage) DeleteController(ctx genericapirequest.Context, controllerID string) error { | ||||
| 	_, err := s.Delete(ctx, controllerID, nil) | ||||
| 	_, _, err := s.Delete(ctx, controllerID, nil) | ||||
| 	return err | ||||
| } | ||||
|   | ||||
| @@ -77,6 +77,6 @@ func (s *storage) UpdateSecret(ctx genericapirequest.Context, secret *api.Secret | ||||
| } | ||||
|  | ||||
| func (s *storage) DeleteSecret(ctx genericapirequest.Context, name string) error { | ||||
| 	_, err := s.Delete(ctx, name, nil) | ||||
| 	_, _, err := s.Delete(ctx, name, nil) | ||||
| 	return err | ||||
| } | ||||
|   | ||||
| @@ -74,7 +74,7 @@ func (s *storage) GetService(ctx genericapirequest.Context, name string, options | ||||
| } | ||||
|  | ||||
| func (s *storage) DeleteService(ctx genericapirequest.Context, name string) error { | ||||
| 	_, err := s.Delete(ctx, name, nil) | ||||
| 	_, _, err := s.Delete(ctx, name, nil) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -77,6 +77,6 @@ func (s *storage) UpdateServiceAccount(ctx genericapirequest.Context, serviceAcc | ||||
| } | ||||
|  | ||||
| func (s *storage) DeleteServiceAccount(ctx genericapirequest.Context, name string) error { | ||||
| 	_, err := s.Delete(ctx, name, nil) | ||||
| 	_, _, err := s.Delete(ctx, name, nil) | ||||
| 	return err | ||||
| } | ||||
|   | ||||
| @@ -82,6 +82,6 @@ func (s *storage) UpdateDeployment(ctx genericapirequest.Context, deployment *ex | ||||
| } | ||||
|  | ||||
| func (s *storage) DeleteDeployment(ctx genericapirequest.Context, deploymentID string) error { | ||||
| 	_, err := s.Delete(ctx, deploymentID, nil) | ||||
| 	_, _, err := s.Delete(ctx, deploymentID, nil) | ||||
| 	return err | ||||
| } | ||||
|   | ||||
| @@ -91,6 +91,6 @@ func (s *storage) UpdateReplicaSet(ctx genericapirequest.Context, replicaSet *ex | ||||
| } | ||||
|  | ||||
| func (s *storage) DeleteReplicaSet(ctx genericapirequest.Context, replicaSetID string) error { | ||||
| 	_, err := s.Delete(ctx, replicaSetID, nil) | ||||
| 	_, _, err := s.Delete(ctx, replicaSetID, nil) | ||||
| 	return err | ||||
| } | ||||
|   | ||||
| @@ -78,6 +78,6 @@ func (s *storage) UpdateThirdPartyResourceData(ctx genericapirequest.Context, Th | ||||
| } | ||||
|  | ||||
| func (s *storage) DeleteThirdPartyResourceData(ctx genericapirequest.Context, name string) error { | ||||
| 	_, err := s.Delete(ctx, name, nil) | ||||
| 	_, _, err := s.Delete(ctx, name, nil) | ||||
| 	return err | ||||
| } | ||||
|   | ||||
| @@ -79,7 +79,7 @@ func (s *storage) GetClusterRole(ctx genericapirequest.Context, name string, opt | ||||
| } | ||||
|  | ||||
| func (s *storage) DeleteClusterRole(ctx genericapirequest.Context, name string) error { | ||||
| 	_, err := s.Delete(ctx, name, nil) | ||||
| 	_, _, err := s.Delete(ctx, name, nil) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -79,7 +79,7 @@ func (s *storage) GetClusterRoleBinding(ctx genericapirequest.Context, name stri | ||||
| } | ||||
|  | ||||
| func (s *storage) DeleteClusterRoleBinding(ctx genericapirequest.Context, name string) error { | ||||
| 	_, err := s.Delete(ctx, name, nil) | ||||
| 	_, _, err := s.Delete(ctx, name, nil) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -79,7 +79,7 @@ func (s *storage) GetRole(ctx genericapirequest.Context, name string, options *m | ||||
| } | ||||
|  | ||||
| func (s *storage) DeleteRole(ctx genericapirequest.Context, name string) error { | ||||
| 	_, err := s.Delete(ctx, name, nil) | ||||
| 	_, _, err := s.Delete(ctx, name, nil) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -80,7 +80,7 @@ func (s *storage) GetRoleBinding(ctx genericapirequest.Context, name string, opt | ||||
| } | ||||
|  | ||||
| func (s *storage) DeleteRoleBinding(ctx genericapirequest.Context, name string) error { | ||||
| 	_, err := s.Delete(ctx, name, nil) | ||||
| 	_, _, err := s.Delete(ctx, name, nil) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -858,7 +858,8 @@ func DeleteResource(r rest.GracefulDeleter, allowsOptions bool, scope RequestSco | ||||
|  | ||||
| 		trace.Step("About do delete object from database") | ||||
| 		result, err := finishRequest(timeout, func() (runtime.Object, error) { | ||||
| 			return r.Delete(ctx, name, options) | ||||
| 			obj, _, err := r.Delete(ctx, name, options) | ||||
| 			return obj, err | ||||
| 		}) | ||||
| 		if err != nil { | ||||
| 			scope.err(err, res.ResponseWriter, req.Request) | ||||
|   | ||||
| @@ -758,15 +758,15 @@ func (e *Store) updateForGracefulDeletionAndFinalizers(ctx genericapirequest.Con | ||||
| } | ||||
|  | ||||
| // Delete removes the item from storage. | ||||
| func (e *Store) Delete(ctx genericapirequest.Context, name string, options *metav1.DeleteOptions) (runtime.Object, error) { | ||||
| func (e *Store) Delete(ctx genericapirequest.Context, name string, options *metav1.DeleteOptions) (runtime.Object, bool, error) { | ||||
| 	key, err := e.KeyFunc(ctx, name) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 		return nil, false, err | ||||
| 	} | ||||
|  | ||||
| 	obj := e.NewFunc() | ||||
| 	if err := e.Storage.Get(ctx, key, "", obj, false); err != nil { | ||||
| 		return nil, storeerr.InterpretDeleteError(err, e.QualifiedResource, name) | ||||
| 		return nil, false, storeerr.InterpretDeleteError(err, e.QualifiedResource, name) | ||||
| 	} | ||||
| 	// support older consumers of delete by treating "nil" as delete immediately | ||||
| 	if options == nil { | ||||
| @@ -778,16 +778,17 @@ func (e *Store) Delete(ctx genericapirequest.Context, name string, options *meta | ||||
| 	} | ||||
| 	graceful, pendingGraceful, err := rest.BeforeDelete(e.DeleteStrategy, ctx, obj, options) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 		return nil, false, err | ||||
| 	} | ||||
| 	// this means finalizers cannot be updated via DeleteOptions if a deletion is already pending | ||||
| 	if pendingGraceful { | ||||
| 		return e.finalizeDelete(obj, false) | ||||
| 		out, err := e.finalizeDelete(obj, false) | ||||
| 		return out, false, err | ||||
| 	} | ||||
| 	// check if obj has pending finalizers | ||||
| 	accessor, err := meta.Accessor(obj) | ||||
| 	if err != nil { | ||||
| 		return nil, kubeerr.NewInternalError(err) | ||||
| 		return nil, false, kubeerr.NewInternalError(err) | ||||
| 	} | ||||
| 	pendingFinalizers := len(accessor.GetFinalizers()) != 0 | ||||
| 	var ignoreNotFound bool | ||||
| @@ -810,7 +811,7 @@ func (e *Store) Delete(ctx genericapirequest.Context, name string, options *meta | ||||
| 	} | ||||
| 	// !deleteImmediately covers all cases where err != nil. We keep both to be future-proof. | ||||
| 	if !deleteImmediately || err != nil { | ||||
| 		return out, err | ||||
| 		return out, false, err | ||||
| 	} | ||||
|  | ||||
| 	// delete immediately, or no graceful deletion supported | ||||
| @@ -822,11 +823,13 @@ func (e *Store) Delete(ctx genericapirequest.Context, name string, options *meta | ||||
| 		if storage.IsNotFound(err) && ignoreNotFound && lastExisting != nil { | ||||
| 			// The lastExisting object may not be the last state of the object | ||||
| 			// before its deletion, but it's the best approximation. | ||||
| 			return e.finalizeDelete(lastExisting, true) | ||||
| 			out, err := e.finalizeDelete(lastExisting, true) | ||||
| 			return out, true, err | ||||
| 		} | ||||
| 		return nil, storeerr.InterpretDeleteError(err, e.QualifiedResource, name) | ||||
| 		return nil, false, storeerr.InterpretDeleteError(err, e.QualifiedResource, name) | ||||
| 	} | ||||
| 	return e.finalizeDelete(out, true) | ||||
| 	out, err = e.finalizeDelete(out, true) | ||||
| 	return out, true, err | ||||
| } | ||||
|  | ||||
| // DeleteCollection removes all items returned by List with a given ListOptions from storage. | ||||
| @@ -890,7 +893,7 @@ func (e *Store) DeleteCollection(ctx genericapirequest.Context, options *metav1. | ||||
| 					errs <- err | ||||
| 					return | ||||
| 				} | ||||
| 				if _, err := e.Delete(ctx, accessor.GetName(), options); err != nil && !kubeerr.IsNotFound(err) { | ||||
| 				if _, _, err := e.Delete(ctx, accessor.GetName(), options); err != nil && !kubeerr.IsNotFound(err) { | ||||
| 					glog.V(4).Infof("Delete %s in DeleteCollection failed: %v", accessor.GetName(), err) | ||||
| 					errs <- err | ||||
| 					return | ||||
|   | ||||
| @@ -136,7 +136,9 @@ type GracefulDeleter interface { | ||||
| 	// returned error value err when the specified resource is not found. | ||||
| 	// Delete *may* return the object that was deleted, or a status object indicating additional | ||||
| 	// information about deletion. | ||||
| 	Delete(ctx genericapirequest.Context, name string, options *metav1.DeleteOptions) (runtime.Object, error) | ||||
| 	// It also returns a boolean which is set to true if the resource was instantly | ||||
| 	// deleted or false if it will be deleted asynchronously. | ||||
| 	Delete(ctx genericapirequest.Context, name string, options *metav1.DeleteOptions) (runtime.Object, bool, error) | ||||
| } | ||||
|  | ||||
| // GracefulDeleteAdapter adapts the Deleter interface to GracefulDeleter | ||||
| @@ -145,8 +147,9 @@ type GracefulDeleteAdapter struct { | ||||
| } | ||||
|  | ||||
| // Delete implements RESTGracefulDeleter in terms of Deleter | ||||
| func (w GracefulDeleteAdapter) Delete(ctx genericapirequest.Context, name string, options *metav1.DeleteOptions) (runtime.Object, error) { | ||||
| 	return w.Deleter.Delete(ctx, name) | ||||
| func (w GracefulDeleteAdapter) Delete(ctx genericapirequest.Context, name string, options *metav1.DeleteOptions) (runtime.Object, bool, error) { | ||||
| 	obj, err := w.Deleter.Delete(ctx, name) | ||||
| 	return obj, true, err | ||||
| } | ||||
|  | ||||
| // CollectionDeleter is an object that can delete a collection | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 nikhiljindal
					nikhiljindal