wp
This commit is contained in:
@@ -5,7 +5,6 @@ import (
|
||||
"sync"
|
||||
|
||||
qb "gordenko.dev/dima/qb"
|
||||
"gordenko.dev/dima/qb/atree"
|
||||
"gordenko.dev/dima/qb/enc"
|
||||
"gordenko.dev/dima/qb/inbox"
|
||||
"gordenko.dev/dima/qb/proto"
|
||||
@@ -86,15 +85,8 @@ func New(opt Options) *Worker {
|
||||
return s
|
||||
}
|
||||
|
||||
func (s *Worker) ReleaseRLock(metricID uint32) {
|
||||
// s.mutex.Lock()
|
||||
// //s.rLocksToRelease = append(s.rLocksToRelease, metricID)
|
||||
// s.mutex.Unlock()
|
||||
|
||||
// select {
|
||||
// case s.signalCh <- struct{}{}:
|
||||
// default:
|
||||
// }
|
||||
type ReleaseRLock struct {
|
||||
MetricID uint32
|
||||
}
|
||||
|
||||
func (s *Worker) Run() {
|
||||
@@ -114,39 +106,12 @@ func (s *Worker) Run() {
|
||||
func (s *Worker) doWork() {
|
||||
queue := s.inbox.Drain()
|
||||
|
||||
//rLocksToRelease := s.rLocksToRelease
|
||||
//s.rLocksToRelease = nil
|
||||
|
||||
// for _, metricID := range rLocksToRelease {
|
||||
// metric, ok := s.metrics[metricID]
|
||||
// if !ok {
|
||||
// qb.Abort(qb.NoMetricBug,
|
||||
// fmt.Errorf("drainQueues: metric %d not found", metricID))
|
||||
// }
|
||||
|
||||
// if metric.XLock {
|
||||
// qb.Abort(qb.XLockBug,
|
||||
// fmt.Errorf("drainQueues: xlock is set for the metric %d",
|
||||
// metricID))
|
||||
// }
|
||||
|
||||
// if metric.RLocks <= 0 {
|
||||
// qb.Abort(qb.NoRLockBug,
|
||||
// fmt.Errorf("drainQueues: rlock not set for the metric %d",
|
||||
// metricID))
|
||||
// }
|
||||
|
||||
// metric.RLocks--
|
||||
|
||||
// if len(metric.WaitQueue) > 0 {
|
||||
// s.processMetricQueue(metricID, metric)
|
||||
// }
|
||||
// }
|
||||
|
||||
for _, untyped := range queue {
|
||||
switch req := untyped.(type) {
|
||||
case AppendMeasuresReq:
|
||||
s.AppendMeasures(req)
|
||||
case ReleaseRLock:
|
||||
s.releaseRLock(req.MetricID)
|
||||
case storage.Changes:
|
||||
s.applyCommits(req) // all metrics only
|
||||
case ListCurrentValuesReq:
|
||||
@@ -170,29 +135,10 @@ func (s *Worker) doWork() {
|
||||
}
|
||||
}
|
||||
|
||||
// суть у тому що треба запускати запити, пока не зустріну XLock
|
||||
func (s *Worker) processMetricQueue(metricID uint32, metric *Metric, tmp []byte) {
|
||||
if len(metric.waitQueue) == 0 {
|
||||
return
|
||||
}
|
||||
for _, untyped := range metric.waitQueue {
|
||||
switch req := untyped.(type) {
|
||||
case RangeScanReq:
|
||||
metric.StartRangeScan(req)
|
||||
case FullScanReq:
|
||||
metric.StartFullScan(req)
|
||||
case GetMetricReq:
|
||||
s.GetMetric(req)
|
||||
case AppendMeasuresReq:
|
||||
metric.AppendMeasures(req, tmp, s.storageInbox)
|
||||
case DeleteMetricReq:
|
||||
s.DeleteMetric(req)
|
||||
case DeleteMeasuresReq:
|
||||
metric.DeleteMeasures(req)
|
||||
default:
|
||||
qb.Abort(qb.UnknownMetricWaitQueueItemBug,
|
||||
fmt.Errorf("bug: unknown metric wait queue item type %T", req))
|
||||
}
|
||||
func (s *Worker) releaseRLock(metricID uint32) {
|
||||
metric, ok := s.metrics[metricID]
|
||||
if ok {
|
||||
metric.ReleaseRLock()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -318,8 +264,8 @@ func (s *Worker) AppendMeasures(req AppendMeasuresReq) {
|
||||
type RangeScanResult struct {
|
||||
ResultCode byte
|
||||
FracDigits byte
|
||||
RootPageNo uint32
|
||||
LastPageNo uint32
|
||||
IsDataPage bool // for UntilNotFound only
|
||||
}
|
||||
|
||||
type RangeScanReq struct {
|
||||
@@ -327,7 +273,7 @@ type RangeScanReq struct {
|
||||
Since uint32
|
||||
Until uint32
|
||||
MetricType qb.MetricType
|
||||
ResponseWriter atree.WorkerMeasureConsumer
|
||||
ResponseWriter qb.WorkerMeasureConsumer
|
||||
ResultCh chan RangeScanResult
|
||||
}
|
||||
|
||||
@@ -361,7 +307,7 @@ type FullScanResult struct {
|
||||
type FullScanReq struct {
|
||||
MetricID uint32
|
||||
MetricType qb.MetricType
|
||||
ResponseWriter atree.WorkerMeasureConsumer
|
||||
ResponseWriter qb.WorkerMeasureConsumer
|
||||
ResultCh chan FullScanResult
|
||||
}
|
||||
|
||||
@@ -398,7 +344,7 @@ func (s *Worker) ListCurrentValues(req ListCurrentValuesReq) {
|
||||
if ok {
|
||||
req.ResponseWriter.BufferValue(transform.CurrentValue{
|
||||
MetricID: metricID,
|
||||
Timestamp: metric.LastTimestamp(),
|
||||
Timestamp: metric.timestamps.CommitedUntil(),
|
||||
Value: metric.LastValue(),
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user