Skip to content

Commit

Permalink
Merge pull request #14429 from ahrtr/alarm_list_ci_3.5
Browse files Browse the repository at this point in the history
[3.5] Move consistent_index forward when executing alarmList operation
  • Loading branch information
ahrtr committed Sep 6, 2022
2 parents 747bf5c + 5c8aa08 commit 204c031
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 3 deletions.
5 changes: 2 additions & 3 deletions server/etcdserver/server.go
Expand Up @@ -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 {
Expand All @@ -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)
}
}()
Expand Down Expand Up @@ -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)
}

Expand Down
26 changes: 26 additions & 0 deletions tests/integration/v3_alarm_test.go
Expand Up @@ -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))
Expand Down

0 comments on commit 204c031

Please sign in to comment.