compactor: Fix data race in revision compactor test
Use atomic functions to manipulate `rev` of `fakeRevGetter` so that the tester goroutine can update the value without race with the compactor's goroutine.
This commit is contained in:
@ -15,6 +15,8 @@
|
|||||||
package compactor
|
package compactor
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"sync/atomic"
|
||||||
|
|
||||||
pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
|
pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
|
||||||
"github.com/coreos/etcd/pkg/testutil"
|
"github.com/coreos/etcd/pkg/testutil"
|
||||||
"golang.org/x/net/context"
|
"golang.org/x/net/context"
|
||||||
@ -36,6 +38,10 @@ type fakeRevGetter struct {
|
|||||||
|
|
||||||
func (fr *fakeRevGetter) Rev() int64 {
|
func (fr *fakeRevGetter) Rev() int64 {
|
||||||
fr.Record(testutil.Action{Name: "g"})
|
fr.Record(testutil.Action{Name: "g"})
|
||||||
fr.rev++
|
rev := atomic.AddInt64(&fr.rev, 1)
|
||||||
return fr.rev
|
return rev
|
||||||
|
}
|
||||||
|
|
||||||
|
func (fr *fakeRevGetter) SetRev(rev int64) {
|
||||||
|
atomic.StoreInt64(&fr.rev, rev)
|
||||||
}
|
}
|
||||||
|
@ -42,7 +42,7 @@ func TestRevision(t *testing.T) {
|
|||||||
rg.Wait(1)
|
rg.Wait(1)
|
||||||
// nothing happens
|
// nothing happens
|
||||||
|
|
||||||
rg.rev = 99 // will be 100
|
rg.SetRev(99) // will be 100
|
||||||
expectedRevision := int64(90)
|
expectedRevision := int64(90)
|
||||||
fc.Advance(checkCompactionInterval)
|
fc.Advance(checkCompactionInterval)
|
||||||
rg.Wait(1)
|
rg.Wait(1)
|
||||||
@ -55,12 +55,12 @@ func TestRevision(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// skip the same revision
|
// skip the same revision
|
||||||
rg.rev = 99 // will be 100
|
rg.SetRev(99) // will be 100
|
||||||
expectedRevision = int64(90)
|
expectedRevision = int64(90)
|
||||||
rg.Wait(1)
|
rg.Wait(1)
|
||||||
// nothing happens
|
// nothing happens
|
||||||
|
|
||||||
rg.rev = 199 // will be 200
|
rg.SetRev(199) // will be 200
|
||||||
expectedRevision = int64(190)
|
expectedRevision = int64(190)
|
||||||
fc.Advance(checkCompactionInterval)
|
fc.Advance(checkCompactionInterval)
|
||||||
rg.Wait(1)
|
rg.Wait(1)
|
||||||
|
Reference in New Issue
Block a user