optimize collector to check ctx.Done() only occasionally
This commit is contained in:
parent
cbb174b074
commit
b8c8478783
|
@ -57,6 +57,8 @@ func (tksc *TopScoreCollector) Took() time.Duration {
|
||||||
return tksc.took
|
return tksc.took
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var COLLECT_CHECK_DONE_EVERY = uint64(1024)
|
||||||
|
|
||||||
func (tksc *TopScoreCollector) Collect(ctx context.Context, searcher search.Searcher) error {
|
func (tksc *TopScoreCollector) Collect(ctx context.Context, searcher search.Searcher) error {
|
||||||
startTime := time.Now()
|
startTime := time.Now()
|
||||||
var err error
|
var err error
|
||||||
|
@ -69,19 +71,21 @@ func (tksc *TopScoreCollector) Collect(ctx context.Context, searcher search.Sear
|
||||||
next, err = searcher.Next(&pre)
|
next, err = searcher.Next(&pre)
|
||||||
}
|
}
|
||||||
for err == nil && next != nil {
|
for err == nil && next != nil {
|
||||||
select {
|
if tksc.total%COLLECT_CHECK_DONE_EVERY == 0 {
|
||||||
case <-ctx.Done():
|
select {
|
||||||
return ctx.Err()
|
case <-ctx.Done():
|
||||||
default:
|
return ctx.Err()
|
||||||
tksc.collectSingle(next)
|
default:
|
||||||
if tksc.facetsBuilder != nil {
|
|
||||||
err = tksc.facetsBuilder.Update(next)
|
|
||||||
if err != nil {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
next, err = searcher.Next(pre.Reset())
|
|
||||||
}
|
}
|
||||||
|
tksc.collectSingle(next)
|
||||||
|
if tksc.facetsBuilder != nil {
|
||||||
|
err = tksc.facetsBuilder.Update(next)
|
||||||
|
if err != nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
next, err = searcher.Next(pre.Reset())
|
||||||
}
|
}
|
||||||
// compute search duration
|
// compute search duration
|
||||||
tksc.took = time.Since(startTime)
|
tksc.took = time.Since(startTime)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user