refactor(runtime): reduce loop iteration complexity of checkStoreUpgrade (#21791)

This commit is contained in:
winniehere 2024-09-18 15:25:54 +08:00 committed by GitHub
parent 81ec7ea9e7
commit 0042db5ea3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 30 additions and 26 deletions

View File

@ -215,29 +215,31 @@ func checkStoreUpgrade(storeUpgrades *store.StoreUpgrades) error {
}
// check for duplicates
exists := make(map[string]bool)
addedFilter := make(map[string]struct{})
deletedFilter := make(map[string]struct{})
for _, key := range storeUpgrades.Added {
if exists[key] {
if _, ok := addedFilter[key]; ok {
return fmt.Errorf("store upgrade has duplicate key %s in added", key)
}
if storeUpgrades.IsDeleted(key) {
return fmt.Errorf("store upgrade has key %s in both added and deleted", key)
}
exists[key] = true
addedFilter[key] = struct{}{}
}
exists = make(map[string]bool)
for _, key := range storeUpgrades.Deleted {
if exists[key] {
if _, ok := deletedFilter[key]; ok {
return fmt.Errorf("store upgrade has duplicate key %s in deleted", key)
}
deletedFilter[key] = struct{}{}
}
if storeUpgrades.IsAdded(key) {
for _, key := range storeUpgrades.Added {
if _, ok := deletedFilter[key]; ok {
return fmt.Errorf("store upgrade has key %s in both added and deleted", key)
}
}
for _, key := range storeUpgrades.Deleted {
if _, ok := addedFilter[key]; ok {
return fmt.Errorf("store upgrade has key %s in both added and deleted", key)
}
exists[key] = true
}
return nil

View File

@ -102,29 +102,31 @@ func checkStoreUpgrade(storeUpgrades *store.StoreUpgrades) error {
}
// check for duplicates
exists := make(map[string]bool)
addedFilter := make(map[string]struct{})
deletedFilter := make(map[string]struct{})
for _, key := range storeUpgrades.Added {
if exists[key] {
if _, ok := addedFilter[key]; ok {
return fmt.Errorf("store upgrade has duplicate key %s in added", key)
}
if storeUpgrades.IsDeleted(key) {
return fmt.Errorf("store upgrade has key %s in both added and deleted", key)
}
exists[key] = true
addedFilter[key] = struct{}{}
}
exists = make(map[string]bool)
for _, key := range storeUpgrades.Deleted {
if exists[key] {
if _, ok := deletedFilter[key]; ok {
return fmt.Errorf("store upgrade has duplicate key %s in deleted", key)
}
deletedFilter[key] = struct{}{}
}
if storeUpgrades.IsAdded(key) {
for _, key := range storeUpgrades.Added {
if _, ok := deletedFilter[key]; ok {
return fmt.Errorf("store upgrade has key %s in both added and deleted", key)
}
}
for _, key := range storeUpgrades.Deleted {
if _, ok := addedFilter[key]; ok {
return fmt.Errorf("store upgrade has key %s in both added and deleted", key)
}
exists[key] = true
}
return nil