From 0042db5ea33c7034c4b0aefaab45552dc8b9e688 Mon Sep 17 00:00:00 2001 From: winniehere Date: Wed, 18 Sep 2024 15:25:54 +0800 Subject: [PATCH] refactor(runtime): reduce loop iteration complexity of `checkStoreUpgrade` (#21791) --- runtime/store.go | 28 +++++++++++++++------------- runtime/v2/store.go | 28 +++++++++++++++------------- 2 files changed, 30 insertions(+), 26 deletions(-) diff --git a/runtime/store.go b/runtime/store.go index 298582087caf..df2a40f06b0c 100644 --- a/runtime/store.go +++ b/runtime/store.go @@ -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 diff --git a/runtime/v2/store.go b/runtime/v2/store.go index de05a27dfd12..40912ea41f48 100644 --- a/runtime/v2/store.go +++ b/runtime/v2/store.go @@ -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