From 8e50fa3304c4a0bac64a075da54be5477e57dc5e Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Sun, 30 Mar 2025 20:28:31 +0200 Subject: [PATCH] Assume v2 store is always not nil Signed-off-by: Marek Siarkowicz --- server/etcdserver/api/membership/cluster.go | 38 ++++++++----------- .../etcdserver/api/membership/cluster_test.go | 2 +- .../api/membership/membership_test.go | 4 -- server/etcdserver/server_test.go | 1 + 4 files changed, 18 insertions(+), 27 deletions(-) diff --git a/server/etcdserver/api/membership/cluster.go b/server/etcdserver/api/membership/cluster.go index 8f6e0d2ae1a..d449dcb54c5 100644 --- a/server/etcdserver/api/membership/cluster.go +++ b/server/etcdserver/api/membership/cluster.go @@ -116,6 +116,7 @@ func NewCluster(lg *zap.Logger, opts ...ClusterOption) *RaftCluster { removed: make(map[types.ID]bool), downgradeInfo: &serverversion.DowngradeInfo{Enabled: false}, maxLearners: clOpts.maxLearners, + v2store: v2store.New(), } } @@ -407,9 +408,7 @@ func (c *RaftCluster) ValidateConfigurationChange(cc raftpb.ConfChange, shouldAp func (c *RaftCluster) AddMember(m *Member, shouldApplyV3 ShouldApplyV3) { c.Lock() defer c.Unlock() - if c.v2store != nil { - mustSaveMemberToStore(c.lg, c.v2store, m) - } + mustSaveMemberToStore(c.lg, c.v2store, m) if m.ID == c.localID { setIsLearnerMetric(m) @@ -445,9 +444,8 @@ func (c *RaftCluster) AddMember(m *Member, shouldApplyV3 ShouldApplyV3) { func (c *RaftCluster) RemoveMember(id types.ID, shouldApplyV3 ShouldApplyV3) { c.Lock() defer c.Unlock() - if c.v2store != nil { - mustDeleteMemberFromStore(c.lg, c.v2store, id) - } + mustDeleteMemberFromStore(c.lg, c.v2store, id) + if c.be != nil && shouldApplyV3 { c.be.MustDeleteMemberFromBackend(id) @@ -489,9 +487,8 @@ func (c *RaftCluster) UpdateAttributes(id types.ID, attr Attributes, shouldApply if m, ok := c.members[id]; ok { m.Attributes = attr - if c.v2store != nil { - mustUpdateMemberAttrInStore(c.lg, c.v2store, m) - } + mustUpdateMemberAttrInStore(c.lg, c.v2store, m) + if c.be != nil && shouldApplyV3 { c.be.MustSaveMemberToBackend(m) } @@ -521,11 +518,9 @@ func (c *RaftCluster) PromoteMember(id types.ID, shouldApplyV3 ShouldApplyV3) { c.Lock() defer c.Unlock() - if c.v2store != nil { - m := *(c.members[id]) - m.RaftAttributes.IsLearner = false - mustUpdateMemberInStore(c.lg, c.v2store, &m) - } + m := *(c.members[id]) + m.RaftAttributes.IsLearner = false + mustUpdateMemberInStore(c.lg, c.v2store, &m) if id == c.localID { isLearner.Set(0) @@ -555,11 +550,10 @@ func (c *RaftCluster) UpdateRaftAttributes(id types.ID, raftAttr RaftAttributes, c.Lock() defer c.Unlock() - if c.v2store != nil { - m := *(c.members[id]) - m.RaftAttributes = raftAttr - mustUpdateMemberInStore(c.lg, c.v2store, &m) - } + m := *(c.members[id]) + m.RaftAttributes = raftAttr + mustUpdateMemberInStore(c.lg, c.v2store, &m) + if c.be != nil && shouldApplyV3 { c.members[id].RaftAttributes = raftAttr c.be.MustSaveMemberToBackend(c.members[id]) @@ -616,9 +610,9 @@ func (c *RaftCluster) SetVersion(ver *semver.Version, onSet func(*zap.Logger, *s c.version = ver sv := semver.Must(semver.NewVersion(version.Version)) serverversion.MustDetectDowngrade(c.lg, sv, c.version) - if c.v2store != nil { - mustSaveClusterVersionToStore(c.lg, c.v2store, ver) - } + + mustSaveClusterVersionToStore(c.lg, c.v2store, ver) + if c.be != nil && shouldApplyV3 { c.be.MustSaveClusterVersionToBackend(ver) } diff --git a/server/etcdserver/api/membership/cluster_test.go b/server/etcdserver/api/membership/cluster_test.go index ff417194601..e4daaf87aef 100644 --- a/server/etcdserver/api/membership/cluster_test.go +++ b/server/etcdserver/api/membership/cluster_test.go @@ -661,7 +661,7 @@ func TestNodeToMember(t *testing.T) { } func newTestCluster(tb testing.TB, membs []*Member) *RaftCluster { - c := &RaftCluster{lg: zaptest.NewLogger(tb), members: make(map[types.ID]*Member), removed: make(map[types.ID]bool)} + c := &RaftCluster{lg: zaptest.NewLogger(tb), members: make(map[types.ID]*Member), removed: make(map[types.ID]bool), v2store: v2store.New()} for _, m := range membs { c.members[m.ID] = m } diff --git a/server/etcdserver/api/membership/membership_test.go b/server/etcdserver/api/membership/membership_test.go index 77be3bba255..03bf384ad69 100644 --- a/server/etcdserver/api/membership/membership_test.go +++ b/server/etcdserver/api/membership/membership_test.go @@ -34,10 +34,6 @@ func TestAddRemoveMember(t *testing.T) { c.AddMember(newTestMember(18, nil, "node18", nil), true) c.RemoveMember(18, true) - // Skipping removal of already removed member - c.RemoveMember(17, true) - c.RemoveMember(18, true) - c.AddMember(newTestMember(19, nil, "node19", nil), true) // Recover from backend diff --git a/server/etcdserver/server_test.go b/server/etcdserver/server_test.go index bad86998319..d23f45ae964 100644 --- a/server/etcdserver/server_test.go +++ b/server/etcdserver/server_test.go @@ -1521,6 +1521,7 @@ func newTestCluster(tb testing.TB) *membership.RaftCluster { func newTestClusterWithBackend(tb testing.TB, membs []*membership.Member, be backend.Backend) *membership.RaftCluster { lg := zaptest.NewLogger(tb) c := membership.NewCluster(lg) + c.SetStore(v2store.New()) c.SetBackend(schema.NewMembershipBackend(lg, be)) for _, m := range membs { c.AddMember(m, true)