Skip to content

Assume v3 store is always not nil #19698

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 10 additions & 18 deletions server/etcdserver/api/membership/cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -257,17 +257,9 @@
}

func (c *RaftCluster) UnsafeLoad() {
if c.be != nil {
c.version = c.be.ClusterVersionFromBackend()
c.members, c.removed = c.be.MustReadMembersFromBackend()
} else {
c.version = clusterVersionFromStore(c.lg, c.v2store)
c.members, c.removed = membersFromStore(c.lg, c.v2store)
}

if c.be != nil {
c.downgradeInfo = c.be.DowngradeInfoFromBackend()
}
c.version = c.be.ClusterVersionFromBackend()
c.members, c.removed = c.be.MustReadMembersFromBackend()
c.downgradeInfo = c.be.DowngradeInfoFromBackend()
}

func (c *RaftCluster) Recover(onSet func(*zap.Logger, *semver.Version)) {
Expand Down Expand Up @@ -408,7 +400,7 @@
setIsLearnerMetric(m)
}

if c.be != nil && shouldApplyV3 {
if shouldApplyV3 {
c.be.MustSaveMemberToBackend(m)

c.members[m.ID] = m
Expand Down Expand Up @@ -441,7 +433,7 @@
if c.v2store != nil {
mustDeleteMemberFromStore(c.lg, c.v2store, id)
}
if c.be != nil && shouldApplyV3 {
if shouldApplyV3 {
c.be.MustDeleteMemberFromBackend(id)

m, ok := c.members[id]
Expand Down Expand Up @@ -485,7 +477,7 @@
if c.v2store != nil {
mustUpdateMemberAttrInStore(c.lg, c.v2store, m)
}
if c.be != nil && shouldApplyV3 {
if shouldApplyV3 {
c.be.MustSaveMemberToBackend(m)
}
return
Expand Down Expand Up @@ -524,7 +516,7 @@
isLearner.Set(0)
}

if c.be != nil && shouldApplyV3 {
if shouldApplyV3 {
c.members[id].RaftAttributes.IsLearner = false
c.updateMembershipMetric(id, true)
c.be.MustSaveMemberToBackend(c.members[id])
Expand Down Expand Up @@ -553,7 +545,7 @@
m.RaftAttributes = raftAttr
mustUpdateMemberInStore(c.lg, c.v2store, &m)
}
if c.be != nil && shouldApplyV3 {
if shouldApplyV3 {
c.members[id].RaftAttributes = raftAttr
c.be.MustSaveMemberToBackend(c.members[id])

Expand Down Expand Up @@ -612,7 +604,7 @@
if c.v2store != nil {
mustSaveClusterVersionToStore(c.lg, c.v2store, ver)
}
if c.be != nil && shouldApplyV3 {
if shouldApplyV3 {
c.be.MustSaveClusterVersionToBackend(ver)
}
if oldVer != nil {
Expand Down Expand Up @@ -814,7 +806,7 @@
c.Lock()
defer c.Unlock()

if c.be != nil && shouldApplyV3 {
if shouldApplyV3 {

Check warning on line 809 in server/etcdserver/api/membership/cluster.go

View check run for this annotation

Codecov / codecov/patch

server/etcdserver/api/membership/cluster.go#L809

Added line #L809 was not covered by tests
c.be.MustSaveDowngradeToBackend(d)
}

Expand Down
7 changes: 6 additions & 1 deletion server/etcdserver/api/membership/cluster_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -653,7 +653,12 @@ func TestNodeToMember(t *testing.T) {
}

func newTestCluster(t testing.TB, membs []*Member) *RaftCluster {
c := &RaftCluster{lg: zaptest.NewLogger(t), members: make(map[types.ID]*Member), removed: make(map[types.ID]bool)}
c := &RaftCluster{
lg: zaptest.NewLogger(t),
members: make(map[types.ID]*Member),
removed: make(map[types.ID]bool),
be: newMembershipBackend(),
}
for _, m := range membs {
c.members[m.ID] = m
}
Expand Down
15 changes: 0 additions & 15 deletions server/etcdserver/api/membership/storev2.go
Original file line number Diff line number Diff line change
Expand Up @@ -183,18 +183,3 @@ func MemberStoreKey(id types.ID) string {
func MemberAttributesStorePath(id types.ID) string {
return path.Join(MemberStoreKey(id), attributesSuffix)
}

func clusterVersionFromStore(lg *zap.Logger, st v2store.Store) *semver.Version {
e, err := st.Get(path.Join(storePrefix, "version"), false, false)
if err != nil {
if isKeyNotFound(err) {
return nil
}
lg.Panic(
"failed to get cluster version from store",
zap.String("path", path.Join(storePrefix, "version")),
zap.Error(err),
)
}
return semver.Must(semver.NewVersion(*e.Node.Value))
}
1 change: 1 addition & 0 deletions server/etcdserver/apply/uber_applier_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ func defaultUberApplier(t *testing.T) UberApplier {
})

cluster := membership.NewCluster(lg)
cluster.SetBackend(schema.NewMembershipBackend(lg, be))
cluster.AddMember(&membership.Member{ID: memberID}, true)
lessor := lease.NewLessor(lg, be, cluster, lease.LessorConfig{})
kv := mvcc.NewStore(lg, be, lessor, mvcc.StoreConfig{})
Expand Down
12 changes: 10 additions & 2 deletions tests/e2e/v2store_deprecation_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ import (
"go.etcd.io/etcd/server/v3/etcdserver/api/membership"
"go.etcd.io/etcd/server/v3/etcdserver/api/snap"
"go.etcd.io/etcd/server/v3/etcdserver/api/v2store"
betesting "go.etcd.io/etcd/server/v3/storage/backend/testing"
"go.etcd.io/etcd/server/v3/storage/schema"
"go.etcd.io/etcd/tests/v3/framework/config"
"go.etcd.io/etcd/tests/v3/framework/e2e"
)
Expand Down Expand Up @@ -256,16 +258,22 @@ func assertSnapshotsMatch(t testing.TB, firstDataDir, secondDataDir string, patc
require.NoError(t, err)
secondSnapshot, err := snap.Read(lg, secondFiles[i])
require.NoError(t, err)
assertMembershipEqual(t, openSnap(patch(firstSnapshot.Data)), openSnap(patch(secondSnapshot.Data)))
assertMembershipEqual(t, lg, openSnap(patch(firstSnapshot.Data)), openSnap(patch(secondSnapshot.Data)))
}
}

func assertMembershipEqual(t testing.TB, firstStore v2store.Store, secondStore v2store.Store) {
func assertMembershipEqual(t testing.TB, lg *zap.Logger, firstStore v2store.Store, secondStore v2store.Store) {
rc1 := membership.NewCluster(zaptest.NewLogger(t))
rc1.SetStore(firstStore)
be1, _ := betesting.NewDefaultTmpBackend(t)
defer betesting.Close(t, be1)
rc1.SetBackend(schema.NewMembershipBackend(lg, be1))
rc1.Recover(func(lg *zap.Logger, v *semver.Version) {})

rc2 := membership.NewCluster(zaptest.NewLogger(t))
be2, _ := betesting.NewDefaultTmpBackend(t)
defer betesting.Close(t, be2)
rc2.SetBackend(schema.NewMembershipBackend(lg, be2))
rc2.SetStore(secondStore)
rc2.Recover(func(lg *zap.Logger, v *semver.Version) {})

Expand Down