Repository: radondb/radondb-mysql-kubernetes
Pull request #419 (2022-03-17 09:01:36)

chart: update chart version to v2.1.3.

### What type of PR is this?

/enhancement

### Which issue(s) this PR fixes?


### What this PR does?

Summary:

### Special notes for your reviewer?



Patch:
diff --git a/charts/mysql-operator/Chart.yaml b/charts/mysql-operator/Chart.yaml
index 68175d9..8b04a5c 100644
--- a/charts/mysql-operator/Chart.yaml
+++ b/charts/mysql-operator/Chart.yaml
@@ -15,10 +15,10 @@ type: application
 # This is the chart version. This version number should be incremented each time you make changes
 # to the chart and its templates, including the app version.
 # Versions are expected to follow Semantic Versioning (https://semver.org/)
-version: 0.1.1
+version: 2.1.3
 
 # This is the version number of the application being deployed. This version number should be
 # incremented each time you make changes to the application. Versions are not expected to
 # follow Semantic Versioning. They should reflect the version the application is using.
 # It is recommended to use it with quotes.
-appVersion: "latest"
+appVersion: "v2.1.3"
diff --git a/config/samples/mysql_v1alpha1_mysqlcluster_podAntiAffinity.yaml b/config/samples/mysql_v1alpha1_mysqlcluster_podAntiAffinity.yaml
deleted file mode 100644
index 107c3b1..0000000
--- a/config/samples/mysql_v1alpha1_mysqlcluster_podAntiAffinity.yaml
+++ /dev/null
@@ -1,97 +0,0 @@
-apiVersion: mysql.radondb.com/v1alpha1
-kind: MysqlCluster
-metadata:
-  name: sample
-spec:
-  replicas: 3
-  mysqlVersion: "5.7"
-  
-  # the backupSecretName specify the secret file name which store S3 information,
-  # if you want S3 backup or restore, please create backup_secret.yaml, uncomment below and fill secret name:
-  # backupSecretName: 
-  
-  # if you want create mysqlcluster from S3, uncomment and fill the directory in S3 bucket below:
-  # restoreFrom: 
-  
-  mysqlOpts:
-    rootPassword: "RadonDB@123"
-    rootHost: localhost
-    user: radondb_usr
-    password: RadonDB@123
-    database: radondb
-    initTokuDB: true
-
-    # A simple map between string and string.
-    # Such as:
-    #    mysqlConf:
-    #      expire_logs_days: "7"
-    mysqlConf: {}
-
-    resources:
-      requests:
-        cpu: 100m
-        memory: 256Mi
-      limits:
-        cpu: 500m
-        memory: 1Gi
-
-  xenonOpts:
-    image: radondb/xenon:1.1.5-alpha
-    admitDefeatHearbeatCount: 5
-    electionTimeout: 10000
-
-    resources:
-      requests:
-        cpu: 50m
-        memory: 128Mi
-      limits:
-        cpu: 100m
-        memory: 256Mi
-
-  metricsOpts:
-    enabled: false
-    image: prom/mysqld-exporter:v0.12.1
-
-    resources:
-      requests:
-        cpu: 10m
-        memory: 32Mi
-      limits:
-        cpu: 100m
-        memory: 128Mi
-
-  podPolicy:
-    imagePullPolicy: IfNotPresent
-    sidecarImage: radondb/mysql-sidecar:latest
-    busyboxImage: busybox:1.32
-
-    slowLogTail: false
-    auditLogTail: false
-
-    labels: {}
-    annotations: {}
-    affinity: 
-      podAntiAffinity:
-        requiredDuringSchedulingIgnoredDuringExecution:
-        - labelSelector:
-            matchExpressions:
-            - key: mysql.radondb.com/cluster
-              operator: In
-              values:
-              - sample 
-          topologyKey: "kubernetes.io/hostname"
-    priorityClassName: ""
-    tolerations: []
-    schedulerName: ""
-    # extraResources defines quotas for containers other than mysql or xenon.
-    extraResources:
-      requests:
-        cpu: 10m
-        memory: 32Mi
-
-  persistence:
-    enabled: true
-    accessModes:
-    - ReadWriteOnce
-    #storageClass: ""
-    size: 20Gi
diff --git a/docs/en-us/rebuild.md b/docs/en-us/rebuild.md
index 8b0b238..3a81361 100644
--- a/docs/en-us/rebuild.md
+++ b/docs/en-us/rebuild.md
@@ -11,11 +11,4 @@ Before you want to rebuild the pod, you need to manually check the security and
 **for example**
 ```shell
 ./hack/rebuild.sh sample-mysql-2
-```
-
-# Auto Rebuild
-if you want auto rebuild the pod, such as `sample-mysql-0`
-```shell
-kubectl label pods sample-mysql-0 rebuild=true 
-```
-It will rebuild the pod automatically.
\ No newline at end of file
+```
\ No newline at end of file
diff --git a/docs/troubleshoot/zh-cn/troubleshoot.md b/docs/troubleshoot/zh-cn/troubleshoot.md
deleted file mode 100644
index d220a85..0000000
--- a/docs/troubleshoot/zh-cn/troubleshoot.md
+++ /dev/null
@@ -1,1 +0,0 @@
-# troubleshoot
diff --git a/docs/zh-cn/deploy_radondb-mysql_operator_on_k8s.md b/docs/zh-cn/deploy_radondb-mysql_operator_on_k8s.md
index a23fc72..fc0880d 100644
--- a/docs/zh-cn/deploy_radondb-mysql_operator_on_k8s.md
+++ b/docs/zh-cn/deploy_radondb-mysql_operator_on_k8s.md
@@ -61,7 +61,7 @@ helm install demo radondb/mysql-operator
 
 ### 步骤 3: 部署 RadonDB MySQL 集群
 
-执行以下指令，以默认参数为 CRD `mysqlclusters.mysql.radondb.com` 创建一个实例，即创建 RadonDB MySQL 集群。您可参见[配置参数](./config_para.md)说明，自定义集群部署参数。
+执行以下指令，以默认参数为 CRD `mysqlclusters.mysql.radondb.com` 创建一个实例，即创建 RadonDB MySQL 集群。您可参见[配置参数](../config_para.md)说明，自定义集群部署参数。
 
 ```kubectl
 kubectl apply -f https://github.com/radondb/radondb-mysql-kubernetes/releases/latest/download/mysql_v1alpha1_mysqlcluster.yaml
