MCPcopy
hub / github.com/kubernetes/client-go / renew

Method renew

tools/leaderelection/leaderelection.go:252–289  ·  view source on GitHub ↗

renew loops calling tryAcquireOrRenew and returns immediately when tryAcquireOrRenew fails or ctx signals done.

(ctx context.Context)

Source from the content-addressed store, hash-verified

250
251// renew loops calling tryAcquireOrRenew and returns immediately when tryAcquireOrRenew fails or ctx signals done.
252func (le *LeaderElector) renew(ctx context.Context) {
253 ctx, cancel := context.WithCancel(ctx)
254 defer cancel()
255 wait.Until(func() {
256 timeoutCtx, timeoutCancel := context.WithTimeout(ctx, le.config.RenewDeadline)
257 defer timeoutCancel()
258 err := wait.PollImmediateUntil(le.config.RetryPeriod, func() (bool, error) {
259 done := make(chan bool, 1)
260 go func() {
261 defer close(done)
262 done <- le.tryAcquireOrRenew()
263 }()
264
265 select {
266 case <-timeoutCtx.Done():
267 return false, fmt.Errorf("failed to tryAcquireOrRenew %s", timeoutCtx.Err())
268 case result := <-done:
269 return result, nil
270 }
271 }, timeoutCtx.Done())
272
273 le.maybeReportTransition()
274 desc := le.config.Lock.Describe()
275 if err == nil {
276 klog.V(5).Infof("successfully renewed lease %v", desc)
277 return
278 }
279 le.config.Lock.RecordEvent("stopped leading")
280 le.metrics.leaderOff(le.config.Name)
281 klog.Infof("failed to renew lease %v: %v", desc, err)
282 cancel()
283 }, le.config.RetryPeriod, ctx.Done())
284
285 // if we hold the lease, give it up
286 if le.config.ReleaseOnCancel {
287 le.release()
288 }
289}
290
291// release attempts to release the leader lease if we have acquired it.
292func (le *LeaderElector) release() bool {

Callers 1

RunMethod · 0.95

Calls 8

tryAcquireOrRenewMethod · 0.95
maybeReportTransitionMethod · 0.95
releaseMethod · 0.95
DoneMethod · 0.65
ErrorfMethod · 0.65
DescribeMethod · 0.65
RecordEventMethod · 0.65
leaderOffMethod · 0.65

Tested by

no test coverage detected