Merge pull request #103232 from astraw99/fix_delete_nil_pointer

Fix delete nil pointer panic

Kubernetes-commit: 20be00980c5f58c5dc906392bc9dbe3e7b55c11d
This commit is contained in:
Kubernetes Publisher 2021-07-07 10:43:41 -07:00
commit 7fe2741c29
3 changed files with 17 additions and 8 deletions

8
go.mod
View File

@ -42,9 +42,9 @@ require (
google.golang.org/grpc v1.38.0
gopkg.in/natefinch/lumberjack.v2 v2.0.0
gopkg.in/square/go-jose.v2 v2.2.2
k8s.io/api v0.0.0-20210707054401-2c49f10e0b15
k8s.io/api v0.0.0-20210707174547-c7120651ba6c
k8s.io/apimachinery v0.0.0-20210701054147-830375057167
k8s.io/client-go v0.0.0-20210706214629-68cb2ddef93f
k8s.io/client-go v0.0.0-20210707174930-b2678640329d
k8s.io/component-base v0.0.0-20210702054709-fddd92849e34
k8s.io/klog/v2 v2.9.0
k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e
@ -55,8 +55,8 @@ require (
)
replace (
k8s.io/api => k8s.io/api v0.0.0-20210707054401-2c49f10e0b15
k8s.io/api => k8s.io/api v0.0.0-20210707174547-c7120651ba6c
k8s.io/apimachinery => k8s.io/apimachinery v0.0.0-20210701054147-830375057167
k8s.io/client-go => k8s.io/client-go v0.0.0-20210706214629-68cb2ddef93f
k8s.io/client-go => k8s.io/client-go v0.0.0-20210707174930-b2678640329d
k8s.io/component-base => k8s.io/component-base v0.0.0-20210702054709-fddd92849e34
)

8
go.sum
View File

@ -779,12 +779,12 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
k8s.io/api v0.0.0-20210707054401-2c49f10e0b15 h1:KDL/0Eab3o5BswoTN53Hp0H1QFN8RGD/x2ItzJN9l4g=
k8s.io/api v0.0.0-20210707054401-2c49f10e0b15/go.mod h1:zoURDvOPW5UMFZr2YUU/sStjYnWSPt+x+MM4R94ATgQ=
k8s.io/api v0.0.0-20210707174547-c7120651ba6c h1:fSuqMc1G40Cl6BY7TuYWLdo+wcWUfaWijwWPMGm3hrE=
k8s.io/api v0.0.0-20210707174547-c7120651ba6c/go.mod h1:zoURDvOPW5UMFZr2YUU/sStjYnWSPt+x+MM4R94ATgQ=
k8s.io/apimachinery v0.0.0-20210701054147-830375057167 h1:fob/j8+uMBIVvyo+9bG7GvjFSj0LX3RNuSXW+RcUrwo=
k8s.io/apimachinery v0.0.0-20210701054147-830375057167/go.mod h1:O3oNtNadZdeOMxHFVxOreoznohCpy0z6mocxbZr7oJ0=
k8s.io/client-go v0.0.0-20210706214629-68cb2ddef93f h1:seULy+bqIY8G2Q98h/e3WaQdkgNIIQUqy8MSUP2TReY=
k8s.io/client-go v0.0.0-20210706214629-68cb2ddef93f/go.mod h1:sbkKCOXetW3FaqcSYCG3ghdfOCSOKTGwitXlliklRrc=
k8s.io/client-go v0.0.0-20210707174930-b2678640329d h1:JZpwpZ5mK716hQiKLwGnoABxEbWhFSaM36csnj4mw3M=
k8s.io/client-go v0.0.0-20210707174930-b2678640329d/go.mod h1:sHAZo8Y/PMppsKX6llqj9HPjDT8PM/PYRxWZCCt1zlc=
k8s.io/component-base v0.0.0-20210702054709-fddd92849e34 h1:L7kJX0+rX5SJ2ZUaFy8zarcUMW0+2AHkd3gyuIp0ZLM=
k8s.io/component-base v0.0.0-20210702054709-fddd92849e34/go.mod h1:KuldLgSPMxWtcVmPn3hcUoWNJqm7HEdVcSID+ZdAB24=
k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=

View File

@ -58,6 +58,8 @@ type GarbageCollectionDeleteStrategy interface {
type RESTGracefulDeleteStrategy interface {
// CheckGracefulDelete should return true if the object can be gracefully deleted and set
// any default values on the DeleteOptions.
// NOTE: if return true, `options.GracePeriodSeconds` must be non-nil (nil will fail),
// that's what tells the deletion how "graceful" to be.
CheckGracefulDelete(ctx context.Context, obj runtime.Object, options *metav1.DeleteOptions) bool
}
@ -136,9 +138,15 @@ func BeforeDelete(strategy RESTDeleteStrategy, ctx context.Context, obj runtime.
return false, true, nil
}
// `CheckGracefulDelete` will be implemented by specific strategy
if !gracefulStrategy.CheckGracefulDelete(ctx, obj, options) {
return false, false, nil
}
if options.GracePeriodSeconds == nil {
return false, false, errors.NewInternalError(fmt.Errorf("options.GracePeriodSeconds should not be nil"))
}
now := metav1.NewTime(metav1.Now().Add(time.Second * time.Duration(*options.GracePeriodSeconds)))
objectMeta.SetDeletionTimestamp(&now)
objectMeta.SetDeletionGracePeriodSeconds(options.GracePeriodSeconds)
@ -149,6 +157,7 @@ func BeforeDelete(strategy RESTDeleteStrategy, ctx context.Context, obj runtime.
if objectMeta.GetGeneration() > 0 {
objectMeta.SetGeneration(objectMeta.GetGeneration() + 1)
}
return true, false, nil
}