@@ -123,28 +123,8 @@ service/sample-mysql             ClusterIP   None            <none>        3306/
 
 以下为客户端与数据库在同一 Kubernetes 集群内，访问 RadonDB MySQL 的方式。
 
-### `clusterIP` 方式
-
-RadonDB MySQL 的高可用读写 IP 指向 leader 服务的 `clusterIP`，高可用只读 IP 指向 follower 服务的 `clusterIP`。
-
-```shell
-mysql -h <clusterIP> -P <mysql_Port> -u <user_name> -p
-```
-
-以下示例用户名为 `radondb_usr`， leader 服务的 clusterIP 为 `10.10.128.136` ，连接示例如下：
-
-```shell
-mysql -h 10.10.128.136 -P 3306 -u radondb_usr -p
-```
-
 ### `service_name` 方式
 
-Kubernetes 集群的 Pod 之间支持通过 `service_name` 方式访问 RadonDB MySQL。
-
-> **说明**
-> 
-> `service_name` 方式不适用于从 Kubernetes 集群的物理机访问数据库 Pod。
-
 * 连接 leader 服务(RadonDB MySQL 主节点)
 
     ```shell
@@ -169,6 +149,20 @@ Kubernetes 集群的 Pod 之间支持通过 `service_name` 方式访问 RadonDB
     mysql -h sample-follower.default -u radondb_usr -p  
     ```
 
