moving to new offset slice format
This commit is contained in:
parent
aaccf59191
commit
19318194fa
|
@ -253,19 +253,7 @@ func getDocValueLocs(docNum uint64, metaHeader []zap.MetaData) (uint64, uint64)
|
|||
return metaHeader[i].DocNum >= docNum
|
||||
})
|
||||
if i < len(metaHeader) && metaHeader[i].DocNum == docNum {
|
||||
var start, end uint64
|
||||
if i > 0 {
|
||||
start = metaHeader[i].DocDvOffset
|
||||
}
|
||||
// single element case
|
||||
if i == 0 && len(metaHeader) == 1 {
|
||||
end = metaHeader[i].DocDvOffset
|
||||
} else if i < len(metaHeader)-1 {
|
||||
end = metaHeader[i+1].DocDvOffset
|
||||
} else { // for last element
|
||||
end = start + metaHeader[0].DocDvOffset
|
||||
}
|
||||
return start, end
|
||||
return zap.ReadDocValueBoundary(i, metaHeader)
|
||||
}
|
||||
return math.MaxUint64, math.MaxUint64
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@ import (
|
|||
"github.com/golang/snappy"
|
||||
)
|
||||
|
||||
const version uint32 = 4
|
||||
const version uint32 = 6
|
||||
|
||||
const fieldNotUninverted = math.MaxUint64
|
||||
|
||||
|
|
|
@ -95,13 +95,14 @@ func (c *chunkedContentCoder) flushContents() error {
|
|||
|
||||
// convert the document data lens to data offsets
|
||||
if len(c.chunkMeta) > 1 {
|
||||
c.chunkMeta[1].DocDvOffset, c.chunkMeta[0].DocDvOffset =
|
||||
c.chunkMeta[0].DocDvOffset, c.chunkMeta[1].DocDvOffset
|
||||
for i := 2; i < len(c.chunkMeta); i++ {
|
||||
cur := c.chunkMeta[i].DocDvOffset
|
||||
c.chunkMeta[i].DocDvOffset = c.chunkMeta[i-1].DocDvOffset + c.chunkMeta[0].DocDvOffset
|
||||
c.chunkMeta[0].DocDvOffset = cur
|
||||
var runningOffset uint64
|
||||
var index, i int
|
||||
for i = 1; i < len(c.chunkMeta); i++ {
|
||||
runningOffset += c.chunkMeta[i-1].DocDvOffset
|
||||
c.chunkMeta[index].DocDvOffset = runningOffset
|
||||
index++
|
||||
}
|
||||
c.chunkMeta[index].DocDvOffset = c.chunkMeta[i-1].DocDvOffset
|
||||
}
|
||||
|
||||
// write out the metaData slice
|
||||
|
@ -140,7 +141,7 @@ func (c *chunkedContentCoder) Add(docNum uint64, vals []byte) error {
|
|||
c.currChunk = chunk
|
||||
}
|
||||
|
||||
// mark the data length for this doc
|
||||
// mark the data size for this doc
|
||||
dvSize, err := c.chunkBuf.Write(vals)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -181,3 +182,24 @@ func (c *chunkedContentCoder) Write(w io.Writer) (int, error) {
|
|||
}
|
||||
return tw, nil
|
||||
}
|
||||
|
||||
// ReadDocValueBoundary elicits the start, end offsets from a
|
||||
// starting offset based metaData header slice
|
||||
func ReadDocValueBoundary(chunk int, metaHeaders []MetaData) (uint64, uint64) {
|
||||
var start, end uint64
|
||||
if chunk > len(metaHeaders) {
|
||||
return start, end
|
||||
}
|
||||
|
||||
if chunk > 0 {
|
||||
start = metaHeaders[chunk-1].DocDvOffset
|
||||
}
|
||||
|
||||
if chunk < len(metaHeaders)-1 {
|
||||
end = metaHeaders[chunk].DocDvOffset
|
||||
} else {
|
||||
end = start + metaHeaders[chunk].DocDvOffset
|
||||
}
|
||||
|
||||
return start, end
|
||||
}
|
||||
|
|
|
@ -161,19 +161,7 @@ func (di *docValueIterator) getDocValueLocs(docNum uint64) (uint64, uint64) {
|
|||
return di.curChunkHeader[i].DocNum >= docNum
|
||||
})
|
||||
if i < len(di.curChunkHeader) && di.curChunkHeader[i].DocNum == docNum {
|
||||
var start, end uint64
|
||||
if i > 0 {
|
||||
start = di.curChunkHeader[i].DocDvOffset
|
||||
}
|
||||
// single element case
|
||||
if i == 0 && len(di.curChunkHeader) == 1 {
|
||||
end = di.curChunkHeader[i].DocDvOffset
|
||||
} else if i < len(di.curChunkHeader)-1 {
|
||||
end = di.curChunkHeader[i+1].DocDvOffset
|
||||
} else { // for last element
|
||||
end = start + di.curChunkHeader[0].DocDvOffset
|
||||
}
|
||||
return start, end
|
||||
return ReadDocValueBoundary(i, di.curChunkHeader)
|
||||
}
|
||||
return math.MaxUint64, math.MaxUint64
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue