Files
kubernetes/staging
Kubernetes Submit Queue 82f24cee5e Merge pull request #46390 from enj/enj/i/require_delete_strategy
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
```
2017-05-30 08:41:57 -07:00
..
2017-04-19 15:58:09 -04:00

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.