fix: sync remove dirty rds accounts

This commit is contained in:
Qu Xuan
2020-11-06 20:36:33 +08:00
parent 4653e46ec9
commit 008fd554c6
+41 -16
View File
@@ -627,9 +627,14 @@ func (manager *SDBInstanceAccountManager) SyncDBInstanceAccounts(ctx context.Con
result.Error(err)
return nil, nil, result
}
accountMaps := map[string]SDBInstanceAccount{}
accountMaps := map[string][]SDBInstanceAccount{}
for i := range dbAccounts {
accountMaps[fmt.Sprintf("%s:%s", dbAccounts[i].Name, dbAccounts[i].Host)] = dbAccounts[i]
key := fmt.Sprintf("%s:%s", dbAccounts[i].Name, dbAccounts[i].Host)
_, ok := accountMaps[key]
if !ok {
accountMaps[key] = []SDBInstanceAccount{}
}
accountMaps[key] = append(accountMaps[key], dbAccounts[i])
}
remoteMaps := map[string]cloudprovider.ICloudDBInstanceAccount{}
for i := range cloudAccounts {
@@ -637,7 +642,7 @@ func (manager *SDBInstanceAccountManager) SyncDBInstanceAccounts(ctx context.Con
}
for key, account := range remoteMaps {
local, ok := accountMaps[key]
locals, ok := accountMaps[key]
if !ok {
_account, err := manager.newFromCloudDBInstanceAccount(ctx, userCred, instance, account)
if err != nil {
@@ -649,25 +654,45 @@ func (manager *SDBInstanceAccountManager) SyncDBInstanceAccounts(ctx context.Con
localAccounts = append(localAccounts, *_account)
continue
}
err = local.SyncWithCloudDBInstanceAccount(ctx, userCred, instance, account)
if err != nil {
result.UpdateError(err)
continue
password := ""
for i := range locals {
if i == 0 {
err = locals[i].SyncWithCloudDBInstanceAccount(ctx, userCred, instance, account)
if err != nil {
result.UpdateError(err)
continue
}
result.Update()
remoteAccounts = append(remoteAccounts, account)
localAccounts = append(localAccounts, locals[0])
} else {
if passwd, err := locals[i].GetPassword(); err == nil && len(passwd) > 0 {
password = passwd
}
err := locals[i].Purge(ctx, userCred)
if err != nil {
result.DeleteError(err)
continue
}
result.Delete()
}
}
if len(password) > 0 {
locals[0].savePassword(password)
}
result.Update()
remoteAccounts = append(remoteAccounts, account)
localAccounts = append(localAccounts, local)
}
for key, account := range accountMaps {
for key, accounts := range accountMaps {
_, ok := remoteMaps[key]
if !ok {
err := account.Purge(ctx, userCred)
if err != nil {
result.DeleteError(err)
continue
for i := range accounts {
err := accounts[i].Purge(ctx, userCred)
if err != nil {
result.DeleteError(err)
continue
}
result.Delete()
}
result.Delete()
}
}