Files
qb/txlog/x.go
2026-05-15 00:28:39 +00:00

84 lines
2.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package txlog
const (
payloadSize = 24
recordSize = 4 + 4 // timestamp + pageNo
)
type Page struct {
//Head []byte
//Tail []byte
Data []byte
PageNo uint32
LowerTimestamp uint32
}
type Level struct {
// вже записані дані (лише для першої в списку індексної сторінки, беремо із _metric)
// дані потрібні, якщо сторінка буде заповнена і піде на запис в .index файл
AlreadyWritten int // (заповнені одразу)
Unfilled []byte // поточні дані index сторінки (заповнені одразу)
LowerTimestamp uint32 // (заповнені одразу)
PageNo uint32 // пусто
Filled []Page // пусто
}
type Pager interface {
GetPageNumber() uint32
}
func xxx(pager Pager, levels []*Level, dataPages []*Page) {
var (
//upTimestamp uint32
lastDataIdx = len(dataPages) - 1
)
for idx, d := range dataPages {
d.PageNo = pager.GetPageNumber()
if idx < lastDataIdx {
// setPrevPageNo(dataPages[idx+1], d.PageNo)
// calc CRC32
} else {
}
var (
upTimestamp = d.LowerTimestamp
upPageNo uint32 = d.PageNo
levelIdx = 0
)
for {
if levelIdx == len(levels) {
//
newRoot := &Level{
Unfilled: nil,
//LowerTimestamp: prevPage . LowerTimestamp,
PageNo: pager.GetPageNumber(),
}
// encode prev page record + up*
levels = append(levels, newRoot)
break
}
level := levels[levelIdx]
if len(level.Unfilled)+recordSize <= payloadSize {
// append
break
}
level.Filled = append(level.Filled, Page{
Data: level.Unfilled,
LowerTimestamp: level.LowerTimestamp,
PageNo: level.PageNo,
})
//
level.Unfilled = nil
// fix - pack record
level.PageNo = pager.GetPageNumber()
level.LowerTimestamp = upTimestamp
//
upPageNo = level.PageNo
upTimestamp = level.LowerTimestamp
levelIdx++
}
}
}