tmp
This commit is contained in:
34
atree/x.go
34
atree/x.go
@@ -1,6 +1,7 @@
|
||||
package atree
|
||||
|
||||
import (
|
||||
"gordenko.dev/dima/qb"
|
||||
"gordenko.dev/dima/qb/bin"
|
||||
"gordenko.dev/dima/qb/util"
|
||||
)
|
||||
@@ -19,7 +20,7 @@ type DataPage struct {
|
||||
ValuesSize int
|
||||
PageNo uint32
|
||||
IsReused bool
|
||||
Checksum uint32
|
||||
//Checksum uint32
|
||||
}
|
||||
|
||||
type IndexPage struct {
|
||||
@@ -27,7 +28,6 @@ type IndexPage struct {
|
||||
Data []byte
|
||||
PageNo uint32
|
||||
IsReused bool
|
||||
Checksum uint32
|
||||
}
|
||||
type IndexLevel struct {
|
||||
// вже записані дані (лише для першої в списку індексної сторінки, беремо із _metric)
|
||||
@@ -57,7 +57,7 @@ type ChunksToDataPageReq struct {
|
||||
}
|
||||
|
||||
// return checksum
|
||||
func ChunksToDataPage(buf []byte, req ChunksToDataPageReq) (checksum uint32) {
|
||||
func ChunksToDataPage(buf []byte, req ChunksToDataPageReq) {
|
||||
var (
|
||||
remainingSize = int(req.TimestampsSize)
|
||||
pos = 0
|
||||
@@ -90,30 +90,29 @@ func ChunksToDataPage(buf []byte, req ChunksToDataPageReq) (checksum uint32) {
|
||||
bin.PutUint16(buf[valuesSizeIdx:], uint16(req.ValuesSize))
|
||||
bin.PutUint32(buf[prevPageIdx:], req.PrevPageNo)
|
||||
|
||||
checksum = util.CalcChecksum(buf[:dataCRC32Idx])
|
||||
checksum := util.CalcChecksum(buf[:dataCRC32Idx])
|
||||
bin.PutUint32(buf[dataCRC32Idx:], checksum)
|
||||
return
|
||||
}
|
||||
|
||||
func DataToIndexPage(buf []byte, data []byte, lastLevel bool) (checksum uint32) {
|
||||
func DataToIndexPage(buf []byte, data []byte, lastLevel bool) {
|
||||
copy(buf, data)
|
||||
bin.PutUint16(buf[indexRecordsQtyIdx:], uint16(len(data)/indexRecordSize))
|
||||
if lastLevel {
|
||||
buf[isLastLevelIdx] = 1
|
||||
}
|
||||
checksum = util.CalcChecksum(buf[:indexCRC32Idx])
|
||||
checksum := util.CalcChecksum(buf[:indexCRC32Idx])
|
||||
bin.PutUint32(buf[indexCRC32Idx:], checksum)
|
||||
return
|
||||
}
|
||||
|
||||
type Pager interface {
|
||||
GetPageNumber() (uint32, bool)
|
||||
}
|
||||
|
||||
// fix - reduce leves
|
||||
func AppendDataPagesToTree(pager Pager, levels []*IndexLevel, dataPages []*DataPage) {
|
||||
func AppendDataPagesToTree(getDataPageNumber func() (uint32, bool, error), getIndexPageNumber func() (uint32, bool, error), levels []*IndexLevel, dataPages []*DataPage) {
|
||||
for i, d := range dataPages[1:] {
|
||||
d.PageNo, d.IsReused = pager.GetPageNumber()
|
||||
pageNo, isReused, err := getDataPageNumber()
|
||||
if err != nil {
|
||||
qb.Abort(qb.FailedGetPageNumber, err)
|
||||
}
|
||||
d.PageNo = pageNo
|
||||
d.IsReused = isReused
|
||||
d.PrevPageNo = dataPages[i-1].PageNo
|
||||
}
|
||||
|
||||
@@ -143,7 +142,12 @@ func AppendDataPagesToTree(pager Pager, levels []*IndexLevel, dataPages []*DataP
|
||||
LowerTimestamp: level.LowerTimestamp,
|
||||
Data: level.Data,
|
||||
}
|
||||
filled.PageNo, filled.IsReused = pager.GetPageNumber()
|
||||
pageNo, isReused, err := getIndexPageNumber()
|
||||
if err != nil {
|
||||
qb.Abort(qb.FailedGetPageNumber, err)
|
||||
}
|
||||
filled.PageNo = pageNo
|
||||
filled.IsReused = isReused
|
||||
|
||||
level.Filled = append(level.Filled, filled)
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user