Skip to content

Commit 807ff92

Browse files
authored
Bulk delete namespaces in reconfiguration nfr test (#3402)
Add bulk delete namespaces function to use in reconfiguration nfr test to improve performance. Problem: The reconfiguration nfr test takes a very long time to run because we are deleting namespaces individually, we could save a lot of time by bulk deleting them. Solution: Add a function which deletes multiple namespaces at a single time.
1 parent 3ee8881 commit 807ff92

File tree

2 files changed

+45
-9
lines changed

2 files changed

+45
-9
lines changed

tests/framework/resourcemanager.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
"io"
3030
"net/http"
3131
"reflect"
32+
"slices"
3233
"strings"
3334
"time"
3435

@@ -221,6 +222,45 @@ func (rm *ResourceManager) DeleteNamespace(name string) error {
221222
})
222223
}
223224

225+
func (rm *ResourceManager) DeleteNamespaces(names []string) error {
226+
ctx, cancel := context.WithTimeout(context.Background(), rm.TimeoutConfig.DeleteNamespaceTimeout*2)
227+
defer cancel()
228+
229+
var combinedErrors error
230+
for _, name := range names {
231+
ns := &core.Namespace{ObjectMeta: metav1.ObjectMeta{Name: name}}
232+
233+
if err := rm.K8sClient.Delete(ctx, ns); err != nil {
234+
if apierrors.IsNotFound(err) {
235+
continue
236+
}
237+
238+
combinedErrors = errors.Join(combinedErrors, fmt.Errorf("error deleting namespace: %w", err))
239+
}
240+
}
241+
242+
err := wait.PollUntilContextCancel(
243+
ctx,
244+
500*time.Millisecond,
245+
true, /* poll immediately */
246+
func(ctx context.Context) (bool, error) {
247+
nsList := &core.NamespaceList{}
248+
if err := rm.K8sClient.List(ctx, nsList); err != nil {
249+
return false, nil //nolint:nilerr // retry on error
250+
}
251+
252+
for _, namespace := range nsList.Items {
253+
if slices.Contains(names, namespace.Name) {
254+
return false, nil
255+
}
256+
}
257+
258+
return true, nil
259+
})
260+
261+
return errors.Join(combinedErrors, err)
262+
}
263+
224264
// DeleteFromFiles deletes Kubernetes resources defined within the provided YAML files.
225265
func (rm *ResourceManager) DeleteFromFiles(files []string, namespace string) error {
226266
handlerFunc := func(obj unstructured.Unstructured) error {

tests/suite/reconfig_test.go

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -170,16 +170,12 @@ var _ = Describe("Reconfiguration Performance Testing", Ordered, Label("nfr", "r
170170
cleanupResources := func() error {
171171
var err error
172172

173-
// FIXME (bjee19): https://github.com/nginx/nginx-gateway-fabric/issues/2376
174-
// Find a way to bulk delete these namespaces.
175-
for i := 1; i <= maxResourceCount; i++ {
176-
nsName := "namespace" + strconv.Itoa(i)
177-
resultError := resourceManager.DeleteNamespace(nsName)
178-
if resultError != nil {
179-
err = resultError
180-
}
173+
namespaces := make([]string, maxResourceCount)
174+
for i := range maxResourceCount {
175+
namespaces[i] = "namespace" + strconv.Itoa(i+1)
181176
}
182177

178+
err = resourceManager.DeleteNamespaces(namespaces)
183179
Expect(resourceManager.DeleteNamespace(reconfigNamespace.Name)).To(Succeed())
184180

185181
return err
@@ -490,7 +486,7 @@ Time To Ready Description: {{ .TimeToReadyDescription }}
490486
{{- end }}
491487
492488
### NGINX Error Logs
493-
{{ .NGINXErrorLogs }}
489+
{{ .NGINXErrorLogs -}}
494490
`
495491

496492
func writeReconfigResults(dest io.Writer, results reconfigTestResults) error {

0 commit comments

Comments
 (0)