diff --git a/tests/robustness/client/client.go b/tests/robustness/client/client.go index 516e5d5df8dc..6ca9b76ec83b 100644 --- a/tests/robustness/client/client.go +++ b/tests/robustness/client/client.go @@ -316,6 +316,7 @@ func ToWatchResponse(r clientv3.WatchResponse, baseTime time.Time) model.WatchRe } resp.IsProgressNotify = r.IsProgressNotify() resp.Revision = r.Header.Revision + resp.MemberId = r.Header.MemberId err := r.Err() if err != nil { resp.Error = r.Err().Error() diff --git a/tests/robustness/model/watch.go b/tests/robustness/model/watch.go index fc880e30ede6..5d8bd38b920a 100644 --- a/tests/robustness/model/watch.go +++ b/tests/robustness/model/watch.go @@ -26,5 +26,6 @@ type WatchResponse struct { IsProgressNotify bool Revision int64 Time time.Duration + MemberId uint64 Error string } diff --git a/tests/robustness/validate/watch.go b/tests/robustness/validate/watch.go index e270e4118f3b..50d94af0abb3 100644 --- a/tests/robustness/validate/watch.go +++ b/tests/robustness/validate/watch.go @@ -125,14 +125,18 @@ func validateBookmarkable(lg *zap.Logger, report report.ClientReport) (err error func validateOrdered(lg *zap.Logger, report report.ClientReport) (err error) { for _, op := range report.Watch { - var lastEventRevision int64 = 1 + lastEventRevision := make(map[uint64]int64) for _, resp := range op.Responses { for _, event := range resp.Events { - if event.Revision < lastEventRevision { - lg.Error("Broke watch guarantee", zap.String("guarantee", "ordered"), zap.Int("client", report.ClientID), zap.Int64("revision", event.Revision)) + if _, ok := lastEventRevision[resp.MemberId]; !ok { + lastEventRevision[resp.MemberId] = 1 + } + if event.Revision < lastEventRevision[resp.MemberId] { + lg.Error("Broke watch guarantee", zap.String("guarantee", "ordered"), zap.Int("client", report.ClientID), zap.Int64("revision", event.Revision), zap.Uint64("member", resp.MemberId)) err = errBrokeOrdered } - lastEventRevision = event.Revision + lastEventRevision[resp.MemberId] = event.Revision + } } }