@@ -492,7 +492,10 @@ func (gwr *GatewayAPIRouter) getSessionAffinityRouteRules(canary *flaggerv1.Cana
492492 if canary .Status .SessionAffinityCookie == "" {
493493 canary .Status .SessionAffinityCookie = fmt .Sprintf ("%s=%s" , canary .Spec .Analysis .SessionAffinity .CookieName , randSeq ())
494494 }
495- primaryCookie := fmt .Sprintf ("%s=%s" , canary .Spec .Analysis .SessionAffinity .PrimaryCookieName , randSeq ())
495+ // if the status doesn't have the primary cookie, then generate a new primary cookie.
496+ if canary .Status .PrimarySessionAffinityCookie == "" {
497+ canary .Status .PrimarySessionAffinityCookie = fmt .Sprintf ("%s=%s" , canary .Spec .Analysis .SessionAffinity .PrimaryCookieName , randSeq ())
498+ }
496499
497500 // add response modifier to the canary backend ref in the rule that does weighted routing
498501 // to include the canary cookie.
@@ -503,7 +506,7 @@ func (gwr *GatewayAPIRouter) getSessionAffinityRouteRules(canary *flaggerv1.Cana
503506 Add : []v1.HTTPHeader {
504507 {
505508 Name : setCookieHeader ,
506- Value : canary .Spec .Analysis .SessionAffinity .BuildCookie (canary .Status .SessionAffinityCookie ),
509+ Value : canary .Spec .Analysis .SessionAffinity .BuildCookie (canary .Status .SessionAffinityCookie , canary . Spec . Analysis . SessionAffinity . GetMaxAge () ),
507510 },
508511 },
509512 },
@@ -522,10 +525,8 @@ func (gwr *GatewayAPIRouter) getSessionAffinityRouteRules(canary *flaggerv1.Cana
522525 ResponseHeaderModifier : & v1.HTTPHeaderFilter {
523526 Add : []v1.HTTPHeader {
524527 {
525- Name : setCookieHeader ,
526- Value : fmt .Sprintf ("%s; %s=%d" , primaryCookie , maxAgeAttr ,
527- int (interval .Seconds ()),
528- ),
528+ Name : setCookieHeader ,
529+ Value : canary .Spec .Analysis .SessionAffinity .BuildCookie (canary .Status .PrimarySessionAffinityCookie , int (interval .Seconds ())),
529530 },
530531 },
531532 },
@@ -566,7 +567,7 @@ func (gwr *GatewayAPIRouter) getSessionAffinityRouteRules(canary *flaggerv1.Cana
566567 // primary cookie and send them to the primary backend, only if a primary cookie name has
567568 // been specified.
568569 if canary .Spec .Analysis .SessionAffinity .PrimaryCookieName != "" {
569- cookieKeyAndVal = strings .Split (primaryCookie , "=" )
570+ cookieKeyAndVal = strings .Split (canary . Status . PrimarySessionAffinityCookie , "=" )
570571 regexMatchType = v1 .HeaderMatchRegularExpression
571572 primaryCookieMatch := v1.HTTPRouteMatch {
572573 Headers : []v1.HTTPHeaderMatch {
0 commit comments