From 357076b19f6e9cdbaedb365a915c1b1d9e79af3e Mon Sep 17 00:00:00 2001 From: dima <1.e4.kc6@gmail.com> Date: Fri, 15 May 2026 00:28:39 +0000 Subject: [PATCH] tmp --- txlog/x.go | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 txlog/x.go diff --git a/txlog/x.go b/txlog/x.go new file mode 100644 index 0000000..97ab852 --- /dev/null +++ b/txlog/x.go @@ -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++ + + } + } +}