Skip to content

Commit f81648b

Browse files
committed
Add splitbrain condition, make tests terser
1 parent 384893c commit f81648b

File tree

3 files changed

+16
-34
lines changed

3 files changed

+16
-34
lines changed

api/v1alpha1/etcdcluster_types.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ type EtcdClusterSpec struct {
5555
const (
5656
EtcdConditionInitialized = "Initialized"
5757
EtcdConditionReady = "Ready"
58+
EtcdConditionError = "Error"
5859
)
5960

6061
type EtcdCondType string
@@ -66,6 +67,7 @@ const (
6667
EtcdCondTypeWaitingForFirstQuorum EtcdCondType = "WaitingForFirstQuorum"
6768
EtcdCondTypeStatefulSetReady EtcdCondType = "StatefulSetReady"
6869
EtcdCondTypeStatefulSetNotReady EtcdCondType = "StatefulSetNotReady"
70+
EtcdCondTypeSplitbrain EtcdCondType = "Splitbrain"
6971
)
7072

7173
const (
@@ -74,6 +76,7 @@ const (
7476
EtcdReadyCondNegMessage EtcdCondMessage = "Cluster StatefulSet is not Ready"
7577
EtcdReadyCondPosMessage EtcdCondMessage = "Cluster StatefulSet is Ready"
7678
EtcdReadyCondNegWaitingForQuorum EtcdCondMessage = "Waiting for first quorum to be established"
79+
EtcdErrorCondSplitbrainMessage EtcdCondMessage = "Etcd endpoints reporting more than one unique cluster ID"
7780
)
7881

7982
// EtcdClusterStatus defines the observed state of EtcdCluster

internal/controller/etcdcluster_controller.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,13 @@ func (r *EtcdClusterReconciler) Reconcile(ctx context.Context, req ctrl.Request)
133133
state.setClusterID()
134134
if state.inSplitbrain() {
135135
log.Error(ctx, fmt.Errorf("etcd cluster in splitbrain"), "etcd cluster in splitbrain, dropping from reconciliation queue")
136-
return ctrl.Result{}, nil
136+
factory.SetCondition(instance, factory.NewCondition(etcdaenixiov1alpha1.EtcdConditionError).
137+
WithStatus(true).
138+
WithReason(string(etcdaenixiov1alpha1.EtcdCondTypeSplitbrain)).
139+
WithMessage(string(etcdaenixiov1alpha1.EtcdErrorCondSplitbrainMessage)).
140+
Complete(),
141+
)
142+
return r.updateStatus(ctx, instance)
137143
}
138144
// fill conditions
139145
if len(instance.Status.Conditions) == 0 {

test/e2e/e2e_test.go

Lines changed: 6 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -97,24 +97,15 @@ var _ = Describe("etcd-operator", Ordered, func() {
9797
})
9898

9999
Eventually(func() error {
100-
cmd := exec.Command("kubectl", "get",
101-
"statefulset/test",
102-
"--namespace", namespace,
103-
)
104-
_, err = utils.Run(cmd)
105-
return err
106-
}, time.Second*20, time.Second*2).Should(Succeed())
107-
108-
By("wait for statefulset is ready", func() {
109100
cmd := exec.Command("kubectl", "wait",
110101
"statefulset/test",
111102
"--for", "jsonpath={.status.readyReplicas}=3",
112103
"--namespace", namespace,
113104
"--timeout", "5m",
114105
)
115106
_, err = utils.Run(cmd)
116-
ExpectWithOffset(1, err).NotTo(HaveOccurred())
117-
})
107+
return err
108+
}, time.Second*20, time.Second*2).Should(Succeed(), "wait for statefulset is ready")
118109

119110
client, err := utils.GetEtcdClient(ctx, client.ObjectKey{Namespace: namespace, Name: "test"})
120111
Expect(err).NotTo(HaveOccurred())
@@ -155,24 +146,15 @@ var _ = Describe("etcd-operator", Ordered, func() {
155146
})
156147

157148
Eventually(func() error {
158-
cmd := exec.Command("kubectl", "get",
159-
"statefulset/test",
160-
"--namespace", namespace,
161-
)
162-
_, err = utils.Run(cmd)
163-
return err
164-
}, time.Second*20, time.Second*2).Should(Succeed())
165-
166-
By("wait for statefulset is ready", func() {
167149
cmd := exec.Command("kubectl", "wait",
168150
"statefulset/test",
169151
"--for", "jsonpath={.status.readyReplicas}=3",
170152
"--namespace", namespace,
171153
"--timeout", "5m",
172154
)
173155
_, err = utils.Run(cmd)
174-
ExpectWithOffset(1, err).NotTo(HaveOccurred())
175-
})
156+
return err
157+
}, time.Second*20, time.Second*2).Should(Succeed(), "wait for statefulset is ready")
176158

177159
client, err := utils.GetEtcdClient(ctx, client.ObjectKey{Namespace: namespace, Name: "test"})
178160
Expect(err).NotTo(HaveOccurred())
@@ -212,24 +194,15 @@ var _ = Describe("etcd-operator", Ordered, func() {
212194
})
213195

214196
Eventually(func() error {
215-
cmd := exec.Command("kubectl", "get",
216-
"statefulset/test",
217-
"--namespace", namespace,
218-
)
219-
_, err = utils.Run(cmd)
220-
return err
221-
}, time.Second*20, time.Second*2).Should(Succeed())
222-
223-
By("wait for statefulset is ready", func() {
224197
cmd := exec.Command("kubectl", "wait",
225198
"statefulset/test",
226199
"--for", "jsonpath={.status.availableReplicas}=3",
227200
"--namespace", namespace,
228201
"--timeout", "5m",
229202
)
230203
_, err = utils.Run(cmd)
231-
ExpectWithOffset(1, err).NotTo(HaveOccurred())
232-
})
204+
return err
205+
}, time.Second*20, time.Second*2).Should(Succeed(), "wait for statefulset is ready")
233206

234207
client, err := utils.GetEtcdClient(ctx, client.ObjectKey{Namespace: namespace, Name: "test"})
235208
Expect(err).NotTo(HaveOccurred())

0 commit comments

Comments
 (0)