Skip to content

Commit 5109daf

Browse files
authored
Merge pull request #701 from lmiccini/optimize-nodeset-hash-checks
Cache secret hashes in nodeset sync checks to avoid redundant API calls
2 parents 5c76c93 + 5864736 commit 5109daf

1 file changed

Lines changed: 40 additions & 26 deletions

File tree

modules/edpm/unstructured/nodeset.go

Lines changed: 40 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ func AreSecretHashesInSync(
8585
return true, "", nil
8686
}
8787

88+
hashCache := map[string]string{}
89+
8890
for i := range nodesetList.Items {
8991
item := &nodesetList.Items[i]
9092

@@ -102,23 +104,28 @@ func AreSecretHashesInSync(
102104
}
103105

104106
for secretName, deployedHash := range secretHashes {
105-
currentSecret := &corev1.Secret{}
106-
err := c.Get(ctx, types.NamespacedName{
107-
Name: secretName,
108-
Namespace: namespace,
109-
}, currentSecret)
110-
if err != nil {
111-
if k8s_errors.IsNotFound(err) {
112-
info := fmt.Sprintf("nodeset %s/%s: deployed secret %s no longer exists",
113-
item.GetNamespace(), item.GetName(), secretName)
114-
return false, info, nil
107+
currentHash, ok := hashCache[secretName]
108+
if !ok {
109+
currentSecret := &corev1.Secret{}
110+
err := c.Get(ctx, types.NamespacedName{
111+
Name: secretName,
112+
Namespace: namespace,
113+
}, currentSecret)
114+
if err != nil {
115+
if k8s_errors.IsNotFound(err) {
116+
info := fmt.Sprintf("nodeset %s/%s: deployed secret %s no longer exists",
117+
item.GetNamespace(), item.GetName(), secretName)
118+
return false, info, nil
119+
}
120+
return false, "", fmt.Errorf("failed to get secret %s: %w", secretName, err)
115121
}
116-
return false, "", fmt.Errorf("failed to get secret %s: %w", secretName, err)
117-
}
118122

119-
currentHash, hashErr := oko_secret.Hash(currentSecret)
120-
if hashErr != nil {
121-
return false, "", fmt.Errorf("failed to hash secret %s: %w", secretName, hashErr)
123+
h, hashErr := oko_secret.Hash(currentSecret)
124+
if hashErr != nil {
125+
return false, "", fmt.Errorf("failed to hash secret %s: %w", secretName, hashErr)
126+
}
127+
currentHash = h
128+
hashCache[secretName] = currentHash
122129
}
123130

124131
if currentHash != deployedHash {
@@ -167,6 +174,9 @@ func IsSecretHashInSync(
167174
return false, "", fmt.Errorf("failed to list OpenStackDataPlaneNodeSets: %w", err)
168175
}
169176

177+
var currentHash string
178+
var hashResolved bool
179+
170180
for i := range nodesetList.Items {
171181
item := &nodesetList.Items[i]
172182

@@ -184,19 +194,23 @@ func IsSecretHashInSync(
184194
continue
185195
}
186196

187-
currentSecret := &corev1.Secret{}
188-
if err := c.Get(ctx, types.NamespacedName{Name: secretName, Namespace: namespace}, currentSecret); err != nil {
189-
if k8s_errors.IsNotFound(err) {
190-
info := fmt.Sprintf("nodeset %s/%s: deployed secret %s no longer exists",
191-
item.GetNamespace(), item.GetName(), secretName)
192-
return false, info, nil
197+
if !hashResolved {
198+
currentSecret := &corev1.Secret{}
199+
if err := c.Get(ctx, types.NamespacedName{Name: secretName, Namespace: namespace}, currentSecret); err != nil {
200+
if k8s_errors.IsNotFound(err) {
201+
info := fmt.Sprintf("nodeset %s/%s: deployed secret %s no longer exists",
202+
item.GetNamespace(), item.GetName(), secretName)
203+
return false, info, nil
204+
}
205+
return false, "", fmt.Errorf("failed to get secret %s: %w", secretName, err)
193206
}
194-
return false, "", fmt.Errorf("failed to get secret %s: %w", secretName, err)
195-
}
196207

197-
currentHash, hashErr := oko_secret.Hash(currentSecret)
198-
if hashErr != nil {
199-
return false, "", fmt.Errorf("failed to hash secret %s: %w", secretName, hashErr)
208+
h, hashErr := oko_secret.Hash(currentSecret)
209+
if hashErr != nil {
210+
return false, "", fmt.Errorf("failed to hash secret %s: %w", secretName, hashErr)
211+
}
212+
currentHash = h
213+
hashResolved = true
200214
}
201215

202216
if currentHash != deployedHash {

0 commit comments

Comments
 (0)