diff --git a/apis/v1alpha1/gameserverset_types.go b/apis/v1alpha1/gameserverset_types.go index d66625f..bfd83eb 100644 --- a/apis/v1alpha1/gameserverset_types.go +++ b/apis/v1alpha1/gameserverset_types.go @@ -128,6 +128,9 @@ type ScaleStrategy struct { // GameServerSetStatus defines the observed state of GameServerSet type GameServerSetStatus struct { + // The generation observed by the controller. + // +optional + ObservedGeneration int64 `json:"observedGeneration,omitempty"` // replicas from advancedStatefulSet Replicas int32 `json:"replicas"` ReadyReplicas int32 `json:"readyReplicas"` diff --git a/config/crd/bases/game.kruise.io_gameserversets.yaml b/config/crd/bases/game.kruise.io_gameserversets.yaml index 77a5a30..1035f5f 100644 --- a/config/crd/bases/game.kruise.io_gameserversets.yaml +++ b/config/crd/bases/game.kruise.io_gameserversets.yaml @@ -638,6 +638,10 @@ spec: maintainingReplicas: format: int32 type: integer + observedGeneration: + description: The generation observed by the controller. + format: int64 + type: integer readyReplicas: format: int32 type: integer diff --git a/pkg/controllers/gameserverset/gameserverset_manager.go b/pkg/controllers/gameserverset/gameserverset_manager.go index 6cbc219..70ad7e9 100644 --- a/pkg/controllers/gameserverset/gameserverset_manager.go +++ b/pkg/controllers/gameserverset/gameserverset_manager.go @@ -18,11 +18,15 @@ package gameserverset import ( "context" + "sort" + "strconv" + "sync" + "time" + kruiseV1alpha1 "github.com/openkruise/kruise-api/apps/v1alpha1" kruiseV1beta1 "github.com/openkruise/kruise-api/apps/v1beta1" - gameKruiseV1alpha1 "github.com/openkruise/kruise-game/apis/v1alpha1" - "github.com/openkruise/kruise-game/pkg/util" corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/equality" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" @@ -30,10 +34,9 @@ import ( "k8s.io/klog/v2" "k8s.io/utils/pointer" "sigs.k8s.io/controller-runtime/pkg/client" - "sort" - "strconv" - "sync" - "time" + + gameKruiseV1alpha1 "github.com/openkruise/kruise-game/apis/v1alpha1" + "github.com/openkruise/kruise-game/pkg/util" ) type Control interface { @@ -364,8 +367,11 @@ func (manager *GameServerSetManager) SyncStatus() error { MaintainingReplicas: pointer.Int32Ptr(int32(maintainingGs)), WaitToBeDeletedReplicas: pointer.Int32Ptr(int32(waitToBeDeletedGs)), LabelSelector: asts.Status.LabelSelector, + ObservedGeneration: gss.GetGeneration(), + } + if equality.Semantic.DeepEqual(gss.Status, status) { + return nil } - patchStatus := map[string]interface{}{"status": status} jsonPatch, err := json.Marshal(patchStatus) if err != nil {