Merge pull request #14429 from ahrtr/alarm_list_ci_3.5

[3.5] Move consistent_index forward when executing alarmList operation
This commit is contained in:
Benjamin Wang 2022-09-06 15:17:13 +08:00 committed by GitHub
commit 204c0319a1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 28 additions and 3 deletions

View File

@ -2175,7 +2175,6 @@ func (s *EtcdServer) apply(
// applyEntryNormal apples an EntryNormal type raftpb request to the EtcdServer
func (s *EtcdServer) applyEntryNormal(e *raftpb.Entry) {
shouldApplyV3 := membership.ApplyV2storeOnly
applyV3Performed := false
var ar *applyResult
index := s.consistIndex.ConsistentIndex()
if e.Index > index {
@ -2185,7 +2184,8 @@ func (s *EtcdServer) applyEntryNormal(e *raftpb.Entry) {
defer func() {
// The txPostLockInsideApplyHook will not get called in some cases,
// in which we should move the consistent index forward directly.
if !applyV3Performed || (ar != nil && ar.err != nil) {
newIndex := s.consistIndex.ConsistentIndex()
if newIndex < e.Index {
s.consistIndex.SetConsistentIndex(e.Index, e.Term)
}
}()
@ -2235,7 +2235,6 @@ func (s *EtcdServer) applyEntryNormal(e *raftpb.Entry) {
if !needResult && raftReq.Txn != nil {
removeNeedlessRangeReqs(raftReq.Txn)
}
applyV3Performed = true
ar = s.applyV3.Apply(&raftReq, shouldApplyV3)
}

View File

@ -332,6 +332,32 @@ func TestV3CorruptAlarmWithLeaseCorrupted(t *testing.T) {
}
}
// Refer to https://github.com/etcd-io/etcd/issues/14382
func TestAlarmlistOnMemberRestart(t *testing.T) {
BeforeTest(t)
clus := NewClusterV3(t, &ClusterConfig{
CorruptCheckTime: time.Second,
Size: 1,
SnapshotCount: 5,
})
defer clus.Terminate(t)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
for i := 0; i < 6; i++ {
req := &pb.AlarmRequest{Action: pb.AlarmRequest_GET}
if _, err := clus.Members[0].s.Alarm(ctx, req); err != nil {
t.Fatalf("unexpected error, %v", err)
}
}
clus.Members[0].Stop(t)
if err := clus.Members[0].Restart(t); err != nil {
t.Fatalf("failed to start member, %v", err)
}
}
func leaseIdToBytes(n int64) []byte {
bytes := make([]byte, 8)
binary.BigEndian.PutUint64(bytes, uint64(n))