Skip to content

Promote RollingUpdateFix Feature Gate from Beta to Stable #4589

@markmandel

Description

@markmandel

What does this feature do?

RollingUpdateFix corrects the fleet controller's rolling update logic. Without it, cleanupUnhealthyReplicas and rollingUpdateRestFixedOnReady calculate scale-down capacity using fleet.Spec.Replicas as the baseline, which can prematurely scale down old GameServerSets. With it enabled (the fixed path, implemented in pkg/fleets/controller_rollingupdatefix.go):

  • Scale-down capacity is calculated from Status.ReadyReplicas rather than Spec.Replicas
  • All replica states (Allocated, Reserved, Shutdown) are considered when determining how many can safely be removed
  • Old GameServerSets are only scaled down once new ones are healthy and ready (Spec.Replicas == Status.Replicas)

Current state: Beta (enabled by default since 1.50.0)

Acceptance Criteria / Tasks

  • Manual audit: Before starting, grep the repo for FeatureRollingUpdateFix and RollingUpdateFix to confirm all usage sites — the list below may not be exhaustive
  • pkg/fleets/controller.go — Remove the FeatureRollingUpdateFix gate at line 598; delete the old (pre-fix) code paths entirely; route unconditionally to the fix implementations
  • pkg/fleets/controller_rollingupdatefix.go — Rename functions (drop the RollingUpdateFix suffix) and inline/move them into controller.go; delete this file once done
  • pkg/fleets/controller_test.goDelete the tests that validate old (pre-fix) behavior and skip when the feature is enabled (lines ~126, ~205, ~1163). Remove the disabled-feature test case (~line 1721) and de-gate the enabled-feature cases (~lines 1763, 1778, 1793)
  • test/e2e/fleet_test.go — Simplify the conditional assertion (~line 1889) to always expect 2 GameServerSets (the "feature enabled" branch)
  • pkg/util/runtime/features.go — Move FeatureRollingUpdateFix from // Beta features to // Stable features (keep in featureDefaults as true so old gate strings still parse)
  • install/helm/agones/defaultfeaturegates.yaml — Move RollingUpdateFix from Beta to Stable section
  • build/Makefile — Remove RollingUpdateFix from BETA_FEATURE_GATES
  • cloudbuild.yaml — Remove RollingUpdateFix=false from the inverted e2e-runner config
  • site/content/en/docs/Guides/feature-stages.md — Move row from Beta table to Stable table
  • test/upgrade/versionMap.yaml — Add entry showing RollingUpdateFix moves to stable gates in this release

Verification

  • make lint test-go passes; no tests skip on RollingUpdateFix
  • test/e2e/fleet_test.go rolling-update test no longer has a conditional assertion path
  • Setting RollingUpdateFix=true or RollingUpdateFix=false in the feature gate string must not cause a parse error (covered by keeping the const in featureDefaults)

Metadata

Metadata

Assignees

Labels

good first issueThese are great first issues. If you are looking for a place to start, start here!help wantedWe would love help on these issues. Please come help us!kind/cleanupRefactoring code, fixing up documentation, etc

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions