@@ -120,9 +120,14 @@ type route struct {
120
120
121
121
// ScaleObjects contains objects for scale testing.
122
122
type ScaleObjects struct {
123
- // BaseObjects contains objects that are common to all scale iterations.
123
+ // BaseObjects contains objects that should be created first:
124
+ // secrets and other foundational resources.
124
125
BaseObjects []client.Object
125
- // ScaleIterationGroups contains objects for each scale iteration.
126
+ // GatewayAndServiceObjects contains backend services, deployments, and Gateway objects.
127
+ // These are created after BaseObjects to ensure endpoints are ready before traffic.
128
+ GatewayAndServiceObjects []client.Object
129
+ // ScaleIterationGroups contains HTTPRoute objects for each scale iteration.
130
+ // These are applied after GatewayAndServiceObjects to start traffic flow incrementally.
126
131
ScaleIterationGroups [][]client.Object
127
132
}
128
133
@@ -150,12 +155,15 @@ func decodeObjects(reader io.Reader) ([]client.Object, error) {
150
155
}
151
156
152
157
// GenerateScaleListenerObjects generates objects for a given number of listeners for the scale test.
158
+ // Secrets are created first in BaseObjects, then backend services/deployments and Gateway in GatewayAndServiceObjects,
159
+ // and finally HTTPRoutes in ScaleIterationGroups.
153
160
func GenerateScaleListenerObjects (numListeners int , tls bool ) (ScaleObjects , error ) {
154
161
var result ScaleObjects
155
162
156
163
listeners := make ([]listener , 0 )
157
164
backends := make ([]string , 0 )
158
165
secrets := make ([]string , 0 )
166
+ routes := make ([]route , 0 )
159
167
160
168
for i := range numListeners {
161
169
listenerName := fmt .Sprintf ("listener-%d" , i )
@@ -180,30 +188,34 @@ func GenerateScaleListenerObjects(numListeners int, tls bool) (ScaleObjects, err
180
188
HostnamePrefix : hostnamePrefix ,
181
189
BackendName : backendName ,
182
190
}
191
+ routes = append (routes , r )
183
192
184
193
backends = append (backends , backendName )
185
-
186
- objects , err := generateManifests (listeners , []route {r })
187
- if err != nil {
188
- return ScaleObjects {}, err
189
- }
190
-
191
- result .ScaleIterationGroups = append (result .ScaleIterationGroups , objects )
192
194
}
193
195
194
196
secretObjects , err := generateSecrets (secrets )
195
197
if err != nil {
196
198
return ScaleObjects {}, err
197
199
}
198
-
199
200
result .BaseObjects = append (result .BaseObjects , secretObjects ... )
200
201
201
202
backendObjects , err := generateBackendAppObjects (backends )
202
203
if err != nil {
203
204
return ScaleObjects {}, err
204
205
}
206
+ result .GatewayAndServiceObjects = append (result .GatewayAndServiceObjects , backendObjects ... )
205
207
206
- result .BaseObjects = append (result .BaseObjects , backendObjects ... )
208
+ gatewayObjects , err := generateManifests (listeners , nil )
209
+ if err != nil {
210
+ return ScaleObjects {}, err
211
+ }
212
+ result .GatewayAndServiceObjects = append (result .GatewayAndServiceObjects , gatewayObjects ... )
213
+
214
+ routeObjects , err := generateManifests (nil , routes )
215
+ if err != nil {
216
+ return ScaleObjects {}, err
217
+ }
218
+ result .ScaleIterationGroups = append (result .ScaleIterationGroups , routeObjects )
207
219
208
220
return result , nil
209
221
}
@@ -240,6 +252,21 @@ func GenerateScaleHTTPRouteObjects(numRoutes int) (ScaleObjects, error) {
240
252
241
253
backendName := "backend"
242
254
255
+ // Generate backend objects and add to GatewayAndServiceObjects
256
+ backendObjects , err := generateBackendAppObjects ([]string {backendName })
257
+ if err != nil {
258
+ return ScaleObjects {}, err
259
+ }
260
+ result .GatewayAndServiceObjects = append (result .GatewayAndServiceObjects , backendObjects ... )
261
+
262
+ // Generate Gateway object and add to GatewayAndServiceObjects
263
+ gatewayObjects , err := generateManifests ([]listener {l }, nil )
264
+ if err != nil {
265
+ return ScaleObjects {}, err
266
+ }
267
+ result .GatewayAndServiceObjects = append (result .GatewayAndServiceObjects , gatewayObjects ... )
268
+
269
+ // Generate HTTPRoute objects for each iteration
243
270
for i := range numRoutes {
244
271
r := route {
245
272
Name : fmt .Sprintf ("route-%d" , i ),
@@ -248,27 +275,15 @@ func GenerateScaleHTTPRouteObjects(numRoutes int) (ScaleObjects, error) {
248
275
BackendName : backendName ,
249
276
}
250
277
251
- var listeners []listener
252
- if i == 0 {
253
- // only generate a Gateway on the first iteration
254
- listeners = []listener {l }
255
- }
256
-
257
- objects , err := generateManifests (listeners , []route {r })
278
+ // Generate only the HTTPRoute (no listeners/gateway)
279
+ routeObjects , err := generateManifests (nil , []route {r })
258
280
if err != nil {
259
281
return ScaleObjects {}, err
260
282
}
261
283
262
- result .ScaleIterationGroups = append (result .ScaleIterationGroups , objects )
284
+ result .ScaleIterationGroups = append (result .ScaleIterationGroups , routeObjects )
263
285
}
264
286
265
- backendObjects , err := generateBackendAppObjects ([]string {backendName })
266
- if err != nil {
267
- return ScaleObjects {}, err
268
- }
269
-
270
- result .BaseObjects = backendObjects
271
-
272
287
return result , nil
273
288
}
274
289
0 commit comments