From 08b2cb4e365c4cfca439c7903be8b2db098044c9 Mon Sep 17 00:00:00 2001 From: Qiu Jian Date: Sun, 10 Mar 2024 10:07:23 +0800 Subject: [PATCH] fix: make authManager a singleton --- pkg/mcclient/auth/auth.go | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/pkg/mcclient/auth/auth.go b/pkg/mcclient/auth/auth.go index 25aeb1cb71..604284862a 100644 --- a/pkg/mcclient/auth/auth.go +++ b/pkg/mcclient/auth/auth.go @@ -20,6 +20,7 @@ import ( "net" "net/http" "strings" + "sync" "time" "yunion.io/x/jsonutils" @@ -161,16 +162,29 @@ type authManager struct { accessKeyCache *sAccessKeyCache } +var ( + authManagerInstane *authManager + authManagerLock *sync.Mutex = &sync.Mutex{} +) + func newAuthManager(cli *mcclient.Client, info *AuthInfo) *authManager { - authm := &authManager{ + authManagerLock.Lock() + defer authManagerLock.Unlock() + + if authManagerInstane != nil { + authManagerInstane.client = cli + authManagerInstane.info = info + return authManagerInstane + } + authManagerInstane = &authManager{ client: cli, info: info, tokenCacheVerify: NewTokenCacheVerify(), accessKeyCache: newAccessKeyCache(), } - authm.InitSync(authm) - go authm.startRefreshRevokeTokens() - return authm + authManagerInstane.InitSync(authManagerInstane) + go authManagerInstane.startRefreshRevokeTokens() + return authManagerInstane } func (a *authManager) startRefreshRevokeTokens() {