Merge pull request #14295 from ioito/hotfix/qx-prob-lock

fix(region): account probe lock
This commit is contained in:
Zexi Li
2022-05-25 10:17:11 +08:00
committed by GitHub
+11 -8
View File
@@ -1860,18 +1860,18 @@ func (manager *SCloudaccountManager) AutoSyncCloudaccountStatusTask(ctx context.
for i := range accounts {
if accounts[i].GetEnabled() && accounts[i].shouldProbeStatus() && accounts[i].CanSync() {
id, name, account := accounts[i].Id, accounts[i].Name, &accounts[i]
cloudaccountPendingSyncsMutex.Lock()
if _, ok := cloudaccountPendingSyncs[id]; ok {
cloudaccountPendingSyncsMutex.Unlock()
cloudaccountProbeMutex.Lock()
if _, ok := cloudaccountProbe[id]; ok {
cloudaccountProbeMutex.Unlock()
continue
}
cloudaccountPendingSyncs[id] = struct{}{}
cloudaccountPendingSyncsMutex.Unlock()
cloudaccountProbe[id] = struct{}{}
cloudaccountProbeMutex.Unlock()
RunSyncCloudAccountTask(ctx, func() {
defer func() {
cloudaccountPendingSyncsMutex.Lock()
defer cloudaccountPendingSyncsMutex.Unlock()
delete(cloudaccountPendingSyncs, id)
cloudaccountProbeMutex.Lock()
defer cloudaccountProbeMutex.Unlock()
delete(cloudaccountProbe, id)
}()
log.Debugf("syncAccountStatus %s %s", id, name)
err := account.syncAccountStatus(ctx, userCred)
@@ -2058,6 +2058,9 @@ func (account *SCloudaccount) syncAccountStatus(ctx context.Context, userCred mc
var (
cloudaccountPendingSyncs = map[string]struct{}{}
cloudaccountPendingSyncsMutex = &sync.Mutex{}
cloudaccountProbe = map[string]struct{}{}
cloudaccountProbeMutex = &sync.Mutex{}
)
func (account *SCloudaccount) SubmitSyncAccountTask(ctx context.Context, userCred mcclient.TokenCredential, waitChan chan error) {