From 0ce660340eb38ce9bbc6c2ae3bebe9c9bd690e6a Mon Sep 17 00:00:00 2001 From: Geeta Gharpure Date: Tue, 30 May 2023 23:50:11 +0000 Subject: [PATCH] Refactor to create a function to return membership in v2 format Signed-off-by: Geeta Gharpure --- etcdutl/snapshot/v3_snapshot.go | 9 +-------- server/etcdserver/cluster_util.go | 12 ++++++++++++ server/etcdserver/server.go | 11 +---------- 3 files changed, 14 insertions(+), 18 deletions(-) diff --git a/etcdutl/snapshot/v3_snapshot.go b/etcdutl/snapshot/v3_snapshot.go index ff19277f8b6..03ee00d6285 100644 --- a/etcdutl/snapshot/v3_snapshot.go +++ b/etcdutl/snapshot/v3_snapshot.go @@ -38,7 +38,6 @@ import ( "go.etcd.io/etcd/server/v3/etcdserver" "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" "go.etcd.io/etcd/server/v3/etcdserver/cindex" "go.etcd.io/etcd/server/v3/storage/backend" "go.etcd.io/etcd/server/v3/storage/schema" @@ -455,17 +454,11 @@ func (s *v3Manager) saveWALAndSnap() (*raftpb.HardState, error) { return nil, err } - st := v2store.New(etcdserver.StoreClusterPrefix, etcdserver.StoreKeysPrefix) - s.cl.Store(st) - b, berr := st.SaveNoCopy() - if berr != nil { - return nil, berr - } confState := raftpb.ConfState{ Voters: nodeIDs, } raftSnap := raftpb.Snapshot{ - Data: b, + Data: etcdserver.GetMembershipInfoInV2Format(s.lg, s.cl), Metadata: raftpb.SnapshotMetadata{ Index: commit, Term: term, diff --git a/server/etcdserver/cluster_util.go b/server/etcdserver/cluster_util.go index 065283a5855..220045c0590 100644 --- a/server/etcdserver/cluster_util.go +++ b/server/etcdserver/cluster_util.go @@ -28,6 +28,7 @@ import ( "go.etcd.io/etcd/api/v3/version" "go.etcd.io/etcd/client/pkg/v3/types" "go.etcd.io/etcd/server/v3/etcdserver/api/membership" + "go.etcd.io/etcd/server/v3/etcdserver/api/v2store" "go.etcd.io/etcd/server/v3/etcdserver/errors" "github.com/coreos/go-semver/semver" @@ -416,3 +417,14 @@ func convertToClusterVersion(v string) (*semver.Version, error) { ver = &semver.Version{Major: ver.Major, Minor: ver.Minor} return ver, nil } + +func GetMembershipInfoInV2Format(lg *zap.Logger, cl *membership.RaftCluster) []byte { + var st v2store.Store + st = v2store.New(StoreClusterPrefix, StoreKeysPrefix) + cl.Store(st) + d, err := st.SaveNoCopy() + if err != nil { + lg.Panic("failed to save v2 store", zap.Error(err)) + } + return d +} diff --git a/server/etcdserver/server.go b/server/etcdserver/server.go index a0da1957769..1b3fa49d6e0 100644 --- a/server/etcdserver/server.go +++ b/server/etcdserver/server.go @@ -2076,16 +2076,7 @@ func (s *EtcdServer) snapshot(snapi uint64, confState raftpb.ConfState) { s.GoAttach(func() { lg := s.Logger() - var st v2store.Store - st = v2store.New(StoreClusterPrefix, StoreKeysPrefix) - s.cluster.Store(st) - d, err := st.SaveNoCopy() - // TODO: current store will never fail to do a snapshot - // what should we do if the store might fail? - if err != nil { - lg.Panic("failed to save v2 store", zap.Error(err)) - } - snap, err := s.r.raftStorage.CreateSnapshot(snapi, &confState, d) + snap, err := s.r.raftStorage.CreateSnapshot(snapi, &confState, GetMembershipInfoInV2Format(lg, s.cluster)) if err != nil { // the snapshot was done asynchronously with the progress of raft. // raft might have already got a newer snapshot.