0
0

optimize collector to check ctx.Done() only occasionally

This commit is contained in:
Steve Yen 2016-07-21 10:22:06 -07:00
parent cbb174b074
commit b8c8478783

View File

@ -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,10 +71,13 @@ 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 {
if tksc.total%COLLECT_CHECK_DONE_EVERY == 0 {
select { select {
case <-ctx.Done(): case <-ctx.Done():
return ctx.Err() return ctx.Err()
default: default:
}
}
tksc.collectSingle(next) tksc.collectSingle(next)
if tksc.facetsBuilder != nil { if tksc.facetsBuilder != nil {
err = tksc.facetsBuilder.Update(next) err = tksc.facetsBuilder.Update(next)
@ -82,7 +87,6 @@ func (tksc *TopScoreCollector) Collect(ctx context.Context, searcher search.Sear
} }
next, err = searcher.Next(pre.Reset()) next, err = searcher.Next(pre.Reset())
} }
}
// compute search duration // compute search duration
tksc.took = time.Since(startTime) tksc.took = time.Since(startTime)
if err != nil { if err != nil {