Fix race cond
This commit is contained in:
parent
b8a75434c9
commit
d64b8844a5
@ -411,9 +411,6 @@ type driveStats struct {
|
||||
itemsFound int64
|
||||
}
|
||||
|
||||
// global counter
|
||||
var ctr int32
|
||||
|
||||
// populateItems iterates through items added to the collection
|
||||
// and uses the collection `itemReader` to read the item
|
||||
func (oc *Collection) populateItems(ctx context.Context, errs *fault.Bus) {
|
||||
@ -455,13 +452,13 @@ func (oc *Collection) populateItems(ctx context.Context, errs *fault.Bus) {
|
||||
defer wg.Done()
|
||||
defer func() { <-semaphoreCh }()
|
||||
|
||||
itf := []extensions.CreateItemExtensioner{
|
||||
&extensions.MockItemExtensionFactory{
|
||||
ItemNumber: ctr,
|
||||
},
|
||||
}
|
||||
var itf []extensions.CreateItemExtensioner
|
||||
|
||||
atomic.AddInt32(&ctr, 1)
|
||||
if item.GetFile() != nil {
|
||||
itf = []extensions.CreateItemExtensioner{
|
||||
extensions.GetMockExtensions(),
|
||||
}
|
||||
}
|
||||
|
||||
// Read the item
|
||||
oc.populateDriveItem(
|
||||
|
||||
@ -33,8 +33,7 @@ type MockExtension struct {
|
||||
}
|
||||
|
||||
func (me *MockExtension) Read(p []byte) (int, error) {
|
||||
// randomly fail with 50% prob
|
||||
if me.ItemNumber > 3 {
|
||||
if me.ItemNumber > 1 {
|
||||
return 0, clues.New("mock read error")
|
||||
}
|
||||
|
||||
@ -103,6 +102,8 @@ func (m *MockItemExtensionFactory) CreateItemExtension(
|
||||
return nil, clues.New("factory error")
|
||||
}
|
||||
|
||||
logger.Ctx(ctx).Infow("mock extension created", "itemnumber", m.ItemNumber)
|
||||
|
||||
return &MockExtension{
|
||||
Ctx: ctx,
|
||||
InnerRc: rc,
|
||||
@ -113,3 +114,14 @@ func (m *MockItemExtensionFactory) CreateItemExtension(
|
||||
ItemNumber: m.ItemNumber,
|
||||
}, nil
|
||||
}
|
||||
|
||||
var ctr int32
|
||||
|
||||
func GetMockExtensions() CreateItemExtensioner {
|
||||
atomic.AddInt32(&ctr, 1)
|
||||
mf := &MockItemExtensionFactory{
|
||||
ItemNumber: ctr,
|
||||
}
|
||||
|
||||
return mf
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user