diff --git a/staging/src/k8s.io/component-helpers/apimachinery/lease/controller.go b/staging/src/k8s.io/component-helpers/apimachinery/lease/controller.go index 282eeea2426..85be9faa343 100644 --- a/staging/src/k8s.io/component-helpers/apimachinery/lease/controller.go +++ b/staging/src/k8s.io/component-helpers/apimachinery/lease/controller.go @@ -28,7 +28,7 @@ import ( clientset "k8s.io/client-go/kubernetes" coordclientset "k8s.io/client-go/kubernetes/typed/coordination/v1" "k8s.io/utils/clock" - "k8s.io/utils/pointer" + "k8s.io/utils/ptr" "k8s.io/klog/v2" ) @@ -221,13 +221,14 @@ func (c *controller) newLease(base *coordinationv1.Lease) (*coordinationv1.Lease Namespace: c.leaseNamespace, }, Spec: coordinationv1.LeaseSpec{ - HolderIdentity: pointer.StringPtr(c.holderIdentity), - LeaseDurationSeconds: pointer.Int32Ptr(c.leaseDurationSeconds), + HolderIdentity: ptr.To(c.holderIdentity), }, } } else { lease = base.DeepCopy() } + // update the duration, the controller's config may have changed since lease creation + lease.Spec.LeaseDurationSeconds = ptr.To(c.leaseDurationSeconds) lease.Spec.RenewTime = &metav1.MicroTime{Time: c.clock.Now()} if c.newLeasePostProcessFunc != nil { diff --git a/staging/src/k8s.io/component-helpers/apimachinery/lease/controller_test.go b/staging/src/k8s.io/component-helpers/apimachinery/lease/controller_test.go index fc68cf14658..a82ee29fed7 100644 --- a/staging/src/k8s.io/component-helpers/apimachinery/lease/controller_test.go +++ b/staging/src/k8s.io/component-helpers/apimachinery/lease/controller_test.go @@ -37,6 +37,7 @@ import ( clienttesting "k8s.io/client-go/testing" testingclock "k8s.io/utils/clock/testing" "k8s.io/utils/pointer" + "k8s.io/utils/ptr" "k8s.io/klog/v2" "k8s.io/klog/v2/ktesting" @@ -194,6 +195,53 @@ func TestNewNodeLease(t *testing.T) { }, }, }, + { + desc: "non-nil base with owner ref, lease duration is updated", + controller: &controller{ + client: fake.NewSimpleClientset(node), + holderIdentity: node.Name, + leaseDurationSeconds: 456, + clock: fakeClock, + }, + base: &coordinationv1.Lease{ + ObjectMeta: metav1.ObjectMeta{ + Name: node.Name, + Namespace: corev1.NamespaceNodeLease, + OwnerReferences: []metav1.OwnerReference{ + { + APIVersion: corev1.SchemeGroupVersion.WithKind("Node").Version, + Kind: corev1.SchemeGroupVersion.WithKind("Node").Kind, + Name: node.Name, + UID: node.UID, + }, + }, + }, + Spec: coordinationv1.LeaseSpec{ + HolderIdentity: ptr.To(node.Name), + LeaseDurationSeconds: ptr.To[int32](123), + RenewTime: &metav1.MicroTime{Time: fakeClock.Now().Add(-10 * time.Second)}, + }, + }, + expect: &coordinationv1.Lease{ + ObjectMeta: metav1.ObjectMeta{ + Name: node.Name, + Namespace: corev1.NamespaceNodeLease, + OwnerReferences: []metav1.OwnerReference{ + { + APIVersion: corev1.SchemeGroupVersion.WithKind("Node").Version, + Kind: corev1.SchemeGroupVersion.WithKind("Node").Kind, + Name: node.Name, + UID: node.UID, + }, + }, + }, + Spec: coordinationv1.LeaseSpec{ + HolderIdentity: ptr.To(node.Name), + LeaseDurationSeconds: ptr.To[int32](456), + RenewTime: &metav1.MicroTime{Time: fakeClock.Now()}, + }, + }, + }, } for _, tc := range cases {