0
0
Fork 0

moving to new offset slice format

This commit is contained in:
Sreekanth Sivasankaran 2018-03-13 14:06:48 +05:30
parent aaccf59191
commit 19318194fa
4 changed files with 32 additions and 34 deletions

View File

@ -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
}

View File

@ -28,7 +28,7 @@ import (
"github.com/golang/snappy"
)
const version uint32 = 4
const version uint32 = 6
const fieldNotUninverted = math.MaxUint64

View File

@ -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
}

View File

@ -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
}