0
0

Merge pull request #659 from steveyen/scorch

scorch removed worker goroutines from TermFieldReader()
This commit is contained in:
Marty Schoch 2017-12-15 15:20:07 -05:00 committed by GitHub
commit 0c0f05e398
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 39 deletions

View File

@ -341,27 +341,6 @@ func (i *IndexSnapshot) InternalID(id string) (rv index.IndexInternalID, err err
func (i *IndexSnapshot) TermFieldReader(term []byte, field string, includeFreq,
includeNorm, includeTermVectors bool) (index.TermFieldReader, error) {
results := make(chan *asynchSegmentResult)
for index, segment := range i.segment {
go func(index int, segment *SegmentSnapshot) {
dict, err := segment.Dictionary(field)
if err != nil {
results <- &asynchSegmentResult{err: err}
} else {
pl, err := dict.PostingsList(string(term), nil)
if err != nil {
results <- &asynchSegmentResult{err: err}
} else {
results <- &asynchSegmentResult{
index: index,
postings: pl,
}
}
}
}(index, segment)
}
var err error
rv := &IndexSnapshotTermFieldReader{
term: term,
snapshot: i,
@ -371,26 +350,27 @@ func (i *IndexSnapshot) TermFieldReader(term []byte, field string, includeFreq,
includeNorm: includeNorm,
includeTermVectors: includeTermVectors,
}
for count := 0; count < len(i.segment); count++ {
asr := <-results
if asr.err != nil && err == nil {
err = asr.err
} else {
rv.postings[asr.index] = asr.postings
rv.iterators[asr.index] = asr.postings.Iterator()
for i, segment := range i.segment {
dict, err := segment.Dictionary(field)
if err != nil {
return nil, err
}
}
if err != nil {
return nil, err
pl, err := dict.PostingsList(string(term), nil)
if err != nil {
return nil, err
}
rv.postings[i] = pl
rv.iterators[i] = pl.Iterator()
}
return rv, nil
}
func docNumberToBytes(in uint64) []byte {
buf := new(bytes.Buffer)
_ = binary.Write(buf, binary.BigEndian, in)
return buf.Bytes()
func docNumberToBytes(buf []byte, in uint64) []byte {
if len(buf) != 8 {
buf = make([]byte, 8)
}
binary.BigEndian.PutUint64(buf, in)
return buf
}
func docInternalToNumber(in index.IndexInternalID) (uint64, error) {

View File

@ -36,7 +36,7 @@ func (i *IndexSnapshotDocIDReader) Next() (index.IndexInternalID, error) {
next := i.iterators[i.segmentOffset].Next()
// make segment number into global number by adding offset
globalOffset := i.snapshot.offsets[i.segmentOffset]
return docNumberToBytes(uint64(next) + globalOffset), nil
return docNumberToBytes(nil, uint64(next)+globalOffset), nil
}
return nil, nil
}

View File

@ -49,8 +49,7 @@ func (i *IndexSnapshotTermFieldReader) Next(preAlloced *index.TermFieldDoc) (*in
// make segment number into global number by adding offset
globalOffset := i.snapshot.offsets[i.segmentOffset]
nnum := next.Number()
rv.ID = docNumberToBytes(nnum + globalOffset)
rv.ID = docNumberToBytes(rv.ID, nnum+globalOffset)
i.postingToTermFieldDoc(next, rv)
i.currID = rv.ID