@@ -120,9 +120,14 @@ type route struct {
120120
121121// ScaleObjects contains objects for scale testing.
122122type 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.
124125 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.
126131 ScaleIterationGroups [][]client.Object
127132}
128133
@@ -150,12 +155,15 @@ func decodeObjects(reader io.Reader) ([]client.Object, error) {
150155}
151156
152157// 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.
153160func GenerateScaleListenerObjects (numListeners int , tls bool ) (ScaleObjects , error ) {
154161 var result ScaleObjects
155162
156163 listeners := make ([]listener , 0 )
157164 backends := make ([]string , 0 )
158165 secrets := make ([]string , 0 )
166+ routes := make ([]route , 0 )
159167
160168 for i := range numListeners {
161169 listenerName := fmt .Sprintf ("listener-%d" , i )
@@ -180,30 +188,34 @@ func GenerateScaleListenerObjects(numListeners int, tls bool) (ScaleObjects, err
180188 HostnamePrefix : hostnamePrefix ,
181189 BackendName : backendName ,
182190 }
191+ routes = append (routes , r )
183192
184193 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 )
192194 }
193195
194196 secretObjects , err := generateSecrets (secrets )
195197 if err != nil {
196198 return ScaleObjects {}, err
197199 }
198-
199200 result .BaseObjects = append (result .BaseObjects , secretObjects ... )
200201
201202 backendObjects , err := generateBackendAppObjects (backends )
202203 if err != nil {
203204 return ScaleObjects {}, err
204205 }
206+ result .GatewayAndServiceObjects = append (result .GatewayAndServiceObjects , backendObjects ... )
205207
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 )
207219
208220 return result , nil
209221}
@@ -240,6 +252,21 @@ func GenerateScaleHTTPRouteObjects(numRoutes int) (ScaleObjects, error) {
240252
241253 backendName := "backend"
242254
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
243270 for i := range numRoutes {
244271 r := route {
245272 Name : fmt .Sprintf ("route-%d" , i ),
@@ -248,27 +275,15 @@ func GenerateScaleHTTPRouteObjects(numRoutes int) (ScaleObjects, error) {
248275 BackendName : backendName ,
249276 }
250277
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 })
258280 if err != nil {
259281 return ScaleObjects {}, err
260282 }
261283
262- result .ScaleIterationGroups = append (result .ScaleIterationGroups , objects )
284+ result .ScaleIterationGroups = append (result .ScaleIterationGroups , routeObjects )
263285 }
264286
265- backendObjects , err := generateBackendAppObjects ([]string {backendName })
266- if err != nil {
267- return ScaleObjects {}, err
268- }
269-
270- result .BaseObjects = backendObjects
271-
272287 return result , nil
273288}
274289
0 commit comments