Skip to content

Commit

Permalink
VAULT-8630 Fix goroutine leak from RLQ initialize (#17281)
Browse files Browse the repository at this point in the history
* VAULT-8630 Fix goroutine leak from RLQ initialize

* VAULT-8630 Changelog

* VAULT-8630 additional nil check
  • Loading branch information
VioletHynes committed Sep 22, 2022
1 parent 21d1363 commit 6c399c1
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 0 deletions.
3 changes: 3 additions & 0 deletions changelog/17281.txt
@@ -0,0 +1,3 @@
```release-note:bug
core/quotas: Fix goroutine leak caused by the seal process not fully cleaning up Rate Limit Quotas.
```
27 changes: 27 additions & 0 deletions vault/quotas/quotas.go
Expand Up @@ -358,6 +358,11 @@ func (m *Manager) QuotaNames(qType Type) ([]string, error) {
m.lock.RLock()
defer m.lock.RUnlock()

return m.quotaNamesLocked(qType)
}

// quotaNamesLocked returns the names of all the quota rules for a given type, and must be called with the lock
func (m *Manager) quotaNamesLocked(qType Type) ([]string, error) {
txn := m.db.Txn(false)
iter, err := txn.Get(qType.String(), indexID)
if err != nil {
Expand Down Expand Up @@ -393,6 +398,11 @@ func (m *Manager) QuotaByName(qType string, name string) (Quota, error) {
m.lock.RLock()
defer m.lock.RUnlock()

return m.quotaByNameLocked(qType, name)
}

// quotaByNameLocked queries for a quota rule in the db for a given quota name, and must be called with the lock
func (m *Manager) quotaByNameLocked(qType string, name string) (Quota, error) {
txn := m.db.Txn(false)

quotaRaw, err := txn.First(qType, indexName, name)
Expand Down Expand Up @@ -745,6 +755,23 @@ func (m *Manager) Reset() error {

// Must be called with the lock held
func (m *Manager) resetCache() error {
names, err := m.quotaNamesLocked(TypeRateLimit)
if err != nil {
return err
}
for _, name := range names {
quota, err := m.quotaByNameLocked(TypeRateLimit.String(), name)
if err != nil {
return err
}
if quota != nil {
rlq := quota.(*RateLimitQuota)
err = rlq.store.Close(context.Background())
if err != nil {
return err
}
}
}
db, err := memdb.NewMemDB(dbSchema())
if err != nil {
return err
Expand Down

0 comments on commit 6c399c1

Please sign in to comment.