wp
This commit is contained in:
132
database/api.go
132
database/api.go
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user