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 google.golang.org/grpc v1.38.0
gopkg.in/natefinch/lumberjack.v2 v2.0.0 gopkg.in/natefinch/lumberjack.v2 v2.0.0
gopkg.in/square/go-jose.v2 v2.2.2 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/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/component-base v0.0.0-20210702054709-fddd92849e34
k8s.io/klog/v2 v2.9.0 k8s.io/klog/v2 v2.9.0
k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e
@ -55,8 +55,8 @@ require (
) )
replace ( 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/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 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.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-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= 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-20210707174547-c7120651ba6c h1:fSuqMc1G40Cl6BY7TuYWLdo+wcWUfaWijwWPMGm3hrE=
k8s.io/api v0.0.0-20210707054401-2c49f10e0b15/go.mod h1:zoURDvOPW5UMFZr2YUU/sStjYnWSPt+x+MM4R94ATgQ= 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 h1:fob/j8+uMBIVvyo+9bG7GvjFSj0LX3RNuSXW+RcUrwo=
k8s.io/apimachinery v0.0.0-20210701054147-830375057167/go.mod h1:O3oNtNadZdeOMxHFVxOreoznohCpy0z6mocxbZr7oJ0= 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-20210707174930-b2678640329d h1:JZpwpZ5mK716hQiKLwGnoABxEbWhFSaM36csnj4mw3M=
k8s.io/client-go v0.0.0-20210706214629-68cb2ddef93f/go.mod h1:sbkKCOXetW3FaqcSYCG3ghdfOCSOKTGwitXlliklRrc= 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 h1:L7kJX0+rX5SJ2ZUaFy8zarcUMW0+2AHkd3gyuIp0ZLM=
k8s.io/component-base v0.0.0-20210702054709-fddd92849e34/go.mod h1:KuldLgSPMxWtcVmPn3hcUoWNJqm7HEdVcSID+ZdAB24= 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= 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 { type RESTGracefulDeleteStrategy interface {
// CheckGracefulDelete should return true if the object can be gracefully deleted and set // CheckGracefulDelete should return true if the object can be gracefully deleted and set
// any default values on the DeleteOptions. // 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 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 return false, true, nil
} }
// `CheckGracefulDelete` will be implemented by specific strategy
if !gracefulStrategy.CheckGracefulDelete(ctx, obj, options) { if !gracefulStrategy.CheckGracefulDelete(ctx, obj, options) {
return false, false, nil 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))) now := metav1.NewTime(metav1.Now().Add(time.Second * time.Duration(*options.GracePeriodSeconds)))
objectMeta.SetDeletionTimestamp(&now) objectMeta.SetDeletionTimestamp(&now)
objectMeta.SetDeletionGracePeriodSeconds(options.GracePeriodSeconds) objectMeta.SetDeletionGracePeriodSeconds(options.GracePeriodSeconds)
@ -149,6 +157,7 @@ func BeforeDelete(strategy RESTDeleteStrategy, ctx context.Context, obj runtime.
if objectMeta.GetGeneration() > 0 { if objectMeta.GetGeneration() > 0 {
objectMeta.SetGeneration(objectMeta.GetGeneration() + 1) objectMeta.SetGeneration(objectMeta.GetGeneration() + 1)
} }
return true, false, nil return true, false, nil
} }