Skip to content

Commit

Permalink
Fix node filter to check etcd in-sync status properly
Browse files Browse the repository at this point in the history
Signed-off-by: morimoto-cybozu <kenji_morimoto@cybozu.co.jp>
  • Loading branch information
morimoto-cybozu committed Dec 28, 2022
1 parent 86050e3 commit cfd2165
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 3 deletions.
7 changes: 6 additions & 1 deletion server/node_filter.go
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,12 @@ func (nf *NodeFilter) EtcdIsGood() bool {
if !st.IsHealthy {
return false
}
return len(st.Members) == len(st.InSyncMembers)
for k := range st.Members {
if !st.InSyncMembers[k] {
return false
}
}
return true
}

// EtcdStoppedMembers returns control plane nodes that are not running etcd.
Expand Down
9 changes: 7 additions & 2 deletions server/strategy_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1893,20 +1893,23 @@ func TestDecideOps(t *testing.T) {
Name: "EtcdRemoveNonClusterMember",
Input: newData().withAllServices().with(func(d testData) {
d.Status.Etcd.Members["10.0.0.100"] = &etcdserverpb.Member{Name: "10.0.0.100", ID: 3}
d.Status.Etcd.InSyncMembers["10.0.0.100"] = false
}),
ExpectedOps: []string{"etcd-remove-member"},
},
{
Name: "SkipEtcdRemoveNonClusterMember",
Input: newData().withAllServices().with(func(d testData) {
d.Status.Etcd.Members["10.0.0.100"] = &etcdserverpb.Member{Name: "10.0.0.100", ID: 3}
d.Status.Etcd.InSyncMembers["10.0.0.100"] = false
}).withSSHNotConnectedNodes(),
ExpectedOps: []string{"wait-kubernetes"},
},
{
Name: "EtcdDestroyNonCPMember",
Input: newData().withAllServices().with(func(d testData) {
d.Status.Etcd.Members["10.0.0.14"] = &etcdserverpb.Member{Name: "10.0.0.14", ID: 3}
d.Status.Etcd.InSyncMembers["10.0.0.14"] = false
}),
ExpectedOps: []string{"etcd-destroy-member"},
ExpectedTargetNums: map[string]int{"etcd-destroy-member": 1},
Expand All @@ -1915,6 +1918,7 @@ func TestDecideOps(t *testing.T) {
Name: "EtcdDestroyNonCPMemberSSHNotConnected",
Input: newData().withAllServices().with(func(d testData) {
d.Status.Etcd.Members["10.0.0.14"] = &etcdserverpb.Member{Name: "10.0.0.14", ID: 3}
d.Status.Etcd.InSyncMembers["10.0.0.14"] = false
}).withSSHNotConnectedNonCPWorker(3),
ExpectedOps: []string{"etcd-destroy-member"},
ExpectedTargetNums: map[string]int{"etcd-destroy-member": 0},
Expand All @@ -1924,6 +1928,7 @@ func TestDecideOps(t *testing.T) {
Input: newData().withAllServices().with(func(d testData) {
d.Status.Etcd.Members["10.0.0.13"].Name = ""
d.Status.Etcd.Members["10.0.0.13"].ID = 0
d.Status.Etcd.InSyncMembers["10.0.0.13"] = false
}),
ExpectedOps: []string{"etcd-add-member"},
},
Expand All @@ -1934,7 +1939,7 @@ func TestDecideOps(t *testing.T) {
delete(d.Status.Etcd.Members, "10.0.0.13")
delete(d.Status.Etcd.InSyncMembers, "10.0.0.13")
// but the cluster is not good enough
delete(d.Status.Etcd.InSyncMembers, "10.0.0.12")
d.Status.Etcd.InSyncMembers["10.0.0.12"] = false
}),
ExpectedOps: nil,
},
Expand Down Expand Up @@ -2214,7 +2219,7 @@ func TestDecideOps(t *testing.T) {
Status: cke.RebootStatusQueued,
},
}).with(func(d testData) {
delete(d.Status.Etcd.InSyncMembers, "10.0.0.11")
d.Status.Etcd.InSyncMembers["10.0.0.11"] = false
}),
ExpectedOps: nil,
ExpectedTargetNums: nil,
Expand Down

0 comments on commit cfd2165

Please sign in to comment.