tmp
This commit is contained in:
83
txlog/x.go
Normal file
83
txlog/x.go
Normal file
@@ -0,0 +1,83 @@
|
||||
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++
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user