From 74b2eeb14d4a27c68f0ed0c25e4d40cad7dc27e1 Mon Sep 17 00:00:00 2001 From: Marty Schoch Date: Mon, 11 Dec 2017 15:59:36 -0500 Subject: [PATCH] refactor where we do some work so we can return error --- index/scorch/segment/zap/dict.go | 15 +++++++++++++- index/scorch/segment/zap/posting.go | 31 ++++++++++------------------- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/index/scorch/segment/zap/dict.go b/index/scorch/segment/zap/dict.go index e4824851..5d3c160b 100644 --- a/index/scorch/segment/zap/dict.go +++ b/index/scorch/segment/zap/dict.go @@ -60,8 +60,21 @@ func (d *Dictionary) postingsList(term string, except *roaring.Bitmap) (*Posting n += uint64(read) rv.locOffset, read = binary.Uvarint(d.segment.mm[postingsOffset+n : postingsOffset+n+binary.MaxVarintLen64]) n += uint64(read) - rv.locBitmapOffset, read = binary.Uvarint(d.segment.mm[postingsOffset+n : postingsOffset+n+binary.MaxVarintLen64]) + + var locBitmapOffset uint64 + locBitmapOffset, read = binary.Uvarint(d.segment.mm[postingsOffset+n : postingsOffset+n+binary.MaxVarintLen64]) n += uint64(read) + + // go ahead and load loc bitmap + var locBitmapLen uint64 + locBitmapLen, read = binary.Uvarint(d.segment.mm[locBitmapOffset : locBitmapOffset+binary.MaxVarintLen64]) + locRoaringBytes := d.segment.mm[locBitmapOffset+uint64(read) : locBitmapOffset+uint64(read)+locBitmapLen] + rv.locBitmap = roaring.NewBitmap() + _, err := rv.locBitmap.FromBuffer(locRoaringBytes) + if err != nil { + return nil, fmt.Errorf("error loading roaring bitmap of locations with hits: %v", err) + } + var postingsLen uint64 postingsLen, read = binary.Uvarint(d.segment.mm[postingsOffset+n : postingsOffset+n+binary.MaxVarintLen64]) n += uint64(read) diff --git a/index/scorch/segment/zap/posting.go b/index/scorch/segment/zap/posting.go index 051cfef8..eb5218d2 100644 --- a/index/scorch/segment/zap/posting.go +++ b/index/scorch/segment/zap/posting.go @@ -27,15 +27,15 @@ import ( // PostingsList is an in-memory represenation of a postings list type PostingsList struct { - dictionary *Dictionary - term string - postingsOffset uint64 - freqOffset uint64 - locOffset uint64 - locBitmapOffset uint64 - postings *roaring.Bitmap - except *roaring.Bitmap - postingKey []byte + dictionary *Dictionary + term string + postingsOffset uint64 + freqOffset uint64 + locOffset uint64 + locBitmap *roaring.Bitmap + postings *roaring.Bitmap + except *roaring.Bitmap + postingKey []byte } // Iterator returns an iterator for this postings list @@ -68,18 +68,7 @@ func (p *PostingsList) Iterator() segment.PostingsIterator { n += uint64(read) } rv.locChunkStart = p.locOffset + n - - var locBitmapLen uint64 - locBitmapLen, read = binary.Uvarint(p.dictionary.segment.mm[p.locBitmapOffset : p.locBitmapOffset+binary.MaxVarintLen64]) - roaringBytes := p.dictionary.segment.mm[p.locBitmapOffset+uint64(read) : p.locBitmapOffset+uint64(read)+locBitmapLen] - bitmap := roaring.NewBitmap() - _, err := bitmap.FromBuffer(roaringBytes) - if err != nil { - // return nil, fmt.Errorf("error loading roaring bitmap: %v", err) - // FIXME dont break api yet - panic("i died") - } - rv.locBitmap = bitmap + rv.locBitmap = p.locBitmap rv.all = p.postings.Iterator() if p.except != nil {