mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
test: fix TestHashKVWhenCompacting: ensure all goroutine finished
Signed-off-by: Benjamin Wang <benjamin.ahrtr@gmail.com>
This commit is contained in:
parent
a818d07317
commit
c647614b6a
@ -562,6 +562,7 @@ func TestHashKVWhenCompacting(t *testing.T) {
|
|||||||
hashCompactc := make(chan hashKVResult, 1)
|
hashCompactc := make(chan hashKVResult, 1)
|
||||||
var wg sync.WaitGroup
|
var wg sync.WaitGroup
|
||||||
donec := make(chan struct{})
|
donec := make(chan struct{})
|
||||||
|
stopc := make(chan struct{})
|
||||||
|
|
||||||
// Call HashByRev(10000) in multiple goroutines until donec is closed
|
// Call HashByRev(10000) in multiple goroutines until donec is closed
|
||||||
for i := 0; i < 10; i++ {
|
for i := 0; i < 10; i++ {
|
||||||
@ -574,6 +575,8 @@ func TestHashKVWhenCompacting(t *testing.T) {
|
|||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
select {
|
select {
|
||||||
|
case <-stopc:
|
||||||
|
return
|
||||||
case <-donec:
|
case <-donec:
|
||||||
return
|
return
|
||||||
case hashCompactc <- hashKVResult{hash.Hash, hash.CompactRevision}:
|
case hashCompactc <- hashKVResult{hash.Hash, hash.CompactRevision}:
|
||||||
@ -597,6 +600,8 @@ func TestHashKVWhenCompacting(t *testing.T) {
|
|||||||
if r.hash != revHash[r.compactRev] {
|
if r.hash != revHash[r.compactRev] {
|
||||||
t.Errorf("Hashes differ (current %v) != (saved %v)", r.hash, revHash[r.compactRev])
|
t.Errorf("Hashes differ (current %v) != (saved %v)", r.hash, revHash[r.compactRev])
|
||||||
}
|
}
|
||||||
|
case <-stopc:
|
||||||
|
return
|
||||||
case <-donec:
|
case <-donec:
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -604,9 +609,20 @@ func TestHashKVWhenCompacting(t *testing.T) {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
// Compact the store in a goroutine, using RevisionTombstone 9900 to 10000 and close donec when finished
|
// Compact the store in a goroutine, using RevisionTombstone 9900 to 10000 and close donec when finished
|
||||||
|
wg.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
defer close(donec)
|
defer func() {
|
||||||
|
close(donec)
|
||||||
|
wg.Done()
|
||||||
|
}()
|
||||||
|
|
||||||
for i := 100; i >= 0; i-- {
|
for i := 100; i >= 0; i-- {
|
||||||
|
select {
|
||||||
|
case <-stopc:
|
||||||
|
return
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
|
||||||
_, err := s.Compact(traceutil.TODO(), int64(rev-i))
|
_, err := s.Compact(traceutil.TODO(), int64(rev-i))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
@ -620,10 +636,14 @@ func TestHashKVWhenCompacting(t *testing.T) {
|
|||||||
|
|
||||||
select {
|
select {
|
||||||
case <-donec:
|
case <-donec:
|
||||||
wg.Wait()
|
|
||||||
case <-time.After(10 * time.Second):
|
case <-time.After(10 * time.Second):
|
||||||
|
close(stopc)
|
||||||
|
wg.Wait()
|
||||||
testutil.FatalStack(t, "timeout")
|
testutil.FatalStack(t, "timeout")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
close(stopc)
|
||||||
|
wg.Wait()
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestHashKVWithCompactedAndFutureRevisions ensures that HashKV returns a correct hash when called
|
// TestHashKVWithCompactedAndFutureRevisions ensures that HashKV returns a correct hash when called
|
||||||
|
Loading…
x
Reference in New Issue
Block a user