mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-09-07 00:55:55 +00:00
fix race in view.openFragmentsInTx
This commit is contained in:
parent
38eea9b4a7
commit
71eccd121d
1 changed files with 15 additions and 2 deletions
17
view.go
17
view.go
|
|
@ -175,19 +175,32 @@ func (v *view) openFragmentsInTx() error {
|
|||
eg, ctx := errgroup.WithContext(context.Background())
|
||||
var mu sync.Mutex
|
||||
|
||||
shardCh := make(chan uint64, len(shards))
|
||||
for i := range shards {
|
||||
shardCh <- shards[i]
|
||||
}
|
||||
|
||||
shardLoop:
|
||||
for _, shard := range shards {
|
||||
for range shards {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
break shardLoop
|
||||
default:
|
||||
|
||||
workQueue <- struct{}{}
|
||||
v.holder.Logger.Debugf("open index/field/view/fragment: %s/%s/%s/%d", v.index, v.field, v.name, shard)
|
||||
eg.Go(func() error {
|
||||
defer func() {
|
||||
<-workQueue
|
||||
}()
|
||||
|
||||
var shard uint64
|
||||
select {
|
||||
case shard = <-shardCh:
|
||||
default:
|
||||
return nil // no more work
|
||||
}
|
||||
v.holder.Logger.Debugf("open index/field/view/fragment: %s/%s/%s/%d", v.index, v.field, v.name, shard)
|
||||
|
||||
frag := v.newFragment(v.fragmentPath(shard), shard)
|
||||
if err := frag.Open(); err != nil {
|
||||
return fmt.Errorf("open fragment: shard=%d, err=%s", frag.shard, err)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue