Skip to content

Commit

Permalink
chore(v2alpha2): change nodes status
Browse files Browse the repository at this point in the history
Signed-off-by: Rory Z <[email protected]>
  • Loading branch information
Rory-Z committed Jun 15, 2023
1 parent 4334b79 commit 1d0a809
Show file tree
Hide file tree
Showing 11 changed files with 152 additions and 73 deletions.
30 changes: 20 additions & 10 deletions apis/apps/v2alpha2/status.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,6 @@ import (
type EMQXStatus struct {
// CurrentImage, indicates the image of the EMQX used to generate Pods in the
CurrentImage string `json:"currentImage,omitempty"`
// EMQX nodes info
EMQXNodes []EMQXNode `json:"emqxNodes,omitempty"`
// Represents the latest available observations of a EMQX Custom Resource current state.
Conditions []metav1.Condition `json:"conditions,omitempty"`

Expand All @@ -37,10 +35,12 @@ type EMQXStatus struct {
}

type EMQXNodesStatus struct {
Replicas int32 `json:"replicas,omitempty"`
ReadyReplicas int32 `json:"readyReplicas,omitempty"`
CurrentVersion int32 `json:"currentVersion,omitempty"`
CollisionCount *int32 `json:"collisionCount,omitempty"`
// EMQX nodes info
Nodes []EMQXNode `json:"nodes,omitempty"`
Replicas int32 `json:"replicas,omitempty"`
ReadyReplicas int32 `json:"readyReplicas,omitempty"`
CurrentVersion int32 `json:"currentVersion,omitempty"`
CollisionCount *int32 `json:"collisionCount,omitempty"`
}

type EMQXNode struct {
Expand All @@ -58,8 +58,6 @@ type EMQXNode struct {
Edition string `json:"edition,omitempty"`
// EMQX node uptime, milliseconds
Uptime int64 `json:"uptime,omitempty"`
// MQTT connection count
Connections int64 `json:"connections,omitempty"`
}

const (
Expand All @@ -76,11 +74,23 @@ const (
PodOnServing corev1.PodConditionType = "apps.emqx.io/on-serving"
)

func (s *EMQXStatus) SetEMQXNodes(nodes []EMQXNode) {
func (s *EMQXStatus) SetNodes(nodes []EMQXNode) {
var coreNodes, replNodes []EMQXNode = nil, nil

sort.Slice(nodes, func(i, j int) bool {
return nodes[i].Uptime < nodes[j].Uptime
})
s.EMQXNodes = nodes

for _, node := range nodes {
if node.Role == "core" {
coreNodes = append(coreNodes, node)
}
if node.Role == "replicant" {
replNodes = append(replNodes, node)
}
}
s.CoreNodeStatus.Nodes = coreNodes
s.ReplicantNodeStatus.Nodes = replNodes
}

func (s *EMQXStatus) SetCondition(c metav1.Condition) {
Expand Down
33 changes: 30 additions & 3 deletions apis/apps/v2alpha2/status_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,30 +24,57 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

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

nodes := []EMQXNode{
{
Node: "emqx-0",
Role: "core",
Uptime: 10000,
},
{
Node: "emqx-1",
Role: "core",
Uptime: 10,
},
{
Node: "emqx-2",
Role: "replicant",
Uptime: 10000,
},
{
Node: "emqx-3",
Role: "replicant",
Uptime: 10,
},
}
status.SetEMQXNodes(nodes)
status.SetNodes(nodes)

assert.Equal(t, []EMQXNode{
{
Node: "emqx-1",
Role: "core",
Uptime: 10,
},
{
Node: "emqx-0",
Role: "core",
Uptime: 10000,
},
}, status.CoreNodeStatus.Nodes)
assert.Equal(t, []EMQXNode{
{
Node: "emqx-3",
Role: "replicant",
Uptime: 10,
},
{
Node: "emqx-2",
Role: "replicant",
Uptime: 10000,
},
}, status.EMQXNodes)
}, status.ReplicantNodeStatus.Nodes)
}

func TestSetCondition(t *testing.T) {
Expand Down
10 changes: 5 additions & 5 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.

63 changes: 40 additions & 23 deletions config/crd/bases/apps.emqx.io_emqxes.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12906,6 +12906,26 @@ spec:
currentVersion:
format: int32
type: integer
nodes:
items:
properties:
edition:
type: string
node:
type: string
node_status:
type: string
otp_release:
type: string
role:
type: string
uptime:
format: int64
type: integer
version:
type: string
type: object
type: array
readyReplicas:
format: int32
type: integer
Expand All @@ -12915,29 +12935,6 @@ spec:
type: object
currentImage:
type: string
emqxNodes:
items:
properties:
connections:
format: int64
type: integer
edition:
type: string
node:
type: string
node_status:
type: string
otp_release:
type: string
role:
type: string
uptime:
format: int64
type: integer
version:
type: string
type: object
type: array
replicantNodeStatus:
properties:
collisionCount:
Expand All @@ -12946,6 +12943,26 @@ spec:
currentVersion:
format: int32
type: integer
nodes:
items:
properties:
edition:
type: string
node:
type: string
node_status:
type: string
otp_release:
type: string
role:
type: string
uptime:
format: int64
type: integer
version:
type: string
type: object
type: array
readyReplicas:
format: int32
type: integer
Expand Down
2 changes: 1 addition & 1 deletion controllers/apps/v2alpha2/status_machine.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ func (s *emqxStatusMachine) UpdateNodeCount(emqxNodes []appsv2alpha2.EMQXNode) {
s.emqx.Status.ReplicantNodeStatus.ReadyReplicas = int32(0)

if emqxNodes != nil {
s.emqx.Status.SetEMQXNodes(emqxNodes)
s.emqx.Status.SetNodes(emqxNodes)

for _, node := range emqxNodes {
if node.NodeStatus == "running" {
Expand Down
6 changes: 5 additions & 1 deletion controllers/apps/v2alpha2/update_pod_conditions.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,11 @@ func (u *updatePodConditions) reconcile(ctx context.Context, instance *appsv2alp
}

func (u *updatePodConditions) checkInCluster(instance *appsv2alpha2.EMQX, r innerReq.RequesterInterface, pod *corev1.Pod) corev1.ConditionStatus {
for _, node := range instance.Status.EMQXNodes {
nodes := instance.Status.CoreNodeStatus.Nodes
if isExistReplicant(instance) {
nodes = instance.Status.ReplicantNodeStatus.Nodes
}
for _, node := range nodes {
if node.Node == "emqx@"+pod.Status.PodIP {
if node.Edition == "enterprise" {
v, _ := semver.NewVersion(node.Version)
Expand Down
5 changes: 5 additions & 0 deletions controllers/apps/v2alpha2/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"sort"

"github.com/davecgh/go-spew/spew"
appsv2alpha2 "github.com/emqx/emqx-operator/apis/apps/v2alpha2"
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
Expand All @@ -18,6 +19,10 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client"
)

func isExistReplicant(instance *appsv2alpha2.EMQX) bool {
return instance.Spec.ReplicantTemplate.Spec.Replicas != nil && *instance.Spec.ReplicantTemplate.Spec.Replicas > 0
}

func getPodMap(ctx context.Context, client client.Client, opts ...client.ListOption) map[types.UID][]*corev1.Pod {
podList := &corev1.PodList{}
_ = client.List(ctx, podList, opts...)
Expand Down
63 changes: 40 additions & 23 deletions deploy/charts/emqx-operator/templates/crd.emqxes.apps.emqx.io.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12918,6 +12918,26 @@ spec:
currentVersion:
format: int32
type: integer
nodes:
items:
properties:
edition:
type: string
node:
type: string
node_status:
type: string
otp_release:
type: string
role:
type: string
uptime:
format: int64
type: integer
version:
type: string
type: object
type: array
readyReplicas:
format: int32
type: integer
Expand All @@ -12927,29 +12947,6 @@ spec:
type: object
currentImage:
type: string
emqxNodes:
items:
properties:
connections:
format: int64
type: integer
edition:
type: string
node:
type: string
node_status:
type: string
otp_release:
type: string
role:
type: string
uptime:
format: int64
type: integer
version:
type: string
type: object
type: array
replicantNodeStatus:
properties:
collisionCount:
Expand All @@ -12958,6 +12955,26 @@ spec:
currentVersion:
format: int32
type: integer
nodes:
items:
properties:
edition:
type: string
node:
type: string
node_status:
type: string
otp_release:
type: string
role:
type: string
uptime:
format: int64
type: integer
version:
type: string
type: object
type: array
readyReplicas:
format: int32
type: integer
Expand Down
5 changes: 2 additions & 3 deletions docs/en_US/reference/v2alpha2-reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ EMQXList contains a list of EMQX


_Appears in:_
- [EMQXStatus](#emqxstatus)
- [EMQXNodesStatus](#emqxnodesstatus)

| Field | Description |
| --- | --- |
Expand All @@ -146,7 +146,6 @@ _Appears in:_
| `role` _string_ | EMQX cluster node role, enum: "core" "replicant" |
| `edition` _string_ | EMQX cluster node edition, enum: "Opensource" "Enterprise" |
| `uptime` _integer_ | EMQX node uptime, milliseconds |
| `connections` _integer_ | MQTT connection count |


#### EMQXNodesStatus
Expand All @@ -160,6 +159,7 @@ _Appears in:_

| Field | Description |
| --- | --- |
| `nodes` _[EMQXNode](#emqxnode) array_ | EMQX nodes info |
| `replicas` _integer_ | |
| `readyReplicas` _integer_ | |
| `currentVersion` _integer_ | |
Expand Down Expand Up @@ -251,7 +251,6 @@ _Appears in:_
| Field | Description |
| --- | --- |
| `currentImage` _string_ | CurrentImage, indicates the image of the EMQX used to generate Pods in the |
| `emqxNodes` _[EMQXNode](#emqxnode) array_ | EMQX nodes info |
| `conditions` _[Condition](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#condition-v1-meta) array_ | Represents the latest available observations of a EMQX Custom Resource current state. |
| `coreNodeStatus` _[EMQXNodesStatus](#emqxnodesstatus)_ | |
| `replicantNodeStatus` _[EMQXNodesStatus](#emqxnodesstatus)_ | |
Expand Down
Loading

0 comments on commit 1d0a809

Please sign in to comment.