From b4dfa9d34f7fb7a3a18efefa32e5c9dfc7fcc26c Mon Sep 17 00:00:00 2001 From: Benjamin Wang Date: Sun, 12 Feb 2023 15:30:08 +0800 Subject: [PATCH] test: correct the logic of comparing revision in linearizablity/watch.go Signed-off-by: Benjamin Wang --- tests/linearizability/linearizability_test.go | 6 ++-- tests/linearizability/watch.go | 33 ++++++++++++------- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/tests/linearizability/linearizability_test.go b/tests/linearizability/linearizability_test.go index e01996c55..aa2791542 100644 --- a/tests/linearizability/linearizability_test.go +++ b/tests/linearizability/linearizability_test.go @@ -144,9 +144,7 @@ func TestLinearizability(t *testing.T) { e2e.WithSnapshotCount(100), ), }, - // TODO: investigate periodic `Model is not linearizable` failures - // see https://github.com/etcd-io/etcd/pull/15104#issuecomment-1416371288 - /*{ + { name: "Snapshot", failpoint: RandomSnapshotFailpoint, traffic: &HighTraffic, @@ -156,7 +154,7 @@ func TestLinearizability(t *testing.T) { e2e.WithSnapshotCatchUpEntries(100), e2e.WithPeerProxy(true), ), - },*/ + }, }...) for _, scenario := range scenarios { if scenario.traffic == nil { diff --git a/tests/linearizability/watch.go b/tests/linearizability/watch.go index d4fc5a8cb..4466a4c3a 100644 --- a/tests/linearizability/watch.go +++ b/tests/linearizability/watch.go @@ -82,28 +82,37 @@ func validateWatchResponses(t *testing.T, responses [][]watchResponse, expectPro } func validateMemberWatchResponses(t *testing.T, responses []watchResponse, expectProgressNotify bool) { - var gotProgressNotify = false - var lastRevision int64 = 1 + var ( + gotProgressNotify = false + lastEventModRevision int64 = 1 // The event.Kv.ModRevision in the latest event. + lastHeadRevision int64 = 1 // The resp.Header.Revision in last watch response. + ) for _, resp := range responses { - if resp.Header.Revision < lastRevision { - t.Errorf("Revision should never decrease") + if resp.Header.Revision < lastHeadRevision { + t.Errorf("Server revision should never decrease, lastHeadRevision: %d, resp.Header.Revision: %d", + lastHeadRevision, resp.Header.Revision) } - if resp.IsProgressNotify() && resp.Header.Revision == lastRevision { + + if resp.IsProgressNotify() && resp.Header.Revision == lastHeadRevision { gotProgressNotify = true } - if resp.Header.Revision == lastRevision && len(resp.Events) != 0 { + if resp.Header.Revision == lastHeadRevision && len(resp.Events) != 0 { t.Errorf("Got two non-empty responses about same revision") } + for _, event := range resp.Events { - if event.Kv.ModRevision != lastRevision+1 { - t.Errorf("Expect revision to grow by 1, last: %d, mod: %d", lastRevision, event.Kv.ModRevision) + if event.Kv.ModRevision != lastEventModRevision+1 { + t.Errorf("Expect event revision to grow by 1, last: %d, mod: %d", lastEventModRevision, event.Kv.ModRevision) } - lastRevision = event.Kv.ModRevision + lastEventModRevision = event.Kv.ModRevision } - if resp.Header.Revision != lastRevision { - t.Errorf("Expect response revision equal last event mod revision") + + if resp.Header.Revision < lastEventModRevision { + t.Errorf("Event revision should never exceed the server's revision, lastEventRevision: %d, resp.Header.Revision: %d", + lastEventModRevision, resp.Header.Revision) } - lastRevision = resp.Header.Revision + + lastHeadRevision = resp.Header.Revision } if gotProgressNotify != expectProgressNotify { t.Errorf("Expected progress notify: %v, got: %v", expectProgressNotify, gotProgressNotify)