shard/test: Fix data race in metrics tests #666
1 changed files with 47 additions and 24 deletions
|
@ -36,6 +36,29 @@ func (m *metricsStore) SetObjectCounter(objectType string, v uint64) {
|
|||
m.objCounters[objectType] = v
|
||||
}
|
||||
|
||||
func (m *metricsStore) getObjectCounter(objectType string) uint64 {
|
||||
m.mtx.Lock()
|
||||
defer m.mtx.Unlock()
|
||||
return m.objCounters[objectType]
|
||||
}
|
||||
|
||||
func (m *metricsStore) containerSizes() map[string]int64 {
|
||||
m.mtx.Lock()
|
||||
defer m.mtx.Unlock()
|
||||
|
||||
r := make(map[string]int64, len(m.cnrSize))
|
||||
for c, s := range m.cnrSize {
|
||||
r[c] = s
|
||||
}
|
||||
return r
|
||||
}
|
||||
|
||||
func (m *metricsStore) payloadSize() int64 {
|
||||
m.mtx.Lock()
|
||||
defer m.mtx.Unlock()
|
||||
return m.pldSize
|
||||
}
|
||||
|
||||
func (m *metricsStore) AddToObjectCounter(objectType string, delta int) {
|
||||
m.mtx.Lock()
|
||||
defer m.mtx.Unlock()
|
||||
|
@ -124,10 +147,10 @@ func TestCounters(t *testing.T) {
|
|||
}
|
||||
|
||||
t.Run("defaults", func(t *testing.T) {
|
||||
require.Zero(t, mm.objCounters[physical])
|
||||
require.Zero(t, mm.objCounters[logical])
|
||||
require.Empty(t, mm.cnrSize)
|
||||
require.Zero(t, mm.pldSize)
|
||||
require.Zero(t, mm.getObjectCounter(physical))
|
||||
require.Zero(t, mm.getObjectCounter(logical))
|
||||
require.Empty(t, mm.containerSizes())
|
||||
require.Zero(t, mm.payloadSize())
|
||||
})
|
||||
|
||||
var totalPayload int64
|
||||
|
@ -150,10 +173,10 @@ func TestCounters(t *testing.T) {
|
|||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
require.Equal(t, uint64(objNumber), mm.objCounters[physical])
|
||||
require.Equal(t, uint64(objNumber), mm.objCounters[logical])
|
||||
require.Equal(t, expectedSizes, mm.cnrSize)
|
||||
require.Equal(t, totalPayload, mm.pldSize)
|
||||
require.Equal(t, uint64(objNumber), mm.getObjectCounter(physical))
|
||||
require.Equal(t, uint64(objNumber), mm.getObjectCounter(logical))
|
||||
require.Equal(t, expectedSizes, mm.containerSizes())
|
||||
require.Equal(t, totalPayload, mm.payloadSize())
|
||||
})
|
||||
|
||||
t.Run("inhume_GC", func(t *testing.T) {
|
||||
|
@ -167,10 +190,10 @@ func TestCounters(t *testing.T) {
|
|||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
require.Equal(t, uint64(objNumber), mm.objCounters[physical])
|
||||
require.Equal(t, uint64(objNumber-inhumedNumber), mm.objCounters[logical])
|
||||
require.Equal(t, expectedSizes, mm.cnrSize)
|
||||
require.Equal(t, totalPayload, mm.pldSize)
|
||||
require.Equal(t, uint64(objNumber), mm.getObjectCounter(physical))
|
||||
require.Equal(t, uint64(objNumber-inhumedNumber), mm.getObjectCounter(logical))
|
||||
require.Equal(t, expectedSizes, mm.containerSizes())
|
||||
require.Equal(t, totalPayload, mm.payloadSize())
|
||||
|
||||
oo = oo[inhumedNumber:]
|
||||
})
|
||||
|
@ -179,8 +202,8 @@ func TestCounters(t *testing.T) {
|
|||
var prm shard.InhumePrm
|
||||
ts := objectcore.AddressOf(testutil.GenerateObject())
|
||||
|
||||
phy := mm.objCounters[physical]
|
||||
logic := mm.objCounters[logical]
|
||||
phy := mm.getObjectCounter(physical)
|
||||
logic := mm.getObjectCounter(logical)
|
||||
|
||||
inhumedNumber := int(phy / 4)
|
||||
prm.SetTarget(ts, addrFromObjs(oo[:inhumedNumber])...)
|
||||
|
@ -188,10 +211,10 @@ func TestCounters(t *testing.T) {
|
|||
_, err := sh.Inhume(context.Background(), prm)
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, phy, mm.objCounters[physical])
|
||||
require.Equal(t, logic-uint64(inhumedNumber), mm.objCounters[logical])
|
||||
require.Equal(t, expectedSizes, mm.cnrSize)
|
||||
require.Equal(t, totalPayload, mm.pldSize)
|
||||
require.Equal(t, phy, mm.getObjectCounter(physical))
|
||||
require.Equal(t, logic-uint64(inhumedNumber), mm.getObjectCounter(logical))
|
||||
require.Equal(t, expectedSizes, mm.containerSizes())
|
||||
require.Equal(t, totalPayload, mm.payloadSize())
|
||||
|
||||
oo = oo[inhumedNumber:]
|
||||
})
|
||||
|
@ -199,8 +222,8 @@ func TestCounters(t *testing.T) {
|
|||
t.Run("Delete", func(t *testing.T) {
|
||||
var prm shard.DeletePrm
|
||||
|
||||
phy := mm.objCounters[physical]
|
||||
logic := mm.objCounters[logical]
|
||||
phy := mm.getObjectCounter(physical)
|
||||
logic := mm.getObjectCounter(logical)
|
||||
|
||||
deletedNumber := int(phy / 4)
|
||||
prm.SetAddresses(addrFromObjs(oo[:deletedNumber])...)
|
||||
|
@ -208,8 +231,8 @@ func TestCounters(t *testing.T) {
|
|||
_, err := sh.Delete(context.Background(), prm)
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, phy-uint64(deletedNumber), mm.objCounters[physical])
|
||||
require.Equal(t, logic-uint64(deletedNumber), mm.objCounters[logical])
|
||||
require.Equal(t, phy-uint64(deletedNumber), mm.getObjectCounter(physical))
|
||||
require.Equal(t, logic-uint64(deletedNumber), mm.getObjectCounter(logical))
|
||||
var totalRemovedpayload uint64
|
||||
for i := range oo[:deletedNumber] {
|
||||
removedPayload := oo[i].PayloadSize()
|
||||
|
@ -218,8 +241,8 @@ func TestCounters(t *testing.T) {
|
|||
cnr, _ := oo[i].ContainerID()
|
||||
expectedSizes[cnr.EncodeToString()] -= int64(removedPayload)
|
||||
}
|
||||
require.Equal(t, expectedSizes, mm.cnrSize)
|
||||
require.Equal(t, totalPayload-int64(totalRemovedpayload), mm.pldSize)
|
||||
require.Equal(t, expectedSizes, mm.containerSizes())
|
||||
require.Equal(t, totalPayload-int64(totalRemovedpayload), mm.payloadSize())
|
||||
})
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue