backport of commit abaf1d68743dd65af8919f56687061eb29c4bdbe (#22379)

This commit is contained in:
hc-github-team-secure-vault-core 2023-08-16 16:27:19 -04:00 committed by GitHub
parent 05d333acaa
commit b82a26bb49
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 1 deletions

3
changelog/22374.txt Normal file
View File

@ -0,0 +1,3 @@
```release-note:bug
expiration: Fix a deadlock that could occur when a revocation failure happens while restoring leases on startup.
```

View File

@ -240,8 +240,8 @@ func (r *revocationJob) OnFailure(err error) {
r.m.core.metricSink.IncrCounterWithLabels([]string{"expire", "lease_expiration", "error"}, 1, []metrics.Label{metricsutil.NamespaceLabel(r.ns)}) r.m.core.metricSink.IncrCounterWithLabels([]string{"expire", "lease_expiration", "error"}, 1, []metrics.Label{metricsutil.NamespaceLabel(r.ns)})
r.m.pendingLock.Lock() r.m.pendingLock.Lock()
defer r.m.pendingLock.Unlock()
pendingRaw, ok := r.m.pending.Load(r.leaseID) pendingRaw, ok := r.m.pending.Load(r.leaseID)
r.m.pendingLock.Unlock()
if !ok { if !ok {
r.m.logger.Warn("failed to find lease in pending map for revocation retry", "lease_id", r.leaseID) r.m.logger.Warn("failed to find lease in pending map for revocation retry", "lease_id", r.leaseID)
return return
@ -269,7 +269,9 @@ func (r *revocationJob) OnFailure(err error) {
return return
} }
r.m.pendingLock.Lock()
r.m.markLeaseIrrevocable(r.nsCtx, le, err) r.m.markLeaseIrrevocable(r.nsCtx, le, err)
r.m.pendingLock.Unlock()
return return
} else { } else {
r.m.logger.Error("failed to revoke lease", "lease_id", r.leaseID, "error", err, r.m.logger.Error("failed to revoke lease", "lease_id", r.leaseID, "error", err,
@ -277,7 +279,9 @@ func (r *revocationJob) OnFailure(err error) {
} }
pending.timer.Reset(newTimer) pending.timer.Reset(newTimer)
r.m.pendingLock.Lock()
r.m.pending.Store(r.leaseID, pending) r.m.pending.Store(r.leaseID, pending)
r.m.pendingLock.Unlock()
} }
func expireLeaseStrategyFairsharing(ctx context.Context, m *ExpirationManager, leaseID string, ns *namespace.Namespace) { func expireLeaseStrategyFairsharing(ctx context.Context, m *ExpirationManager, leaseID string, ns *namespace.Namespace) {