Automatic merge from submit-queue (batch tested with PRs 46552, 46608, 46390, 46605, 46459) Require DeleteStrategy for all registry.Store **What this PR does / why we need it**: All `registry.Store` objects already set a non-nil `DeleteStrategy`. This change ensures that all future objects do so as well. Signed-off-by: Monis Khan <mkhan@redhat.com> xref: #24153 openshift/origin/issues/14198 cc @deads2k @liggitt @caesarxuchao @lavalamp @smarterclayton @derekmahar In regards to this, why is the `RESTDeleteStrategy` a useless interface (as far as deletion goes)? We cast it to `GarbageCollectionDeleteStrategy` or `RESTGracefulDeleteStrategy` in an attempt to do operations related to deletion, but we have "default" behavior for both of those cases. It should be possible to make `DeleteStrategy` optional by using the other strategies as the `runtime.ObjectTyper` and then defaulting a `nil` `DeleteStrategy` with the expected behavior. ```go // RESTDeleteStrategy defines deletion behavior on an object that follows Kubernetes // API conventions. type RESTDeleteStrategy interface { runtime.ObjectTyper } type GarbageCollectionPolicy string const ( DeleteDependents GarbageCollectionPolicy = "DeleteDependents" OrphanDependents GarbageCollectionPolicy = "OrphanDependents" ) // GarbageCollectionDeleteStrategy must be implemented by the registry that wants to // orphan dependents by default. type GarbageCollectionDeleteStrategy interface { // DefaultGarbageCollectionPolicy returns the default garbage collection behavior. DefaultGarbageCollectionPolicy() GarbageCollectionPolicy } // RESTGracefulDeleteStrategy must be implemented by the registry that supports // graceful deletion. type RESTGracefulDeleteStrategy interface { // CheckGracefulDelete should return true if the object can be gracefully deleted and set // any default values on the DeleteOptions. CheckGracefulDelete(ctx genericapirequest.Context, obj runtime.Object, options *metav1.DeleteOptions) bool } ``` **Release note**: ``` NONE ```
This directory is the staging area for packages that have been split to their own repository. The content here will be periodically published to respective top-level k8s.io repositories.
Most code in the staging/ directory is authoritative, i.e. the only copy of
the code. You can directly modify such code. However the packages in
staging/src/k8s.io/client-go/pkg are copied from pkg/. If you modify the
original code in pkg/, you need to run hack/godep-restore.sh from the k8s
root directory, followed by hack/update-staging-client-go.sh. We are working
towards making all code in staging/ authoritative.
The vendor/k8s.io directory contains symlinks pointing to this staging area,
so to use a package in the staging area, you can import it as
k8s.io/<package-name>, as if the package were vendored. Packages will be
vendored from k8s.io/<package-name> for real after the test matrix is
converted to vendor k8s components.