mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
Merge pull request #4521 from heyitsanthony/fix-doublebarrierfailover
contrib/recipes: fix revision race in double barrier
This commit is contained in:
commit
925629dad8
@ -60,7 +60,7 @@ func (b *DoubleBarrier) Enter() error {
|
||||
_, err = WaitEvents(
|
||||
b.client,
|
||||
b.key+"/ready",
|
||||
resp.Header.Revision,
|
||||
ek.Revision(),
|
||||
[]storagepb.Event_EventType{storagepb.PUT})
|
||||
return err
|
||||
}
|
||||
@ -100,7 +100,7 @@ func (b *DoubleBarrier) Leave() error {
|
||||
_, err = WaitEvents(
|
||||
b.client,
|
||||
string(highest.Key),
|
||||
resp.Header.Revision,
|
||||
highest.ModRevision,
|
||||
[]storagepb.Event_EventType{storagepb.DELETE})
|
||||
if err != nil {
|
||||
return err
|
||||
@ -117,7 +117,7 @@ func (b *DoubleBarrier) Leave() error {
|
||||
_, err = WaitEvents(
|
||||
b.client,
|
||||
key,
|
||||
resp.Header.Revision,
|
||||
lowest.ModRevision,
|
||||
[]storagepb.Event_EventType{storagepb.DELETE})
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -112,13 +112,21 @@ func TestDoubleBarrierFailover(t *testing.T) {
|
||||
|
||||
// wait for barrier enter to unblock
|
||||
for i := 0; i < waiters; i++ {
|
||||
<-donec
|
||||
select {
|
||||
case <-donec:
|
||||
case <-time.After(10 * time.Second):
|
||||
t.Fatalf("timed out waiting for enter, %d", i)
|
||||
}
|
||||
}
|
||||
// kill lease, expect Leave unblock
|
||||
recipe.RevokeSessionLease(clus.clients[0])
|
||||
// join on rest of waiters
|
||||
for i := 0; i < waiters-1; i++ {
|
||||
<-donec
|
||||
select {
|
||||
case <-donec:
|
||||
case <-time.After(10 * time.Second):
|
||||
t.Fatalf("timed out waiting for leave, %d", i)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user