Skip to content

Commit

Permalink
chore(v2alpha2): change replicant nodes status is pointer
Browse files Browse the repository at this point in the history
  • Loading branch information
Rory-Z committed Jun 20, 2023
1 parent c216ab8 commit a915f89
Show file tree
Hide file tree
Showing 14 changed files with 153 additions and 130 deletions.
14 changes: 8 additions & 6 deletions apis/apps/v2alpha2/status.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ type EMQXStatus struct {
// Represents the latest available observations of a EMQX Custom Resource current state.
Conditions []metav1.Condition `json:"conditions,omitempty"`

CoreNodeStatus EMQXNodesStatus `json:"coreNodeStatus,omitempty"`
ReplicantNodeStatus EMQXNodesStatus `json:"replicantNodeStatus,omitempty"`
CoreNodesStatus EMQXNodesStatus `json:"CoreNodesStatus,omitempty"`
ReplicantNodesStatus *EMQXNodesStatus `json:"ReplicantNodesStatus,omitempty"`
}

type EMQXNodesStatus struct {
Expand Down Expand Up @@ -89,10 +89,12 @@ func (s *EMQXStatus) SetNodes(nodes []EMQXNode) {
replNodes = append(replNodes, node)
}
}
s.CoreNodeStatus.Nodes = coreNodes
s.CoreNodeStatus.ReadyReplicas = int32(len(coreNodes))
s.ReplicantNodeStatus.Nodes = replNodes
s.ReplicantNodeStatus.ReadyReplicas = int32(len(replNodes))
s.CoreNodesStatus.Nodes = coreNodes
s.CoreNodesStatus.ReadyReplicas = int32(len(coreNodes))
if s.ReplicantNodesStatus != nil {
s.ReplicantNodesStatus.Nodes = replNodes
s.ReplicantNodesStatus.ReadyReplicas = int32(len(replNodes))
}
}

