From b89794c19956798234f18e82b397b57f82094a21 Mon Sep 17 00:00:00 2001 From: vittoria salim Date: Thu, 4 Sep 2025 18:31:21 +1000 Subject: [PATCH 1/5] refactor(staleGet): refactor staleGet to randomize target endpoint --- api/types/load_traffic.go | 2 ++ request/random.go | 10 +++++++++- request/requester.go | 6 +++--- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/api/types/load_traffic.go b/api/types/load_traffic.go index d5d9a3b..6e8196e 100644 --- a/api/types/load_traffic.go +++ b/api/types/load_traffic.go @@ -109,6 +109,8 @@ type RequestGet struct { Namespace string `json:"namespace" yaml:"namespace"` // Name is object's name. Name string `json:"name" yaml:"name"` + // KeySpaceSize is used to generate random number as name's suffix. + KeySpaceSize int `json:"keySpaceSize" yaml:"keySpaceSize"` } // RequestList defines LIST request for target objects. diff --git a/request/random.go b/request/random.go index 32012e0..b000171 100644 --- a/request/random.go +++ b/request/random.go @@ -149,6 +149,7 @@ type requestGetBuilder struct { namespace string name string resourceVersion string + keySpaceSize int maxRetries int } @@ -162,6 +163,7 @@ func newRequestGetBuilder(src *types.RequestGet, resourceVersion string, maxRetr namespace: src.Namespace, name: src.Name, resourceVersion: resourceVersion, + keySpaceSize: src.KeySpaceSize, maxRetries: maxRetries, } } @@ -178,7 +180,13 @@ func (b *requestGetBuilder) Build(cli rest.Interface) Requester { if b.namespace != "" { comps = append(comps, "namespaces", b.namespace) } - comps = append(comps, b.resource, b.name) + // Generate random suffix based on keySpaceSize + randomInt, _ := rand.Int(rand.Reader, big.NewInt(int64(b.keySpaceSize))) + suffix := randomInt.Int64() + + // Create final resource name: name-{suffix} + finalName := fmt.Sprintf("%s-%d", b.name, suffix) + comps = append(comps, b.resource, finalName) return &DiscardRequester{ BaseRequester: BaseRequester{ diff --git a/request/requester.go b/request/requester.go index 9737b42..e5cf353 100644 --- a/request/requester.go +++ b/request/requester.go @@ -43,9 +43,9 @@ func (reqr *BaseRequester) URL() *url.URL { func (reqr *BaseRequester) MaskedURL() *url.URL { originalURL := reqr.req.URL() - // Aggregates for DELETE and PATCH methods, replaces the last path segment - // for DELETE and PATCH requests so they can be aggregated (e.g. in metrics) - if reqr.method == http.MethodDelete || reqr.method == http.MethodPatch { + // Aggregates for DELETE, PATCH, and GET methods, replaces the last path segment + // for DELETE, PATCH, and GET requests so they can be aggregated (e.g. in metrics) + if reqr.method == http.MethodDelete || reqr.method == http.MethodPatch || reqr.method == http.MethodGet { if u, err := url.Parse(originalURL.String()); err == nil { u.Path = path.Join(path.Dir(u.Path), ":name") return u // String() will keep ":name" as-is From dfedfc0f855071cbb6e5b66009277c48821debff Mon Sep 17 00:00:00 2001 From: vittoria salim Date: Thu, 4 Sep 2025 18:55:50 +1000 Subject: [PATCH 2/5] fix(staleget): add condition only randomize if keySpaceSize > 0 --- request/random.go | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/request/random.go b/request/random.go index b000171..f4f15da 100644 --- a/request/random.go +++ b/request/random.go @@ -180,12 +180,12 @@ func (b *requestGetBuilder) Build(cli rest.Interface) Requester { if b.namespace != "" { comps = append(comps, "namespaces", b.namespace) } - // Generate random suffix based on keySpaceSize - randomInt, _ := rand.Int(rand.Reader, big.NewInt(int64(b.keySpaceSize))) - suffix := randomInt.Int64() - // Create final resource name: name-{suffix} - finalName := fmt.Sprintf("%s-%d", b.name, suffix) + finalName := b.name + if b.keySpaceSize > 0 { + randomInt, _ := rand.Int(rand.Reader, big.NewInt(int64(b.keySpaceSize))) + finalName = fmt.Sprintf("%s-%d", b.name, randomInt.Int64()) + } comps = append(comps, b.resource, finalName) return &DiscardRequester{ @@ -413,12 +413,18 @@ func (b *requestPatchBuilder) Build(cli rest.Interface) Requester { if b.namespace != "" { comps = append(comps, "namespaces", b.namespace) } - // Generate random suffix based on keySpaceSize - randomInt, _ := rand.Int(rand.Reader, big.NewInt(int64(b.keySpaceSize))) - suffix := randomInt.Int64() - // Create final resource name: name-{suffix} - finalName := fmt.Sprintf("%s-%d", b.name, suffix) + var finalName string + if b.keySpaceSize == 0 { + // If keySpaceSize is 0, use name as-is + finalName = b.name + } else { + // Generate random suffix based on keySpaceSize + randomInt, _ := rand.Int(rand.Reader, big.NewInt(int64(b.keySpaceSize))) + suffix := randomInt.Int64() + // Create final resource name: name-{suffix} + finalName = fmt.Sprintf("%s-%d", b.name, suffix) + } comps = append(comps, b.resource, finalName) return &DiscardRequester{ From d8908699ecc25cbfa1864483413dae265fb7ff21 Mon Sep 17 00:00:00 2001 From: vittoria salim Date: Fri, 5 Sep 2025 09:48:16 +1000 Subject: [PATCH 3/5] changes patch --- request/random.go | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/request/random.go b/request/random.go index f4f15da..6f48036 100644 --- a/request/random.go +++ b/request/random.go @@ -414,17 +414,12 @@ func (b *requestPatchBuilder) Build(cli rest.Interface) Requester { comps = append(comps, "namespaces", b.namespace) } - var finalName string - if b.keySpaceSize == 0 { - // If keySpaceSize is 0, use name as-is - finalName = b.name - } else { - // Generate random suffix based on keySpaceSize - randomInt, _ := rand.Int(rand.Reader, big.NewInt(int64(b.keySpaceSize))) - suffix := randomInt.Int64() - // Create final resource name: name-{suffix} - finalName = fmt.Sprintf("%s-%d", b.name, suffix) - } + // Generate random suffix based on keySpaceSize + randomInt, _ := rand.Int(rand.Reader, big.NewInt(int64(b.keySpaceSize))) + suffix := randomInt.Int64() + + // Create final resource name: name-{suffix} + finalName := fmt.Sprintf("%s-%d", b.name, suffix) comps = append(comps, b.resource, finalName) return &DiscardRequester{ From d2ce3e95f4ca542ce174ea9e5b3f40e256a78ac3 Mon Sep 17 00:00:00 2001 From: vittoria salim Date: Fri, 5 Sep 2025 09:53:01 +1000 Subject: [PATCH 4/5] unified condition --- request/random.go | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/request/random.go b/request/random.go index 6f48036..b1c5237 100644 --- a/request/random.go +++ b/request/random.go @@ -414,12 +414,11 @@ func (b *requestPatchBuilder) Build(cli rest.Interface) Requester { comps = append(comps, "namespaces", b.namespace) } - // Generate random suffix based on keySpaceSize - randomInt, _ := rand.Int(rand.Reader, big.NewInt(int64(b.keySpaceSize))) - suffix := randomInt.Int64() - - // Create final resource name: name-{suffix} - finalName := fmt.Sprintf("%s-%d", b.name, suffix) + finalName := b.name + if b.keySpaceSize > 0 { + randomInt, _ := rand.Int(rand.Reader, big.NewInt(int64(b.keySpaceSize))) + finalName = fmt.Sprintf("%s-%d", b.name, randomInt.Int64()) + } comps = append(comps, b.resource, finalName) return &DiscardRequester{ From 2dd076f996cd0ec1e31466f7ee0ecbcd8d65e28a Mon Sep 17 00:00:00 2001 From: vittoria salim Date: Fri, 5 Sep 2025 09:56:10 +1000 Subject: [PATCH 5/5] fix(patch): keep patch as it is --- request/random.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/request/random.go b/request/random.go index b1c5237..6949302 100644 --- a/request/random.go +++ b/request/random.go @@ -413,12 +413,12 @@ func (b *requestPatchBuilder) Build(cli rest.Interface) Requester { if b.namespace != "" { comps = append(comps, "namespaces", b.namespace) } + // Generate random suffix based on keySpaceSize + randomInt, _ := rand.Int(rand.Reader, big.NewInt(int64(b.keySpaceSize))) + suffix := randomInt.Int64() - finalName := b.name - if b.keySpaceSize > 0 { - randomInt, _ := rand.Int(rand.Reader, big.NewInt(int64(b.keySpaceSize))) - finalName = fmt.Sprintf("%s-%d", b.name, randomInt.Int64()) - } + // Create final resource name: name-{suffix} + finalName := fmt.Sprintf("%s-%d", b.name, suffix) comps = append(comps, b.resource, finalName) return &DiscardRequester{