mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
integration: permit dropping intermediate leader values on observe
Weaken TestV3ElectionObserve so it only checks that it observes a strictly monotonically ascending leader transition sequence following the first observed leader. First, the Observe will issue the leader channel before getting a response for its first get; the election revision is only bound after returning the channel. So, Observe can't be expected to always return the leader at the time it was started. Second, Observe fetches the current leader based on its create revision, but begins watching on its ModRevision; this is important so that elections still work in case the leader issues proclamations following a compaction that exceeds its creation revision. So, Observe can't be expected to return the entire proclamation sequence for a single leader. Fixes #7749
This commit is contained in:
parent
7da451640f
commit
e6a789d541
@ -96,7 +96,7 @@ func TestV3ElectionObserve(t *testing.T) {
|
||||
|
||||
lc := epb.NewElectionClient(clus.Client(0).ActiveConnection())
|
||||
|
||||
// observe 10 leadership events
|
||||
// observe leadership events
|
||||
observec := make(chan struct{})
|
||||
go func() {
|
||||
defer close(observec)
|
||||
@ -110,9 +110,13 @@ func TestV3ElectionObserve(t *testing.T) {
|
||||
if rerr != nil {
|
||||
t.Fatal(rerr)
|
||||
}
|
||||
if string(resp.Kv.Value) != fmt.Sprintf("%d", i) {
|
||||
t.Fatalf(`got observe value %q, expected "%d"`, string(resp.Kv.Value), i)
|
||||
respV := 0
|
||||
fmt.Sscanf(string(resp.Kv.Value), "%d", &respV)
|
||||
// leader transitions should not go backwards
|
||||
if respV < i {
|
||||
t.Fatalf(`got observe value %q, expected >= "%d"`, string(resp.Kv.Value), i)
|
||||
}
|
||||
i = respV
|
||||
}
|
||||
}()
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user