in apimachinery/lease/controller.go [101:125]
func (c *controller) sync() {
if c.latestLease != nil {
// As long as the lease is not (or very rarely) updated by any other agent than the component itself,
// we can optimistically assume it didn't change since our last update and try updating
// based on the version from that time. Thanks to it we avoid GET call and reduce load
// on etcd and kube-apiserver.
// If at some point other agents will also be frequently updating the Lease object, this
// can result in performance degradation, because we will end up with calling additional
// GET/PUT - at this point this whole "if" should be removed.
err := c.retryUpdateLease(c.latestLease)
if err == nil {
return
}
klog.Infof("failed to update lease using latest lease, fallback to ensure lease, err: %v", err)
}
lease, created := c.backoffEnsureLease()
c.latestLease = lease
// we don't need to update the lease if we just created it
if !created && lease != nil {
if err := c.retryUpdateLease(lease); err != nil {
klog.Errorf("%v, will retry after %v", err, c.renewInterval)
}
}
}