func (s *EMQXStatus) SetCondition(c metav1.Condition) {
Expand Down
9 changes: 5 additions & 4 deletions apis/apps/v2alpha2/status_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import (

func TestSetNodes(t *testing.T) {
status := &EMQXStatus{}
status.ReplicantNodesStatus = &EMQXNodesStatus{}

nodes := []EMQXNode{
{
Expand All @@ -51,7 +52,7 @@ func TestSetNodes(t *testing.T) {
}
status.SetNodes(nodes)

assert.Equal(t, int32(2), status.CoreNodeStatus.ReadyReplicas)
assert.Equal(t, int32(2), status.CoreNodesStatus.ReadyReplicas)
assert.Equal(t, []EMQXNode{
{
Node: "emqx-1",
Expand All @@ -63,9 +64,9 @@ func TestSetNodes(t *testing.T) {
Role: "core",
Uptime: 10000,
},
}, status.CoreNodeStatus.Nodes)
}, status.CoreNodesStatus.Nodes)

assert.Equal(t, int32(2), status.ReplicantNodeStatus.ReadyReplicas)
assert.Equal(t, int32(2), status.ReplicantNodesStatus.ReadyReplicas)
assert.Equal(t, []EMQXNode{
{
Node: "emqx-3",
Expand All @@ -77,7 +78,7 @@ func TestSetNodes(t *testing.T) {
Role: "replicant",
Uptime: 10000,
},
}, status.ReplicantNodeStatus.Nodes)
}, status.ReplicantNodesStatus.Nodes)
}

func TestSetCondition(t *testing.T) {
Expand Down
8 changes: 6 additions & 2 deletions apis/apps/v2alpha2/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

80 changes: 40 additions & 40 deletions config/crd/bases/apps.emqx.io_emqxes.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12862,43 +12862,7 @@ spec:
type: object
status:
properties:
conditions:
items:
properties:
lastTransitionTime:
format: date-time
type: string
message:
maxLength: 32768
type: string
observedGeneration:
format: int64
minimum: 0
type: integer
reason:
maxLength: 1024
minLength: 1
pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
type: string
status:
enum:
- "True"
- "False"
- Unknown
type: string
type:
maxLength: 316
pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
type: string
required:
- lastTransitionTime
- message
- reason
- status
- type
type: object
type: array
coreNodeStatus:
CoreNodesStatus:
properties:
collisionCount:
format: int32
Expand Down Expand Up @@ -12932,9 +12896,7 @@ spec:
format: int32
type: integer
type: object
currentImage:
type: string
replicantNodeStatus:
ReplicantNodesStatus:
properties:
collisionCount:
format: int32
Expand Down Expand Up @@ -12968,6 +12930,44 @@ spec:
format: int32
type: integer
type: object
conditions:
items:
properties:
lastTransitionTime:
format: date-time
type: string
message:
maxLength: 32768
type: string
observedGeneration:
format: int64
minimum: 0
type: integer
reason:
maxLength: 1024
minLength: 1
pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
type: string
status:
enum:
- "True"
- "False"
- Unknown
type: string
type:
maxLength: 316
pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
type: string
required:
- lastTransitionTime
- message
- reason
- status
- type
type: object
type: array
currentImage:
type: string
type: object
type: object
served: true
Expand Down
8 changes: 4 additions & 4 deletions controllers/apps/v2alpha2/add_emqx_repl.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ func (a *addRepl) reconcile(ctx context.Context, instance *appsv2alpha2.EMQX, _
}

rs, collisionCount := a.getNewReplicaSet(ctx, instance)
if collisionCount != instance.Status.ReplicantNodeStatus.CollisionCount {
instance.Status.ReplicantNodeStatus.CollisionCount = collisionCount
if collisionCount != instance.Status.ReplicantNodesStatus.CollisionCount {
instance.Status.ReplicantNodesStatus.CollisionCount = collisionCount
_ = a.Client.Status().Update(ctx, instance)
}

Expand Down Expand Up @@ -78,7 +78,7 @@ func (a *addRepl) getNewReplicaSet(ctx context.Context, instance *appsv2alpha2.E
rs.ObjectMeta = *r.ObjectMeta.DeepCopy()
rs.Spec.Template.ObjectMeta = *r.Spec.Template.ObjectMeta.DeepCopy()
rs.Spec.Selector = r.Spec.Selector.DeepCopy()
return rs, instance.Status.ReplicantNodeStatus.CollisionCount
return rs, instance.Status.ReplicantNodesStatus.CollisionCount
}
}

Expand All @@ -90,7 +90,7 @@ func (a *addRepl) generateReplicaSet(instance *appsv2alpha2.EMQX) (*appsv1.Repli
var rsName string
var podTemplateSpecHash string

collisionCount = instance.Status.ReplicantNodeStatus.CollisionCount
collisionCount = instance.Status.ReplicantNodesStatus.CollisionCount
if collisionCount == nil {
collisionCount = new(int32)
}
Expand Down
4 changes: 2 additions & 2 deletions controllers/apps/v2alpha2/add_listener.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,10 +53,10 @@ func (a *addListener) reconcile(ctx context.Context, instance *appsv2alpha2.EMQX
}

func (a *addListener) getPodList(ctx context.Context, instance *appsv2alpha2.EMQX) []corev1.Pod {
// labels := appsv2alpha2.AddLabel(instance.Spec.CoreTemplate.Labels, appsv1.ControllerRevisionHashLabelKey, instance.Status.CoreNodeStatus.CurrentVersion)
// labels := appsv2alpha2.AddLabel(instance.Spec.CoreTemplate.Labels, appsv1.ControllerRevisionHashLabelKey, instance.Status.CoreNodesStatus.CurrentVersion)
labels := instance.Spec.CoreTemplate.Labels
if isExistReplicant(instance) {
labels = appsv2alpha2.AddLabel(instance.Spec.ReplicantTemplate.Labels, appsv1.DefaultDeploymentUniqueLabelKey, instance.Status.ReplicantNodeStatus.CurrentVersion)
labels = appsv2alpha2.AddLabel(instance.Spec.ReplicantTemplate.Labels, appsv1.DefaultDeploymentUniqueLabelKey, instance.Status.ReplicantNodesStatus.CurrentVersion)
}

podList := &corev1.PodList{}
Expand Down
24 changes: 15 additions & 9 deletions controllers/apps/v2alpha2/status_machine.go
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ func (s *coreNodesProgressingStatus) nextStatus(existedSts *appsv1.StatefulSet,
return
}
// core nodes is ready
if s.emqxStatusMachine.emqx.Status.CoreNodeStatus.ReadyReplicas != s.emqxStatusMachine.emqx.Status.CoreNodeStatus.Replicas {
if s.emqxStatusMachine.emqx.Status.CoreNodesStatus.ReadyReplicas != s.emqxStatusMachine.emqx.Status.CoreNodesStatus.Replicas {
return
}
s.emqxStatusMachine.emqx.Status.SetCondition(metav1.Condition{
Expand Down Expand Up @@ -164,19 +164,23 @@ func (s *codeNodesReadyStatus) nextStatus(existedSts *appsv1.StatefulSet, existe
return
}

// core nodes is ready
if s.emqxStatusMachine.emqx.Status.CoreNodesStatus.ReadyReplicas != s.emqxStatusMachine.emqx.Status.CoreNodesStatus.Replicas {
return
}

if isExistReplicant(s.emqxStatusMachine.emqx) {
// replicaSet is ready
if existedRs.UID == "" ||
existedRs.Spec.Template.Spec.Containers[0].Image != s.emqxStatusMachine.emqx.Spec.Image ||
existedRs.Status.ReadyReplicas != existedRs.Status.Replicas {
return
}
}

// emqx nodes is ready
if s.emqxStatusMachine.emqx.Status.CoreNodeStatus.ReadyReplicas != s.emqxStatusMachine.emqx.Status.CoreNodeStatus.Replicas ||
s.emqxStatusMachine.emqx.Status.ReplicantNodeStatus.ReadyReplicas != s.emqxStatusMachine.emqx.Status.ReplicantNodeStatus.Replicas {
return
// replicant nodes is ready
if s.emqxStatusMachine.emqx.Status.ReplicantNodesStatus.ReadyReplicas != s.emqxStatusMachine.emqx.Status.ReplicantNodesStatus.Replicas {
return
}
}

s.emqxStatusMachine.emqx.Status.SetCondition(metav1.Condition{
Expand All @@ -198,11 +202,13 @@ func (s *readyStatus) nextStatus(existedSts *appsv1.StatefulSet, existedRs *apps
return
}

if s.emqxStatusMachine.emqx.Status.ReplicantNodeStatus.ReadyReplicas != s.emqxStatusMachine.emqx.Status.ReplicantNodeStatus.Replicas {
s.emqxStatusMachine.emqx.Status.RemoveCondition(appsv2alpha2.Ready)
if isExistReplicant(s.emqxStatusMachine.emqx) {
if s.emqxStatusMachine.emqx.Status.ReplicantNodesStatus.ReadyReplicas != s.emqxStatusMachine.emqx.Status.ReplicantNodesStatus.Replicas {
s.emqxStatusMachine.emqx.Status.RemoveCondition(appsv2alpha2.Ready)
}
}

if s.emqxStatusMachine.emqx.Status.CoreNodeStatus.ReadyReplicas != s.emqxStatusMachine.emqx.Status.CoreNodeStatus.Replicas {
if s.emqxStatusMachine.emqx.Status.CoreNodesStatus.ReadyReplicas != s.emqxStatusMachine.emqx.Status.CoreNodesStatus.Replicas {
s.emqxStatusMachine.emqx.Status.RemoveCondition(appsv2alpha2.Ready)
s.emqxStatusMachine.emqx.Status.RemoveCondition(appsv2alpha2.CodeNodesReady)
}
Expand Down
24 changes: 15 additions & 9 deletions controllers/apps/v2alpha2/status_machine_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
"k8s.io/utils/pointer"
)

func TestNextStatusForInit(t *testing.T) {
Expand Down Expand Up @@ -120,7 +121,7 @@ func TestNextStatusForCoreUpdate(t *testing.T) {
Status: metav1.ConditionTrue,
},
},
CoreNodeStatus: appsv2alpha2.EMQXNodesStatus{
CoreNodesStatus: appsv2alpha2.EMQXNodesStatus{
Replicas: 1,
},
},
Expand Down Expand Up @@ -149,7 +150,7 @@ func TestNextStatusForCoreUpdate(t *testing.T) {
assert.Equal(t, appsv2alpha2.CoreNodesProgressing, emqxStatusMachine.GetEMQX().Status.Conditions[0].Type)

// emqx core node is ready
emqx.Status.CoreNodeStatus.ReadyReplicas = 1
emqx.Status.CoreNodesStatus.ReadyReplicas = 1
emqxStatusMachine.NextStatus(existedSts, existedRs)
assert.Equal(t, emqxStatusMachine.codeNodesReady, emqxStatusMachine.currentStatus)
assert.Equal(t, appsv2alpha2.CodeNodesReady, emqxStatusMachine.GetEMQX().Status.Conditions[0].Type)
Expand Down Expand Up @@ -233,10 +234,10 @@ func TestNextStatusForCodeNodesReady(t *testing.T) {
Status: metav1.ConditionTrue,
},
},
CoreNodeStatus: appsv2alpha2.EMQXNodesStatus{
CoreNodesStatus: appsv2alpha2.EMQXNodesStatus{
Replicas: 1,
},
ReplicantNodeStatus: appsv2alpha2.EMQXNodesStatus{
ReplicantNodesStatus: &appsv2alpha2.EMQXNodesStatus{
Replicas: 1,
},
},
Expand Down Expand Up @@ -265,8 +266,8 @@ func TestNextStatusForCodeNodesReady(t *testing.T) {
assert.Equal(t, appsv2alpha2.CodeNodesReady, emqxStatusMachine.GetEMQX().Status.Conditions[0].Type)

// emqx nodes is ready
emqx.Status.CoreNodeStatus.ReadyReplicas = 1
emqx.Status.ReplicantNodeStatus.ReadyReplicas = 1
emqx.Status.CoreNodesStatus.ReadyReplicas = 1
emqx.Status.ReplicantNodesStatus.ReadyReplicas = 1
emqxStatusMachine.NextStatus(existedSts, existedRs)
assert.Equal(t, emqxStatusMachine.ready, emqxStatusMachine.currentStatus)
assert.Equal(t, appsv2alpha2.Ready, emqxStatusMachine.GetEMQX().Status.Conditions[0].Type)
Expand Down Expand Up @@ -308,6 +309,11 @@ func TestNextStatusForCoreReady(t *testing.T) {
emqx := &appsv2alpha2.EMQX{
Spec: appsv2alpha2.EMQXSpec{
Image: "emqx/emqx:latest",
ReplicantTemplate: &appsv2alpha2.EMQXReplicantTemplate{
Spec: appsv2alpha2.EMQXReplicantTemplateSpec{
Replicas: pointer.Int32Ptr(1),
},
},
},
Status: appsv2alpha2.EMQXStatus{
CurrentImage: "emqx/emqx:latest",
Expand All @@ -321,7 +327,7 @@ func TestNextStatusForCoreReady(t *testing.T) {
Status: metav1.ConditionTrue,
},
},
ReplicantNodeStatus: appsv2alpha2.EMQXNodesStatus{
ReplicantNodesStatus: &appsv2alpha2.EMQXNodesStatus{
Replicas: 1,
ReadyReplicas: 0,
},
Expand Down Expand Up @@ -358,11 +364,11 @@ func TestNextStatusForCoreReady(t *testing.T) {
Status: metav1.ConditionTrue,
},
},
CoreNodeStatus: appsv2alpha2.EMQXNodesStatus{
CoreNodesStatus: appsv2alpha2.EMQXNodesStatus{
Replicas: 1,
ReadyReplicas: 0,
},
ReplicantNodeStatus: appsv2alpha2.EMQXNodesStatus{
ReplicantNodesStatus: &appsv2alpha2.EMQXNodesStatus{
Replicas: 1,
ReadyReplicas: 0,
},
Expand Down
12 changes: 8 additions & 4 deletions controllers/apps/v2alpha2/update_emqx_status.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@ func (u *updateStatus) reconcile(ctx context.Context, instance *appsv2alpha2.EMQ
}

if isExistReplicant(instance) {
if instance.Status.ReplicantNodesStatus == nil {
instance.Status.ReplicantNodesStatus = &appsv2alpha2.EMQXNodesStatus{}
}

rsList := getReplicaSetList(ctx, u.Client,
client.InNamespace(instance.Namespace),
client.MatchingLabels(instance.Spec.ReplicantTemplate.Labels),
Expand All @@ -47,12 +51,12 @@ func (u *updateStatus) reconcile(ctx context.Context, instance *appsv2alpha2.EMQ
}

if existedSts.UID != "" {
instance.Status.CoreNodeStatus.CurrentVersion = existedSts.Status.CurrentRevision
instance.Status.CoreNodeStatus.Replicas = *instance.Spec.CoreTemplate.Spec.Replicas
instance.Status.CoreNodesStatus.CurrentVersion = existedSts.Status.CurrentRevision
instance.Status.CoreNodesStatus.Replicas = *instance.Spec.CoreTemplate.Spec.Replicas
}
if existedRs.UID != "" {
instance.Status.ReplicantNodeStatus.CurrentVersion = existedRs.Labels[appsv1.DefaultDeploymentUniqueLabelKey]
instance.Status.ReplicantNodeStatus.Replicas = *instance.Spec.ReplicantTemplate.Spec.Replicas
instance.Status.ReplicantNodesStatus.CurrentVersion = existedRs.Labels[appsv1.DefaultDeploymentUniqueLabelKey]
instance.Status.ReplicantNodesStatus.Replicas = *instance.Spec.ReplicantTemplate.Spec.Replicas
}
instance.Status.SetNodes(emqxNodes)

Expand Down
Loading

0 comments on commit a915f89

Please sign in to comment.