55 "errors"
66 "fmt"
77 "io"
8- "log"
98 "text/template"
109
1110 "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
@@ -121,9 +120,14 @@ type route struct {
121120
122121// ScaleObjects contains objects for scale testing.
123122type ScaleObjects struct {
124- // 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.
125125 BaseObjects []client.Object
126- // 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.
127131 ScaleIterationGroups [][]client.Object
128132}
129133
@@ -151,17 +155,16 @@ func decodeObjects(reader io.Reader) ([]client.Object, error) {
151155}
152156
153157// GenerateScaleListenerObjects generates objects for a given number of listeners for the scale test.
154- // Modified to create all services and gateways first, then scale routes.
158+ // Secrets are created first in BaseObjects, then backend services/deployments and Gateway in GatewayAndServiceObjects,
159+ // and finally HTTPRoutes in ScaleIterationGroups.
155160func GenerateScaleListenerObjects (numListeners int , tls bool ) (ScaleObjects , error ) {
156- log .Printf ("GenerateScaleListenerObjects: Starting generation for %d listeners, TLS=%v" , numListeners , tls )
157161 var result ScaleObjects
158162
159163 listeners := make ([]listener , 0 )
160164 backends := make ([]string , 0 )
161165 secrets := make ([]string , 0 )
162166 routes := make ([]route , 0 )
163167
164- // Generate all listeners, backends, and routes
165168 for i := range numListeners {
166169 listenerName := fmt .Sprintf ("listener-%d" , i )
167170 hostnamePrefix := fmt .Sprintf ("%d" , i )
@@ -185,66 +188,44 @@ func GenerateScaleListenerObjects(numListeners int, tls bool) (ScaleObjects, err
185188 HostnamePrefix : hostnamePrefix ,
186189 BackendName : backendName ,
187190 }
188-
189191 routes = append (routes , r )
192+
190193 backends = append (backends , backendName )
191194 }
192195
193- log .Printf ("GenerateScaleListenerObjects: Generated %d listeners, %d backends, %d secrets" , len (listeners ), len (backends ), len (secrets ))
194-
195- // Generate gateway with all listeners
196- log .Printf ("GenerateScaleListenerObjects: Generating gateway with %d listeners" , len (listeners ))
197- gatewayObjects , err := generateManifests (listeners , []route {})
196+ secretObjects , err := generateSecrets (secrets )
198197 if err != nil {
199198 return ScaleObjects {}, err
200199 }
201- log . Printf ( "GenerateScaleListenerObjects: Generated %d gateway objects" , len ( gatewayObjects ) )
200+ result . BaseObjects = append ( result . BaseObjects , secretObjects ... )
202201
203- // Generate secrets if TLS is enabled
204- secretObjects , err := generateSecrets (secrets )
202+ backendObjects , err := generateBackendAppObjects (backends )
205203 if err != nil {
206204 return ScaleObjects {}, err
207205 }
208- log . Printf ( "GenerateScaleListenerObjects: Generated %d secret objects" , len ( secretObjects ) )
206+ result . GatewayAndServiceObjects = append ( result . GatewayAndServiceObjects , backendObjects ... )
209207
210- // Generate backend app objects (services, deployments)
211- log .Printf ("GenerateScaleListenerObjects: Generating backend objects for %d backends" , len (backends ))
212- backendObjects , err := generateBackendAppObjects (backends )
208+ gatewayObjects , err := generateManifests (listeners , nil )
213209 if err != nil {
214210 return ScaleObjects {}, err
215211 }
216- log .Printf ("GenerateScaleListenerObjects: Generated %d backend objects" , len (backendObjects ))
217-
218- // BaseObjects includes services, secrets, and gateway with all listeners
219- result .BaseObjects = append (result .BaseObjects , secretObjects ... )
220- result .BaseObjects = append (result .BaseObjects , backendObjects ... )
221- result .BaseObjects = append (result .BaseObjects , gatewayObjects ... )
222- log .Printf ("GenerateScaleListenerObjects: BaseObjects contains %d total objects" , len (result .BaseObjects ))
212+ result .GatewayAndServiceObjects = append (result .GatewayAndServiceObjects , gatewayObjects ... )
223213
224- // Each iteration creates one route
225- for i := range numListeners {
226- log .Printf ("GenerateScaleListenerObjects: Generating route %d: %s" , i , routes [i ].Name )
227- objects , err := generateManifests ([]listener {}, []route {routes [i ]})
228- if err != nil {
229- return ScaleObjects {}, err
230- }
231-
232- result .ScaleIterationGroups = append (result .ScaleIterationGroups , objects )
233- log .Printf ("GenerateScaleListenerObjects: Route %d generated %d objects" , i , len (objects ))
214+ routeObjects , err := generateManifests (nil , routes )
215+ if err != nil {
216+ return ScaleObjects {}, err
234217 }
218+ result .ScaleIterationGroups = append (result .ScaleIterationGroups , routeObjects )
235219
236- log .Printf ("GenerateScaleListenerObjects: Completed. BaseObjects: %d, ScaleIterationGroups: %d" , len (result .BaseObjects ), len (result .ScaleIterationGroups ))
237220 return result , nil
238221}
239222
240223func generateSecrets (secrets []string ) ([]client.Object , error ) {
241- log .Printf ("generateSecrets: Generating %d secrets: %v" , len (secrets ), secrets )
242224 objects := make ([]client.Object , 0 , len (secrets ))
243225
244- for i , secret := range secrets {
226+ for _ , secret := range secrets {
245227 var buf bytes.Buffer
246228
247- log .Printf ("generateSecrets: Executing secret template for secret %d: %s" , i , secret )
248229 if err := secretTmpl .Execute (& buf , secret ); err != nil {
249230 return nil , err
250231 }
@@ -254,18 +235,14 @@ func generateSecrets(secrets []string) ([]client.Object, error) {
254235 return nil , err
255236 }
256237
257- log .Printf ("generateSecrets: Secret %s generated %d objects" , secret , len (objs ))
258238 objects = append (objects , objs ... )
259239 }
260240
261- log .Printf ("generateSecrets: Total secret objects generated: %d" , len (objects ))
262241 return objects , nil
263242}
264243
265244// GenerateScaleHTTPRouteObjects generates objects for a given number of routes for the scale test.
266- // Modified to create all services and gateways first, then scale routes.
267245func GenerateScaleHTTPRouteObjects (numRoutes int ) (ScaleObjects , error ) {
268- log .Printf ("GenerateScaleHTTPRouteObjects: Starting generation for %d routes" , numRoutes )
269246 var result ScaleObjects
270247
271248 l := listener {
@@ -275,27 +252,21 @@ func GenerateScaleHTTPRouteObjects(numRoutes int) (ScaleObjects, error) {
275252
276253 backendName := "backend"
277254
278- // Generate the Gateway once and add it to BaseObjects
279- log .Printf ("GenerateScaleHTTPRouteObjects: Generating gateway with single listener" )
280- gatewayObjects , err := generateManifests ([]listener {l }, []route {})
255+ // Generate backend objects and add to GatewayAndServiceObjects
256+ backendObjects , err := generateBackendAppObjects ([]string {backendName })
281257 if err != nil {
282258 return ScaleObjects {}, err
283259 }
284- log . Printf ( "GenerateScaleHTTPRouteObjects: Generated %d gateway objects" , len ( gatewayObjects ) )
260+ result . GatewayAndServiceObjects = append ( result . GatewayAndServiceObjects , backendObjects ... )
285261
286- // Generate backend app objects (services, deployments)
287- log .Printf ("GenerateScaleHTTPRouteObjects: Generating backend objects for backend: %s" , backendName )
288- backendObjects , err := generateBackendAppObjects ([]string {backendName })
262+ // Generate Gateway object and add to GatewayAndServiceObjects
263+ gatewayObjects , err := generateManifests ([]listener {l }, nil )
289264 if err != nil {
290265 return ScaleObjects {}, err
291266 }
292- log .Printf ("GenerateScaleHTTPRouteObjects: Generated %d backend objects" , len (backendObjects ))
293-
294- // BaseObjects now includes services and gateway
295- result .BaseObjects = append (backendObjects , gatewayObjects ... )
296- log .Printf ("GenerateScaleHTTPRouteObjects: BaseObjects contains %d total objects" , len (result .BaseObjects ))
267+ result .GatewayAndServiceObjects = append (result .GatewayAndServiceObjects , gatewayObjects ... )
297268
298- // Each iteration only creates one route
269+ // Generate HTTPRoute objects for each iteration
299270 for i := range numRoutes {
300271 r := route {
301272 Name : fmt .Sprintf ("route-%d" , i ),
@@ -304,59 +275,46 @@ func GenerateScaleHTTPRouteObjects(numRoutes int) (ScaleObjects, error) {
304275 BackendName : backendName ,
305276 }
306277
307- log .Printf ("GenerateScaleHTTPRouteObjects: Generating route %d: %s with hostname %s" , i , r .Name , r .HostnamePrefix )
308- // Generate only the route (no gateway, no listeners)
309- objects , err := generateManifests ([]listener {}, []route {r })
278+ // Generate only the HTTPRoute (no listeners/gateway)
279+ routeObjects , err := generateManifests (nil , []route {r })
310280 if err != nil {
311281 return ScaleObjects {}, err
312282 }
313283
314- result .ScaleIterationGroups = append (result .ScaleIterationGroups , objects )
315- log .Printf ("GenerateScaleHTTPRouteObjects: Route %d generated %d objects" , i , len (objects ))
284+ result .ScaleIterationGroups = append (result .ScaleIterationGroups , routeObjects )
316285 }
317286
318- log .Printf ("GenerateScaleHTTPRouteObjects: Completed. BaseObjects: %d, ScaleIterationGroups: %d" , len (result .BaseObjects ), len (result .ScaleIterationGroups ))
319287 return result , nil
320288}
321289
322290func generateManifests (listeners []listener , routes []route ) ([]client.Object , error ) {
323- log .Printf ("generateManifests: Called with %d listeners, %d routes" , len (listeners ), len (routes ))
324291 var buf bytes.Buffer
325292
326293 if len (listeners ) > 0 {
327- log .Printf ("generateManifests: Executing gateway template with %d listeners" , len (listeners ))
328294 if err := gwTmpl .Execute (& buf , listeners ); err != nil {
329295 return nil , err
330296 }
331297 }
332298
333- for i , r := range routes {
299+ for _ , r := range routes {
334300 if buf .Len () > 0 {
335301 buf .WriteString ("\n ---\n " )
336302 }
337303
338- log .Printf ("generateManifests: Executing route template for route %d: %s" , i , r .Name )
339304 if err := hrTmpl .Execute (& buf , r ); err != nil {
340305 return nil , err
341306 }
342307 }
343308
344- objects , err := decodeObjects (& buf )
345- if err != nil {
346- return nil , err
347- }
348- log .Printf ("generateManifests: Decoded %d objects from templates" , len (objects ))
349- return objects , nil
309+ return decodeObjects (& buf )
350310}
351311
352312func generateBackendAppObjects (backends []string ) ([]client.Object , error ) {
353- log .Printf ("generateBackendAppObjects: Generating objects for %d backends: %v" , len (backends ), backends )
354313 objects := make ([]client.Object , 0 , 2 * len (backends ))
355314
356- for i , backend := range backends {
315+ for _ , backend := range backends {
357316 var buf bytes.Buffer
358317
359- log .Printf ("generateBackendAppObjects: Executing app template for backend %d: %s" , i , backend )
360318 if err := appTmpl .Execute (& buf , backend ); err != nil {
361319 return nil , err
362320 }
@@ -366,10 +324,8 @@ func generateBackendAppObjects(backends []string) ([]client.Object, error) {
366324 return nil , err
367325 }
368326
369- log .Printf ("generateBackendAppObjects: Backend %s generated %d objects" , backend , len (objs ))
370327 objects = append (objects , objs ... )
371328 }
372329
373- log .Printf ("generateBackendAppObjects: Total objects generated: %d" , len (objects ))
374330 return objects , nil
375331}
0 commit comments