This commit is contained in:
2026-06-15 05:32:15 +03:00
parent 80309aab99
commit ca125c99d2
16 changed files with 685 additions and 1350 deletions

View File

@@ -278,39 +278,39 @@ func (s *Database) GetMetric(conn io.Writer, req proto.GetMetricReq) error {
}
func (s *Database) DeleteMetric(req proto.DeleteMetricReq) uint16 {
resultCh := make(chan worker.DeleteMetricResult, 1)
// resultCh := make(chan worker.DeleteMetricResult, 1)
s.workerInbox.Push(worker.DeleteMetricReq{
MetricID: req.MetricID,
ResultCh: resultCh,
})
// s.workerInbox.Push(worker.DeleteMetricReq{
// MetricID: req.MetricID,
// ResultCh: resultCh,
// })
result := <-resultCh
// result := <-resultCh
switch result.ResultCode {
case worker.Succeed:
// var (
// //freePageNumbers []uint32
// )
// if result.RootPageNo > 0 {
// var err error
// freePageNumbers, err = s.atree.GetAllPages(result.RootPageNo)
// if err != nil {
// qb.Abort(qb.FailedAtreeRequest, err)
// }
// }
// s.storage.Append(storage.DeletedMetric{
// MetricID: req.MetricID,
// //FreePageNumbers: freePageNumbers, FIX
// })
//<-waitCh
// switch result.ResultCode {
// case worker.Succeed:
// // var (
// // //freePageNumbers []uint32
// // )
// // if result.RootPageNo > 0 {
// // var err error
// // freePageNumbers, err = s.atree.GetAllPages(result.RootPageNo)
// // if err != nil {
// // qb.Abort(qb.FailedAtreeRequest, err)
// // }
// // }
// // s.storage.Append(storage.DeletedMetric{
// // MetricID: req.MetricID,
// // //FreePageNumbers: freePageNumbers, FIX
// // })
// //<-waitCh
case worker.NoMetric:
return proto.ErrNoMetric
// case worker.NoMetric:
// return proto.ErrNoMetric
default:
qb.Abort(qb.WrongResultCodeBug, ErrWrongResultCodeBug)
}
// default:
// qb.Abort(qb.WrongResultCodeBug, ErrWrongResultCodeBug)
// }
return 0
}
@@ -363,7 +363,7 @@ func (s *Database) AppendMeasures(conn io.Writer, req proto.AppendMeasuresReq) e
}
func (s *Database) DeleteMeasures(req proto.DeleteMeasuresReq) uint16 {
resultCh := make(chan worker.DeleteMeasuresResult, 1)
resultCh := make(chan byte, 1)
s.workerInbox.Push(worker.DeleteMeasuresReq{
MetricID: req.MetricID,
@@ -373,36 +373,38 @@ func (s *Database) DeleteMeasures(req proto.DeleteMeasuresReq) uint16 {
result := <-resultCh
switch result.ResultCode {
case worker.NoMeasuresToDelete:
// ok
_ = result
//case worker.DeleteFromAtreeNotNeeded:
// регистрирую удаление в TransactionLog
// s.storage.Append(storage.MeasuresDeleteRecord{
// MetricID: req.MetricID,
// })
//<-waitCh
// switch result.ResultCode {
// case worker.NoMeasuresToDelete:
// // ok
//case worker.DeleteFromAtreeRequired:
// собираю номера всех data и index страниц метрики (типа запись REDO лога).
// pageNumbers, err := s.atree.GetAllPages(req.MetricID)
// if err != nil {
// qb.Abort(qb.FailedAtreeRequest, err)
// }
// //case worker.DeleteFromAtreeNotNeeded:
// // регистрирую удаление в TransactionLog
// s.storage.Append(storage.DeletedMeasures{
// MetricID: req.MetricID,
// FreePageNumbers: pageNumbers,
// })
//<-waitCh
// // s.storage.Append(storage.MeasuresDeleteRecord{
// // MetricID: req.MetricID,
// // })
// //<-waitCh
case worker.NoMetric:
return proto.ErrNoMetric
// //case worker.DeleteFromAtreeRequired:
// // собираю номера всех data и index страниц метрики (типа запись REDO лога).
// // pageNumbers, err := s.atree.GetAllPages(req.MetricID)
// // if err != nil {
// // qb.Abort(qb.FailedAtreeRequest, err)
// // }
// // // регистрирую удаление в TransactionLog
// // s.storage.Append(storage.DeletedMeasures{
// // MetricID: req.MetricID,
// // FreePageNumbers: pageNumbers,
// // })
// //<-waitCh
default:
qb.Abort(qb.WrongResultCodeBug, ErrWrongResultCodeBug)
}
// case worker.NoMetric:
// return proto.ErrNoMetric
// default:
// qb.Abort(qb.WrongResultCodeBug, ErrWrongResultCodeBug)
// }
return 0
}
@@ -616,17 +618,17 @@ func (s *Database) fullScan(req fullScanReq) error {
req.ResponseWriter.Close()
case worker.UntilFound:
// err := s.atree.ContinueFullScan(atree.ContinueFullScanReq{
// FracDigits: result.FracDigits,
// ResponseWriter: req.ResponseWriter,
// LastPageNo: result.LastPageNo,
// })
// s.worker.AddJobToQueue(req.MetricID)
// if err != nil {
// reply(req.Conn, proto.ErrUnexpected)
// } else {
// req.ResponseWriter.Close()
// }
err := s.atree.ContinueFullScan(atree.ContinueFullScanReq{
FracDigits: result.FracDigits,
ResponseWriter: req.ResponseWriter,
LastPageNo: result.LastPageNo,
})
//s.worker.AddJobToQueue(req.MetricID) // FIX release rlock
if err != nil {
reply(req.Conn, proto.ErrUnexpected)
} else {
req.ResponseWriter.Close()
}
case worker.NoMetric:
reply(req.Conn, proto.ErrNoMetric)

View File

@@ -10,19 +10,13 @@ import (
"time"
"gordenko.dev/dima/qb"
"gordenko.dev/dima/qb/atree"
"gordenko.dev/dima/qb/inbox"
"gordenko.dev/dima/qb/recovery"
"gordenko.dev/dima/qb/storage"
"gordenko.dev/dima/qb/worker"
)
// type metricLockEntry struct {
// XLock bool
// RLocks int
// WaitQueue []any
// }
//metricLockEntries map[uint32]*metricLockEntry
type Database struct {
mutex sync.Mutex
dir string
@@ -30,6 +24,7 @@ type Database struct {
workerInbox *inbox.Inbox
worker *worker.Worker
storage *storage.Writer
atree *atree.Atree
tcpPort int
logfile *os.File
logger *log.Logger
@@ -122,8 +117,6 @@ func New(opt Options) (_ *Database, err error) {
return nil, fmt.Errorf("storage.NewWriter: %s", err)
}
fmt.Println("storage created")
s.worker = worker.New(worker.Options{
Inbox: s.workerInbox,
StorageInbox: storageInbox,
@@ -133,7 +126,14 @@ func New(opt Options) (_ *Database, err error) {
ExitCh: opt.ExitCh,
WaitGroup: opt.WaitGroup,
})
fmt.Println("worker created")
s.atree, err = atree.New(atree.Options{
DataFile: dataFile,
IndexFile: indexFile,
})
if err != nil {
return nil, fmt.Errorf("atree.New: %s", err)
}
return s, nil
}
@@ -146,13 +146,6 @@ func (s *Database) ListenAndServe() (err error) {
//s.waitGroup.Add(1)
go s.storage.Run()
// s.atree, err = atree.New(atree.Options{
// Dir: s.dir,
// DatabaseName: s.databaseName,
// })
// if err != nil {
// return fmt.Errorf("atree.New: %s", err)
// }
// s.atree.Run()
s.waitGroup.Add(1)