mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
Merge pull request #16156 from kensou97/fix-barrier
clientv3: remove v3.WithFirstKey() in Barrier.Wait()
This commit is contained in:
commit
93bfdba265
@ -49,7 +49,7 @@ func (b *Barrier) Release() error {
|
||||
// Wait blocks on the barrier key until it is deleted. If there is no key, Wait
|
||||
// assumes Release has already been called and returns immediately.
|
||||
func (b *Barrier) Wait() error {
|
||||
resp, err := b.client.Get(b.ctx, b.key, v3.WithFirstKey()...)
|
||||
resp, err := b.client.Get(b.ctx, b.key)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -83,3 +83,42 @@ func testBarrier(t *testing.T, waiters int, chooseClient func() *clientv3.Client
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestBarrierWaitNonexistentKey(t *testing.T) {
|
||||
integration2.BeforeTest(t)
|
||||
clus := integration2.NewCluster(t, &integration2.ClusterConfig{Size: 1})
|
||||
defer clus.Terminate(t)
|
||||
cli := clus.Client(0)
|
||||
|
||||
if _, err := cli.Put(cli.Ctx(), "test-barrier-0", ""); err != nil {
|
||||
t.Errorf("could not put test-barrier0, err:%v", err)
|
||||
}
|
||||
|
||||
donec := make(chan struct{})
|
||||
stopc := make(chan struct{})
|
||||
defer close(stopc)
|
||||
|
||||
waiters := 5
|
||||
for i := 0; i < waiters; i++ {
|
||||
go func() {
|
||||
br := recipe.NewBarrier(cli, "test-barrier")
|
||||
if err := br.Wait(); err != nil {
|
||||
t.Errorf("could not wait on barrier (%v)", err)
|
||||
}
|
||||
select {
|
||||
case donec <- struct{}{}:
|
||||
case <-stopc:
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
// all waiters should return immediately if waiting on a nonexistent key "test-barrier" even if key "test-barrier-0" exists
|
||||
timerC := time.After(time.Duration(waiters*100) * time.Millisecond)
|
||||
for i := 0; i < waiters; i++ {
|
||||
select {
|
||||
case <-timerC:
|
||||
t.Fatal("barrier timed out")
|
||||
case <-donec:
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user