提交 906d2bd0 作者: Erik Ingenito

Don't do extra work in provider queue loop

License: MIT
Signed-off-by: 's avatarErik Ingenito <erik@carbonfive.com>
上级 6c1eca95
...@@ -2,13 +2,14 @@ package provider ...@@ -2,13 +2,14 @@ package provider
import ( import (
"context" "context"
"github.com/ipfs/go-cid"
"github.com/ipfs/go-datastore"
"github.com/ipfs/go-datastore/namespace"
"github.com/ipfs/go-datastore/query"
"math" "math"
"strconv" "strconv"
"strings" "strings"
cid "github.com/ipfs/go-cid"
datastore "github.com/ipfs/go-datastore"
namespace "github.com/ipfs/go-datastore/namespace"
query "github.com/ipfs/go-datastore/query"
) )
// Queue provides a durable, FIFO interface to the datastore for storing cids // Queue provides a durable, FIFO interface to the datastore for storing cids
...@@ -100,11 +101,16 @@ func (q *Queue) nextEntry() (datastore.Key, cid.Cid) { ...@@ -100,11 +101,16 @@ func (q *Queue) nextEntry() (datastore.Key, cid.Cid) {
// Run dequeues and enqueues when available. // Run dequeues and enqueues when available.
func (q *Queue) work() { func (q *Queue) work() {
go func() { go func() {
var k datastore.Key = datastore.Key{}
var c cid.Cid = cid.Undef
for { for {
k, c := q.nextEntry() if c == cid.Undef {
var dequeue chan cid.Cid k, c = q.nextEntry()
}
// If c != cid.Undef set dequeue and attempt write, otherwise wait for enqueue
var dequeue chan cid.Cid
if c != cid.Undef { if c != cid.Undef {
dequeue = q.dequeue dequeue = q.dequeue
} }
...@@ -126,7 +132,7 @@ func (q *Queue) work() { ...@@ -126,7 +132,7 @@ func (q *Queue) work() {
log.Errorf("Failed to delete queued cid %s with key %s: %s", c, k, err) log.Errorf("Failed to delete queued cid %s with key %s: %s", c, k, err)
continue continue
} }
c = cid.Undef
q.head++ q.head++
case <-q.ctx.Done(): case <-q.ctx.Done():
return return
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论