@@ -209,7 +209,7 @@ type LeaderElector struct {
209
209
// before leader election loop is stopped by ctx or it has
210
210
// stopped holding the leader lease
211
211
func (le * LeaderElector ) Run (ctx context.Context ) {
212
- defer runtime .HandleCrash ( )
212
+ defer runtime .HandleCrashWithContext ( ctx )
213
213
defer le .config .Callbacks .OnStoppedLeading ()
214
214
215
215
if ! le .acquire (ctx ) {
@@ -254,7 +254,8 @@ func (le *LeaderElector) acquire(ctx context.Context) bool {
254
254
defer cancel ()
255
255
succeeded := false
256
256
desc := le .config .Lock .Describe ()
257
- klog .Infof ("attempting to acquire leader lease %v..." , desc )
257
+ logger := klog .FromContext (ctx )
258
+ logger .Info ("Attempting to acquire leader lease..." , "lock" , desc )
258
259
wait .JitterUntil (func () {
259
260
if ! le .config .Coordinated {
260
261
succeeded = le .tryAcquireOrRenew (ctx )
@@ -263,12 +264,12 @@ func (le *LeaderElector) acquire(ctx context.Context) bool {
263
264
}
264
265
le .maybeReportTransition ()
265
266
if ! succeeded {
266
- klog .V (4 ).Infof ( "failed to acquire lease %v " , desc )
267
+ logger .V (4 ).Info ( "Failed to acquire lease" , "lock " , desc )
267
268
return
268
269
}
269
270
le .config .Lock .RecordEvent ("became leader" )
270
271
le .metrics .leaderOn (le .config .Name )
271
- klog . Infof ( "successfully acquired lease %v " , desc )
272
+ logger . Info ( "Successfully acquired lease" , "lock " , desc )
272
273
cancel ()
273
274
}, le .config .RetryPeriod , JitterFactor , true , ctx .Done ())
274
275
return succeeded
@@ -279,6 +280,7 @@ func (le *LeaderElector) renew(ctx context.Context) {
279
280
defer le .config .Lock .RecordEvent ("stopped leading" )
280
281
ctx , cancel := context .WithCancel (ctx )
281
282
defer cancel ()
283
+ logger := klog .FromContext (ctx )
282
284
wait .Until (func () {
283
285
err := wait .PollUntilContextTimeout (ctx , le .config .RetryPeriod , le .config .RenewDeadline , true , func (ctx context.Context ) (done bool , err error ) {
284
286
if ! le .config .Coordinated {
@@ -290,33 +292,33 @@ func (le *LeaderElector) renew(ctx context.Context) {
290
292
le .maybeReportTransition ()
291
293
desc := le .config .Lock .Describe ()
292
294
if err == nil {
293
- klog .V (5 ).Infof ( "successfully renewed lease %v " , desc )
295
+ logger .V (5 ).Info ( "Successfully renewed lease" , "lock " , desc )
294
296
return
295
297
}
296
298
le .metrics .leaderOff (le .config .Name )
297
- klog . Infof ( "failed to renew lease %v: %v" , desc , err )
299
+ logger . Info ( "Failed to renew lease" , "lock" , desc , "err" , err )
298
300
cancel ()
299
301
}, le .config .RetryPeriod , ctx .Done ())
300
302
301
303
// if we hold the lease, give it up
302
304
if le .config .ReleaseOnCancel {
303
- le .release ()
305
+ le .release (logger )
304
306
}
305
307
}
306
308
307
309
// release attempts to release the leader lease if we have acquired it.
308
- func (le * LeaderElector ) release () bool {
310
+ func (le * LeaderElector ) release (logger klog. Logger ) bool {
309
311
ctx := context .Background ()
310
312
timeoutCtx , timeoutCancel := context .WithTimeout (ctx , le .config .RenewDeadline )
311
313
defer timeoutCancel ()
312
314
// update the resourceVersion of lease
313
315
oldLeaderElectionRecord , _ , err := le .config .Lock .Get (timeoutCtx )
314
316
if err != nil {
315
317
if ! errors .IsNotFound (err ) {
316
- klog . Errorf ( "error retrieving resource lock %v: %v" , le .config .Lock .Describe (), err )
318
+ logger . Error ( err , "error retrieving resource lock" , "lock" , le .config .Lock .Describe ())
317
319
return false
318
320
}
319
- klog . Infof ("lease lock not found: %v " , le .config .Lock .Describe ())
321
+ logger . Info ("lease lock not found" , "lock " , le .config .Lock .Describe ())
320
322
return false
321
323
}
322
324
@@ -331,7 +333,7 @@ func (le *LeaderElector) release() bool {
331
333
AcquireTime : now ,
332
334
}
333
335
if err := le .config .Lock .Update (timeoutCtx , leaderElectionRecord ); err != nil {
334
- klog . Errorf ( "Failed to release lock: %v" , err )
336
+ logger . Error ( err , "Failed to release lease" , "lock" , le . config . Lock . Describe () )
335
337
return false
336
338
}
337
339
@@ -343,6 +345,7 @@ func (le *LeaderElector) release() bool {
343
345
// lease if it has already been acquired. Returns true on success else returns
344
346
// false.
345
347
func (le * LeaderElector ) tryCoordinatedRenew (ctx context.Context ) bool {
348
+ logger := klog .FromContext (ctx )
346
349
now := metav1 .NewTime (le .clock .Now ())
347
350
leaderElectionRecord := rl.LeaderElectionRecord {
348
351
HolderIdentity : le .config .Lock .Identity (),
@@ -355,10 +358,10 @@ func (le *LeaderElector) tryCoordinatedRenew(ctx context.Context) bool {
355
358
oldLeaderElectionRecord , oldLeaderElectionRawRecord , err := le .config .Lock .Get (ctx )
356
359
if err != nil {
357
360
if ! errors .IsNotFound (err ) {
358
- klog . Errorf ( "error retrieving resource lock %v: %v" , le .config .Lock .Describe (), err )
361
+ logger . Error ( err , "Error retrieving lease lock" , "lock" , le .config .Lock .Describe ())
359
362
return false
360
363
}
361
- klog . Infof ( "lease lock not found: %v" , le .config .Lock .Describe ())
364
+ logger . Info ( "Lease lock not found" , "lock" , le .config .Lock .Describe (), "err" , err )
362
365
return false
363
366
}
364
367
@@ -371,18 +374,18 @@ func (le *LeaderElector) tryCoordinatedRenew(ctx context.Context) bool {
371
374
372
375
hasExpired := le .observedTime .Add (time .Second * time .Duration (oldLeaderElectionRecord .LeaseDurationSeconds )).Before (now .Time )
373
376
if hasExpired {
374
- klog . Infof ( "lock has expired: %v " , le .config .Lock .Describe ())
377
+ logger . Info ( "Lease has expired" , "lock " , le .config .Lock .Describe ())
375
378
return false
376
379
}
377
380
378
381
if ! le .IsLeader () {
379
- klog .V (6 ).Infof ( "lock is held by %v and has not yet expired: %v " , oldLeaderElectionRecord . HolderIdentity , le .config .Lock .Describe ())
382
+ logger .V (6 ).Info ( "Lease is held and has not yet expired" , "lock" , le .config .Lock .Describe (), "holder" , oldLeaderElectionRecord . HolderIdentity )
380
383
return false
381
384
}
382
385
383
386
// 2b. If the lease has been marked as "end of term", don't renew it
384
387
if le .IsLeader () && oldLeaderElectionRecord .PreferredHolder != "" {
385
- klog .V (4 ).Infof ( "lock is marked as 'end of term': %v " , le .config .Lock .Describe ())
388
+ logger .V (4 ).Info ( "Lease is marked as 'end of term'" , "lock " , le .config .Lock .Describe ())
386
389
// TODO: Instead of letting lease expire, the holder may deleted it directly
387
390
// This will not be compatible with all controllers, so it needs to be opt-in behavior.
388
391
// We must ensure all code guarded by this lease has successfully completed
@@ -406,7 +409,7 @@ func (le *LeaderElector) tryCoordinatedRenew(ctx context.Context) bool {
406
409
407
410
// update the lock itself
408
411
if err = le .config .Lock .Update (ctx , leaderElectionRecord ); err != nil {
409
- klog . Errorf ( "Failed to update lock: %v" , err )
412
+ logger . Error ( err , "Failed to update lock" , "lock" , le . config . Lock . Describe () )
410
413
return false
411
414
}
412
415
@@ -418,6 +421,7 @@ func (le *LeaderElector) tryCoordinatedRenew(ctx context.Context) bool {
418
421
// else it tries to renew the lease if it has already been acquired. Returns true
419
422
// on success else returns false.
420
423
func (le * LeaderElector ) tryAcquireOrRenew (ctx context.Context ) bool {
424
+ logger := klog .FromContext (ctx )
421
425
now := metav1 .NewTime (le .clock .Now ())
422
426
leaderElectionRecord := rl.LeaderElectionRecord {
423
427
HolderIdentity : le .config .Lock .Identity (),
@@ -438,18 +442,18 @@ func (le *LeaderElector) tryAcquireOrRenew(ctx context.Context) bool {
438
442
le .setObservedRecord (& leaderElectionRecord )
439
443
return true
440
444
}
441
- klog . Errorf ( "Failed to update lock optimistically: %v , falling back to slow path" , err )
445
+ logger . Error ( err , "Failed to update lease optimistically, falling back to slow path" , "lock" , le . config . Lock . Describe () )
442
446
}
443
447
444
448
// 2. obtain or create the ElectionRecord
445
449
oldLeaderElectionRecord , oldLeaderElectionRawRecord , err := le .config .Lock .Get (ctx )
446
450
if err != nil {
447
451
if ! errors .IsNotFound (err ) {
448
- klog . Errorf ( "error retrieving resource lock %v: %v" , le .config .Lock .Describe (), err )
452
+ logger . Error ( err , "Error retrieving lease lock" , "lock" , le .config .Lock .Describe ())
449
453
return false
450
454
}
451
455
if err = le .config .Lock .Create (ctx , leaderElectionRecord ); err != nil {
452
- klog . Errorf ( "error initially creating leader election record: %v" , err )
456
+ logger . Error ( err , "Error initially creating lease lock" , "lock" , le . config . Lock . Describe () )
453
457
return false
454
458
}
455
459
@@ -465,7 +469,7 @@ func (le *LeaderElector) tryAcquireOrRenew(ctx context.Context) bool {
465
469
le .observedRawRecord = oldLeaderElectionRawRecord
466
470
}
467
471
if len (oldLeaderElectionRecord .HolderIdentity ) > 0 && le .isLeaseValid (now .Time ) && ! le .IsLeader () {
468
- klog .V (4 ).Infof ( "lock is held by %v and has not yet expired" , oldLeaderElectionRecord .HolderIdentity )
472
+ logger .V (4 ).Info ( "Lease is held by and has not yet expired" , "lock" , le . config . Lock . Describe (), "holder " , oldLeaderElectionRecord .HolderIdentity )
469
473
return false
470
474
}
471
475
@@ -481,7 +485,7 @@ func (le *LeaderElector) tryAcquireOrRenew(ctx context.Context) bool {
481
485
482
486
// update the lock itself
483
487
if err = le .config .Lock .Update (ctx , leaderElectionRecord ); err != nil {
484
- klog . Errorf ( "Failed to update lock: %v" , err )
488
+ logger . Error ( err , "Failed to update lease" , "lock" , le . config . Lock . Describe () )
485
489
return false
486
490
}
487
491
0 commit comments