Skip to content

Commit 6a7bcb2

Browse files
committed
refactor: improve key management and refresh logic
Refactored the KeyManager to simplify key refresh logic and improve thread safety. Extracted logic into a new function `tryRefreshKey` and adjusted synchronisation to reduce contention. These changes enhance code clarity and maintainability. Signed-off-by: Clemintina <git@seraph.si>
1 parent e4a2512 commit 6a7bcb2

File tree

1 file changed

+19
-16
lines changed

1 file changed

+19
-16
lines changed

src/utils/key-manager.go

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@ func NewKeyManager(refreshInterval time.Duration) *KeyManager {
4040
}
4141

4242
func (km *KeyManager) GetKey() (string, error) {
43-
km.mutex.RLock()
44-
defer km.mutex.RUnlock()
4543
if km.apiToken == "" {
4644
return "", fmt.Errorf("token not initialised")
4745
}
@@ -51,22 +49,27 @@ func (km *KeyManager) GetKey() (string, error) {
5149
func (km *KeyManager) startAutoRefresh() {
5250
ticker := time.NewTicker(km.refreshInterval)
5351
defer ticker.Stop()
54-
5552
for range ticker.C {
56-
if time.Now().After(km.expiry) {
57-
km.mutex.Lock()
58-
if !km.refreshing {
59-
km.refreshing = true
60-
km.mutex.Unlock()
61-
err := km.refreshKey()
62-
km.mutex.Lock()
53+
km.tryRefreshKey()
54+
}
55+
}
56+
57+
func (km *KeyManager) tryRefreshKey() {
58+
km.mutex.RLock()
59+
expired := time.Now().After(km.expiry)
60+
km.mutex.RUnlock()
61+
62+
if expired {
63+
km.mutex.Lock()
64+
if time.Now().After(km.expiry) && !km.refreshing {
65+
km.refreshing = true
66+
defer func() {
6367
km.refreshing = false
6468
km.mutex.Unlock()
65-
if err != nil {
66-
log.Printf("Error refreshing key: %v\n", err)
67-
}
68-
} else {
69-
km.mutex.Unlock()
69+
}()
70+
err := km.refreshKey()
71+
if err != nil {
72+
log.Printf("Error refreshing key: %v\n", err)
7073
}
7174
} else {
7275
km.mutex.Unlock()
@@ -81,9 +84,9 @@ func (km *KeyManager) refreshKey() error {
8184
}
8285

8386
km.mutex.Lock()
84-
defer km.mutex.Unlock()
8587
km.apiToken = newKey
8688
km.expiry = expiry
89+
km.mutex.Unlock()
8790
return nil
8891
}
8992

0 commit comments

Comments
 (0)