+### `clusterIP` 方式
+
+RadonDB MySQL 的高可用读写 IP 指向 leader 服务的 `clusterIP`，高可用只读 IP 指向 follower 服务的 `clusterIP`。
+
+```shell
+mysql -h <clusterIP> -P <mysql_Port> -u <user_name> -p
+```
+
+以下示例用户名为 `radondb_usr`， leader 服务的 clusterIP 为 `10.10.128.136` ，连接示例如下：
+
+```shell
+mysql -h 10.10.128.136 -P 3306 -u radondb_usr -p
+```
+
 ## 卸载
 
 ### 卸载 Operator
diff --git a/docs/zh-cn/deploy_radondb-mysql_operator_on_k8s_offline.md b/docs/zh-cn/deploy_radondb-mysql_operator_on_k8s_offline.md
deleted file mode 100644
index d7cd48b..0000000
--- a/docs/zh-cn/deploy_radondb-mysql_operator_on_k8s_offline.md
+++ /dev/null
@@ -1,192 +0,0 @@
-Contents
-
-- [在 Kubernetes 上离线部署 RadonDB MySQL 集群](#在-kubernetes-上离线部署-radondb-mysql-集群)
-  - [简介](#简介)
-  - [部署准备](#部署准备)
-  - [部署步骤](#部署步骤)
-    - [步骤 1: 准备部署资源](#步骤-1-准备部署资源)
-    - [步骤 2: 部署 Operator](#步骤-2-部署-operator)
-    - [步骤 3: 部署 RadonDB MySQL 集群](#步骤-3-部署-radondb-mysql-集群)
-  - [部署校验](#部署校验)
-    - [校验 RadonDB MySQL Operator](#校验-radondb-mysql-operator)
-    - [校验 RadonDB MySQL 集群](#校验-radondb-mysql-集群)
-  - [访问 RadonDB MySQL](#访问-radondb-mysql)
-    - [`service_name` 方式](#service_name-方式)
-    - [`clusterIP` 方式](#clusterip-方式)
-  - [卸载](#卸载)
-    - [卸载 Operator](#卸载-operator)
-    - [卸载 RadonDB MySQL](#卸载-radondb-mysql)
-    - [卸载自定义资源](#卸载自定义资源)
-
-# 在 Kubernetes 上离线部署 RadonDB MySQL 集群
-
-## 简介
-
-RadonDB MySQL 是一款基于 MySQL 的开源、高可用、云原生集群解决方案。支持一主多从高可用架构，并具备安全、自动备份、监控告警、自动扩容等全套管理功能。目前已经在生产环境中大规模的使用，包含**银行、保险、传统大企业**等。
-
-RadonDB MySQL 支持在 Kubernetes 上安装部署和管理，自动执行与运行 RadonDB MySQL 集群有关的任务。
-
-本教程主要演示如何在 Kubernetes 上离线部署 RadonDB MySQL 集群(Operator)。
-
-## 部署准备
-
-- 已准备可用 Kubernetes 集群。
-
-## 部署步骤
-
-### 步骤 1: 准备部署资源
-
-```shell
-## 下载离线部署资源
-wget https://github.com/radondb/radondb-mysql-kubernetes/releases/latest/download/radondb-mysql-resources.tar.gz
-
-## 解压
-tar -xvzf radondb-mysql-resources.tar.gz
-
-## 导入镜像（需要在每个运行数据库的 worker 上执行）
-ls radondb-mysql-resources/images/*.tar|awk '{print $NF}'|sed -r 's#(.*)#sudo docker load -i \1#' |bash
-```
-
-### 步骤 2: 部署 Operator
-
-以下指定 release 名为 `demo` , 创建一个名为 `demo-mysql-operator` 的 [Deployment](https://kubernetes.io/zh/docs/concepts/workloads/controllers/deployment/)。
-
-```
-helm install demo radondb-mysql-resources/operator-chart .
-```
-
-> **说明**
-> 
-> 在这一步骤中默认将同时创建集群所需的 [CRD](https://kubernetes.io/zh/docs/concepts/extend-kubernetes/api-extension/custom-resources/)。
-
-### 步骤 3: 部署 RadonDB MySQL 集群
-
-执行以下指令，以默认参数为 CRD `mysqlclusters.mysql.radondb.com` 创建一个实例，即创建 RadonDB MySQL 集群。您可参见[配置参数](./config_para.md)说明，自定义集群部署参数。
-
-```kubectl
-kubectl apply -f radondb-mysql-resources/cluster-sample/mysql_v1alpha1_mysqlcluster.yaml
-```
-
-## 部署校验
-
-### 校验 RadonDB MySQL Operator
-
-查看 `demo` 的 Deployment 和对应监控服务，回显如下信息则部署成功。
-
-```kubectl
-$ kubectl get deployment,svc
-NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
-demo-mysql-operator   1/1     1            1           7h50m
-
-
-NAME                             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
-service/mysql-operator-metrics   ClusterIP   10.96.142.22    <none>        8443/TCP   8h
-```
-
-### 校验 RadonDB MySQL 集群
-
-执行如下命令，将查看到如下 CRD。
-
-```kubectl
-$ kubectl get crd | grep mysql.radondb.com
-backups.mysql.radondb.com                             2021-11-02T07:00:01Z
-mysqlclusters.mysql.radondb.com                       2021-11-02T07:00:01Z
-mysqlusers.mysql.radondb.com                          2021-11-02T07:00:01Z
-```
-
-以默认部署为例，执行如下命令将查看到名为 `sample-mysql` 的三节点 RadonDB MySQL 集群及用于访问节点的服务。
-
-```kubectl
-$ kubectl get statefulset,svc
-NAME           READY   AGE
-sample-mysql   3/3     7h33m
-
-NAME                             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
-service/sample-follower          ClusterIP   10.96.131.84    <none>        3306/TCP   7h37m
-service/sample-leader            ClusterIP   10.96.111.214   <none>        3306/TCP   7h37m
-service/sample-mysql             ClusterIP   None            <none>        3306/TCP   7h37m
-```
-
-## 访问 RadonDB MySQL
-
-> **注意**
-> 
-> 准备可用于连接 MySQL 的客户端。
-
-- 当客户端的与数据库部署在不同 Kubernetes 集群，请参考 [Kubernetes 访问集群中的应用程序](https://kubernetes.io/zh/docs/tasks/access-application-cluster/)，配置端口转发、负载均衡等连接方式。
-  
-- 在 Kubernetes 集群内，支持使用 `service_name` 或者 `clusterIP` 方式，访问 RadonDB MySQL。
-  
-  > **说明**
-  > 
-  > RadonDB MySQL 提供 leader 服务和 follower 服务用于分别访问主从节点。leader 服务始终指向主节点（读写），follower 服务始终指向从节点（只读）。
-  
-
-以下为客户端与数据库在同一 Kubernetes 集群内，访问 RadonDB MySQL 的方式。
-
-### `service_name` 方式
-
-- 连接 leader 服务(RadonDB MySQL 主节点)
-  
-  ```shell
-  mysql -h <leader_service_name>.<namespace> -u <user_name> -p
-  ```
-  
-  用户名为 `radondb_usr`，release 名为 `sample`，RadonDB MySQL 命名空间为 `default` ，连接示例如下：
-  
-  ```shell
-  mysql -h sample-leader.default -u radondb_usr -p
-  ```
-  
-- 连接 follower 服务(RadonDB MySQL 从节点)
-  
-  ```shell
-  mysql -h <follower_service_name>.<namespace> -u <user_name> -p
-  ```
-  
-  用户名为 `radondb_usr`，release 名为 `sample`，RadonDB MySQL 命名空间为 `default` ，连接示例如下：
-  
-  ```shell
-  mysql -h sample-follower.default -u radondb_usr -p  
-  ```
-  
-
-### `clusterIP` 方式
-
-RadonDB MySQL 的高可用读写 IP 指向 leader 服务的 `clusterIP`，高可用只读 IP 指向 follower 服务的 `clusterIP`。
-
-```shell
-mysql -h <clusterIP> -P <mysql_Port> -u <user_name> -p
-```
-
-以下示例用户名为 `radondb_usr`， leader 服务的 clusterIP 为 `10.10.128.136` ，连接示例如下：
-
-```shell
-mysql -h 10.10.128.136 -P 3306 -u radondb_usr -p
-```
-
-## 卸载
-
-### 卸载 Operator
-
-卸载当前命名空间下 release 名为 `demo` 的 RadonDB MySQL Operator。
-
-```shell
-helm delete demo
-```
-
-### 卸载 RadonDB MySQL
-
-卸载 release 名为 `sample` RadonDB MySQL 集群。
-
-```kubectl
-kubectl delete mysqlclusters.mysql.radondb.com sample
-```
-
-### 卸载自定义资源
-
-```kubectl
-kubectl delete customresourcedefinitions.apiextensions.k8s.io mysqlclusters.mysql.radondb.com
-kubectl delete customresourcedefinitions.apiextensions.k8s.io mysqlusers.mysql.radondb.com
-kubectl delete customresourcedefinitions.apiextensions.k8s.io backups.mysql.radondb.com
-```
\ No newline at end of file
diff --git a/docs/zh-cn/deploy_radondb-mysql_operator_on_rancher.md b/docs/zh-cn/deploy_radondb-mysql_operator_on_rancher.md
index 6e91b54..0071387 100644
--- a/docs/zh-cn/deploy_radondb-mysql_operator_on_rancher.md
+++ b/docs/zh-cn/deploy_radondb-mysql_operator_on_rancher.md
@@ -108,7 +108,7 @@ RadonDB MySQL 支持在 Rancher 上安装部署和管理，自动执行与运行
 
 1. 下载 [RadonDB MySQL 集群配置样例](/config/samples/mysql_v1alpha1_mysqlcluster.yaml)，修改 YAML 文件中配置参数值。
 
-   详细配置参数说明，请参见[配置参数](./config_para.md)。
+   详细配置参数说明，请参见[配置参数](../config_para.md)。
 
 2. 在 Rancher 集群管理页面，点击右上角 YAML 导入图标。在弹出的窗口中，导入修改后的 YAML 文件。
 
@@ -155,48 +155,42 @@ RadonDB MySQL 支持在 Rancher 上安装部署和管理，自动执行与运行
 
 以下为客户端与数据库在同一 Rancher 集群内，访问 RadonDB MySQL 的方式。
 
-### `clusterIP` 方式
-
-RadonDB MySQL 的高可用读写 IP 指向 leader 服务的 `clusterIP`，高可用只读 IP 指向 follower 服务的 `clusterIP`。
-
-```shell
-$ mysql -h <clusterIP> -P <mysql_Port> -u <user_name> -p
-```
-
-以下示例用户名为 `radondb_usr`， leader 服务的 clusterIP 为 `10.10.128.136` ，连接示例如下：
-
-```shell
-$ mysql -h 10.10.128.136 -P 3306 -u radondb_usr -p
-```
-
 ### `service_name` 方式
 
-Rancher 集群的 Pod 之间支持通过 `service_name` 方式访问 RadonDB MySQL。
-
-> **说明**
-> 
-> `service_name` 方式不适用于从 Rancher 集群的物理机访问数据库 Pod。
-
 * 连接 leader 服务(RadonDB MySQL 主节点)
 
     ```shell
-    mysql -h <leader_service_name>.<namespace> -u <user_name> -p
+    $ mysql -h <leader_service_name>.<namespace> -u <user_name> -p
     ```
 
    用户名为 `radondb_usr`，release 名为 `sample`，RadonDB MySQL 命名空间为 `default` ，连接示例如下：
 
     ```shell
-    mysql -h sample-leader.default -u radondb_usr -p
+    $ mysql -h sample-leader.default -u radondb_usr -p
     ```
 
 * 连接 follower 服务(RadonDB MySQL 从节点)
 
     ```shell
-    mysql -h <follower_service_name>.<namespace> -u <user_name> -p
+    $ mysql -h <follower_service_name>.<namespace> -u <user_name> -p
     ```
 
    用户名为 `radondb_usr`，release 名为 `sample`，RadonDB MySQL 命名空间为 `default` ，连接示例如下：
 
     ```shell
-    mysql -h sample-follower.default -u radondb_usr -p  
+    $ mysql -h sample-follower.default -u radondb_usr -p  
     ```
+
+### `clusterIP` 方式
+
+RadonDB MySQL 的高可用读写 IP 指向 leader 服务的 `clusterIP`，高可用只读 IP 指向 follower 服务的 `clusterIP`。
+
+```shell
+$ mysql -h <clusterIP> -P <mysql_Port> -u <user_name> -p
+```
+
+以下示例用户名为 `radondb_usr`， leader 服务的 clusterIP 为 `10.10.128.136` ，连接示例如下：
+
+```shell
+$ mysql -h 10.10.128.136 -P 3306 -u radondb_usr -p
+```
diff --git a/mysqlcluster/container/xenon.go b/mysqlcluster/container/xenon.go
index eab0b1d..0c8c3fd 100644
--- a/mysqlcluster/container/xenon.go
+++ b/mysqlcluster/container/xenon.go
@@ -76,11 +76,7 @@ func (c *xenon) getLivenessProbe() *corev1.Probe {
 	return &corev1.Probe{
 		Handler: corev1.Handler{
 			Exec: &corev1.ExecAction{
-				Command: []string{
-					"sh",
-					"-c",
-					"pgrep xenon && xenoncli xenon ping",
-				},
+				Command: []string{"pgrep", "xenon"},
 			},
 		},
 		InitialDelaySeconds: 30,
diff --git a/mysqlcluster/syncer/status.go b/mysqlcluster/syncer/status.go
index 4945660..d8ed00e 100644
--- a/mysqlcluster/syncer/status.go
+++ b/mysqlcluster/syncer/status.go
@@ -25,7 +25,6 @@ import (
 	corev1 "k8s.io/api/core/v1"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/runtime"
-	"k8s.io/apimachinery/pkg/types"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 
 	apiv1alpha1 "github.com/radondb/radondb-mysql-kubernetes/api/v1alpha1"
@@ -96,12 +95,6 @@ func (s *StatusSyncer) Sync(ctx context.Context) (syncer.SyncResult, error) {
 	// get ready nodes.
 	var readyNodes []corev1.Pod
 	for _, pod := range list.Items {
-		if pod.ObjectMeta.Labels[utils.LableRebuild] == "true" {
-			if err := s.AutoRebuild(ctx, &pod); err != nil {
-				log.Error(err, "failed to AutoRebuild", "pod", pod.Name, "namespace", pod.Namespace)
-			}
-			continue
-		}
 		for _, cond := range pod.Status.Conditions {
 			switch cond.Type {
 			case corev1.ContainersReady:
@@ -190,40 +183,6 @@ func (s *StatusSyncer) updateClusterStatus() apiv1alpha1.ClusterCondition {
 	return clusterCondition
 }
 
-// Rebuild Pod by deleting and creating it.
-// Notice: This function just delete Pod and PVC,
-// then after k8s recreate pod, it will clone and initial it.
-func (s *StatusSyncer) AutoRebuild(ctx context.Context, pod *corev1.Pod) error {
-	ordinal, err := utils.GetOrdinal(pod.Name)
-	if err != nil {
-		return err
-
-	}
-	// Set Pod UnHealthy.
-	pod.Labels["healthy"] = "no"
-	if err := s.cli.Update(ctx, pod); err != nil {
-		return err
-	}
-	// Delete the Pod.
-	if err := s.cli.Delete(ctx, pod); err != nil {
-		return err
-	}
-	// Delete the pvc.
-	pvcName := fmt.Sprintf("%s-%s-%d", utils.DataVolumeName,
-		s.GetNameForResource(utils.StatefulSet), ordinal)
-	pvc := corev1.PersistentVolumeClaim{}
-
-	if err := s.cli.Get(ctx,
-		types.NamespacedName{Name: pvcName, Namespace: s.Namespace},
-		&pvc); err != nil {
-		return err
-	}
-	if err := s.cli.Delete(ctx, &pvc); err != nil {
-		return err
-	}
-	return nil
-}
-
 // updateNodeStatus update the node status.
 func (s *StatusSyncer) updateNodeStatus(ctx context.Context, cli client.Client, pods []corev1.Pod) error {
 	for _, pod := range pods {
@@ -234,8 +193,7 @@ func (s *StatusSyncer) updateNodeStatus(ctx context.Context, cli client.Client,
 		node.Message = ""
 
 		if err := s.updateNodeRaftStatus(node); err != nil {
-			log.Error(err, "failed to get/update node raft status", "node", node.Name)
-			node.Message = err.Error()
+			return err
 		}
 
 		isLagged, isReplicating, isReadOnly := corev1.ConditionUnknown, corev1.ConditionUnknown, corev1.ConditionUnknown
@@ -338,24 +296,19 @@ func (s *StatusSyncer) updateNodeCondition(node *apiv1alpha1.NodeStatus, idx int
 
 // updateNodeRaftStatus Update Node RaftStatus.
 func (s *StatusSyncer) updateNodeRaftStatus(node *apiv1alpha1.NodeStatus) error {
-	isLeader := corev1.ConditionFalse
-	node.RaftStatus = apiv1alpha1.RaftStatus{
-		Role:   string(utils.Unknown),
-		Leader: "UNKNOWN",
-		Nodes:  nil,
-	}
-
 	raftStatus, err := s.XenonExecutor.RaftStatus(node.Name)
-	if err == nil && raftStatus != nil {
-		node.RaftStatus = *raftStatus
-		if raftStatus.Role == string(utils.Leader) {
-			isLeader = corev1.ConditionTrue
-		}
+	if err != nil {
+		return err
 	}
+	node.RaftStatus = *raftStatus
 
+	isLeader := corev1.ConditionFalse
+	if node.RaftStatus.Role == string(utils.Leader) {
+		isLeader = corev1.ConditionTrue
+	}
 	// update apiv1alpha1.NodeConditionLeader.
 	s.updateNodeCondition(node, int(apiv1alpha1.IndexLeader), isLeader)
-	return err
+	return nil
 }
 
 func (s *StatusSyncer) reconcileXenon(readyNodes int) error {
diff --git a/utils/constants.go b/utils/constants.go
index 6736aea..3c4883c 100644
--- a/utils/constants.go
+++ b/utils/constants.go
@@ -166,11 +166,8 @@ const (
 	Leader    RaftRole = "LEADER"
 	Follower  RaftRole = "FOLLOWER"
 	Candidate RaftRole = "CANDIDATE"
-	Unknown   RaftRole = "UNKNOWN"
 )
 
-const LableRebuild = "rebuild"
-
 // XenonHttpUrl is a http url corresponding to the xenon instruction.
 type XenonHttpUrl string
 


Test patch:
diff --git a/mysqlcluster/container/xenon_test.go b/mysqlcluster/container/xenon_test.go
index 322d7e2..6f5c081 100644
--- a/mysqlcluster/container/xenon_test.go
+++ b/mysqlcluster/container/xenon_test.go
@@ -96,11 +96,7 @@ func TestGetXenonLivenessProbe(t *testing.T) {
 	livenessProbe := &corev1.Probe{
 		Handler: corev1.Handler{
 			Exec: &corev1.ExecAction{
-				Command: []string{
-					"sh",
-					"-c",
-					"pgrep xenon && xenoncli xenon ping",
-				},
+				Command: []string{"pgrep", "xenon"},
 			},
 		},
 		InitialDelaySeconds: 30,