Skip to content

Commit d7e679e

Browse files
authored
Merge pull request #19703 from k8s-infra-cherrypick-robot/cherry-pick-19694-to-release-3.6
[release-3.6] Switch to validating v3 when v2 and v3 are synchronized
2 parents a0e30d5 + 6807e0f commit d7e679e

File tree

4 files changed

+20
-6
lines changed

4 files changed

+20
-6
lines changed

server/etcdserver/api/membership/cluster.go

+10-3
Original file line numberDiff line numberDiff line change
@@ -313,9 +313,16 @@ func (c *RaftCluster) Recover(onSet func(*zap.Logger, *semver.Version)) {
313313

314314
// ValidateConfigurationChange takes a proposed ConfChange and
315315
// ensures that it is still valid.
316-
func (c *RaftCluster) ValidateConfigurationChange(cc raftpb.ConfChange) error {
317-
// TODO: this must be switched to backend as well.
318-
membersMap, removedMap := membersFromStore(c.lg, c.v2store)
316+
func (c *RaftCluster) ValidateConfigurationChange(cc raftpb.ConfChange, shouldApplyV3 ShouldApplyV3) error {
317+
var membersMap map[types.ID]*Member
318+
var removedMap map[types.ID]bool
319+
320+
if shouldApplyV3 {
321+
membersMap, removedMap = c.be.MustReadMembersFromBackend()
322+
} else {
323+
membersMap, removedMap = membersFromStore(c.lg, c.v2store)
324+
}
325+
319326
id := types.ID(cc.NodeID)
320327
if removedMap[id] {
321328
return ErrIDRemoved

server/etcdserver/api/membership/cluster_test.go

+9-1
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,15 @@ func TestClusterValidateAndAssignIDs(t *testing.T) {
278278
}
279279
}
280280

281+
func TestClusterValidateConfigurationChangeV3(t *testing.T) {
282+
testClusterValidateConfigurationChange(t, true)
283+
}
284+
281285
func TestClusterValidateConfigurationChangeV2(t *testing.T) {
286+
testClusterValidateConfigurationChange(t, false)
287+
}
288+
289+
func testClusterValidateConfigurationChange(t *testing.T, shouldApplyV3 ShouldApplyV3) {
282290
cl := NewCluster(zaptest.NewLogger(t), WithMaxLearners(1))
283291
be := newMembershipBackend()
284292
cl.SetBackend(be)
@@ -459,7 +467,7 @@ func TestClusterValidateConfigurationChangeV2(t *testing.T) {
459467
},
460468
}
461469
for i, tt := range tests {
462-
err := cl.ValidateConfigurationChange(tt.cc)
470+
err := cl.ValidateConfigurationChange(tt.cc, shouldApplyV3)
463471
if !errors.Is(err, tt.werr) {
464472
t.Errorf("#%d: validateConfigurationChange error = %v, want %v", i, err, tt.werr)
465473
}

server/etcdserver/server.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -2069,7 +2069,7 @@ func removeNeedlessRangeReqs(txn *pb.TxnRequest) {
20692069
// invoked with a ConfChange that has already passed through Raft
20702070
func (s *EtcdServer) applyConfChange(cc raftpb.ConfChange, confState *raftpb.ConfState, shouldApplyV3 membership.ShouldApplyV3) (bool, error) {
20712071
lg := s.Logger()
2072-
if err := s.cluster.ValidateConfigurationChange(cc); err != nil {
2072+
if err := s.cluster.ValidateConfigurationChange(cc, shouldApplyV3); err != nil {
20732073
lg.Error("Validation on configuration change failed", zap.Bool("shouldApplyV3", bool(shouldApplyV3)), zap.Error(err))
20742074
cc.NodeID = raft.None
20752075
s.r.ApplyConfChange(cc)

tests/e2e/metrics_test.go

-1
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,6 @@ func TestNoMetricsMissing(t *testing.T) {
167167
"etcd_debugging_snap_save_marshalling_duration_seconds",
168168
"etcd_debugging_snap_save_total_duration_seconds",
169169
"etcd_debugging_store_expires_total",
170-
"etcd_debugging_store_reads_total",
171170
"etcd_debugging_store_watch_requests_total",
172171
"etcd_debugging_store_watchers",
173172
"etcd_debugging_store_writes_total",

0 commit comments

Comments
 (0)