This commit is contained in:
2026-06-14 23:12:03 +03:00
parent 181031a753
commit b32279deaf
35 changed files with 1395 additions and 1062 deletions

View File

@@ -2,6 +2,7 @@ package worker
import (
"errors"
"fmt"
"io"
bin "gordenko.dev/dima/bin/little"
@@ -30,8 +31,8 @@ type Metric struct {
buffer []byte
timestamps qb.TimestampCompressor
values qb.ValueCompressor
XLock bool
RLocks int
xLock bool
rLocks int
WaitQueue []any
indexLevelTails []storage.IndexLevelTail // root - last element
capturedState *CapturedState
@@ -62,7 +63,7 @@ func (s *Metric) LastTimestamp() uint32 {
func (s *Metric) OnMeasuresDeleteCommited(rec storage.MeasuresDeleteCommited) {
//s.timestamps.Reset()
//s.values.Reset()
s.XLock = false
s.xLock = false
// s.Timestamps.Renew()
// s.Values.Renew()
@@ -75,8 +76,7 @@ func (s *Metric) OnMeasuresDeleteCommited(rec storage.MeasuresDeleteCommited) {
s.lastValue = 0
}
// func (s *_metric) startAppendMeasures(req tryAppendMeasuresReq, sendToStorage func(storage.AppendedMeasures)) {
func (s *Metric) StartAppendMeasures(req AppendMeasuresReq, tmp []byte, storageInbox *inbox.Inbox) {
func (s *Metric) AppendMeasures(req AppendMeasuresReq, tmp []byte, storageInbox *inbox.Inbox) {
if s.capturedState != nil {
s.WaitQueue = append(s.WaitQueue, req)
}
@@ -96,7 +96,7 @@ func (s *Metric) StartAppendMeasures(req AppendMeasuresReq, tmp []byte, storageI
pages []storage.DataPayload
written int
resultCode byte
resultCode byte = Succeed
)
s.capturedState = &CapturedState{
@@ -117,8 +117,10 @@ func (s *Metric) StartAppendMeasures(req AppendMeasuresReq, tmp []byte, storageI
break
}
tReport := timestamps.Evaluate(tmp, measure.Timestamp)
vReport := values.Evaluate(tmp, measure.Value)
tReport := timestamps.Evaluate(tmp[:7], measure.Timestamp)
fmt.Printf("tReport: %#v\n", tReport)
vReport := values.Evaluate(tmp[7:], measure.Value)
fmt.Printf("vReport: %#v\n", vReport)
totalRequiredSpace := tReport.TotalSpace + vReport.TotalSpace
@@ -169,7 +171,7 @@ func (s *Metric) StartAppendMeasures(req AppendMeasuresReq, tmp []byte, storageI
if written == 0 {
s.capturedState = nil
req.ResultCh <- AppendMeasuresResult{
req.ResultCh <- storage.MeasuresAppendResult{
ResultCode: resultCode,
}
return
@@ -193,7 +195,7 @@ func (s *Metric) StartAppendMeasures(req AppendMeasuresReq, tmp []byte, storageI
TailValues: values.Tail(0),
ResultCode: resultCode,
WrittenCount: written,
//ResultCh: req.ResultCh,
ResultCh: req.ResultCh,
})
} else {
// короткий шлях - запис лише в storage
@@ -205,7 +207,7 @@ func (s *Metric) StartAppendMeasures(req AppendMeasuresReq, tmp []byte, storageI
Values: values.Tail(valuesOffset),
ResultCode: resultCode,
WrittenCount: written,
//ResultCh: req.ResultCh,
ResultCh: req.ResultCh,
})
}
}
@@ -215,6 +217,11 @@ func (s *Metric) OnMeasuresAppendCommited(rec storage.MeasuresAppendCommited) {
s.capturedState = nil
s.timestamps.ForgetCapturedState()
s.values.ForgetCapturedState()
rec.ResultCh <- storage.MeasuresAppendResult{
ResultCode: rec.ResultCode,
WrittenCount: rec.WrittenCount,
}
}
func (s *Metric) OnMeasuresAppendWithGrowCommited(rec storage.MeasuresAppendWithGrowCommited) {
@@ -229,6 +236,11 @@ func (s *Metric) OnMeasuresAppendWithGrowCommited(rec storage.MeasuresAppendWith
// В storage я передав повний індекс. У нього додали елементи (можливо нові рівні).
// Тому проста заміна
s.indexLevelTails = rec.Index
rec.ResultCh <- storage.MeasuresAppendResult{
ResultCode: rec.ResultCode,
WrittenCount: rec.WrittenCount,
}
}
// READ
@@ -317,10 +329,12 @@ func (s *Metric) StartFullScan(req FullScanReq) {
if done {
break
}
fmt.Println("ts:", timestamp)
value, done := valueDecompressor.NextValue()
if done {
qb.Abort(qb.HasTimestampNoValueBug, ErrNoValueBug)
}
fmt.Println("value:", value)
req.ResponseWriter.FeedNoSend(timestamp, value)
}
@@ -330,7 +344,7 @@ func (s *Metric) StartFullScan(req FullScanReq) {
LastPageNo: s.lastPageNo,
FracDigits: s.fracDigits,
}
s.RLocks++
s.rLocks++
} else {
req.ResultCh <- FullScanResult{
ResultCode: QueryDone,
@@ -366,21 +380,21 @@ func (s *Metric) WriteTo(w io.Writer) (err error) {
if err != nil {
return
}
err = bin.WriteUint16(w, uint16(s.timestamps.StoredSize()))
err = bin.WriteUint16(w, uint16(s.timestamps.CommitedSize()))
if err != nil {
return
}
err = bin.WriteUint16(w, uint16(s.values.StoredSize()))
err = bin.WriteUint16(w, uint16(s.values.CommitedSize()))
if err != nil {
return
}
// timestamps payload
err = s.timestamps.WriteStoredTo(w)
err = s.timestamps.WriteCommitedTo(w)
if err != nil {
return
}
// values payload
err = s.values.WriteStoredTo(w)
err = s.values.WriteCommitedTo(w)
if err != nil {
return
}
@@ -394,7 +408,7 @@ func (s *Metric) WriteTo(w io.Writer) (err error) {
if err != nil {
return
}
_, err = w.Write(level.Buffer)
_, err = w.Write(level.Buffer[:level.RecordsCount*storage.IndexRecordSize])
if err != nil {
return
}