wp
This commit is contained in:
@@ -45,6 +45,8 @@ func reply(conn io.Writer, errcode uint16) {
|
||||
func (s *Database) handleTCPConn(conn net.Conn) {
|
||||
defer conn.Close()
|
||||
|
||||
fmt.Println("client connected")
|
||||
|
||||
r := bufreader.New(conn, 128)
|
||||
|
||||
for {
|
||||
@@ -59,6 +61,7 @@ func (s *Database) handleTCPConn(conn net.Conn) {
|
||||
}
|
||||
|
||||
func (s *Database) processRequest(conn net.Conn, r *bufreader.BufferedReader) (err error) {
|
||||
fmt.Println("process request")
|
||||
messageType, err := r.ReadByte()
|
||||
if err != nil {
|
||||
if err != io.EOF {
|
||||
@@ -68,6 +71,8 @@ func (s *Database) processRequest(conn net.Conn, r *bufreader.BufferedReader) (e
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Println("messageType:", messageType)
|
||||
|
||||
switch messageType {
|
||||
case proto.TypeGetMetric:
|
||||
req, err := proto.ReadGetMetricReq(r)
|
||||
@@ -83,6 +88,7 @@ func (s *Database) processRequest(conn net.Conn, r *bufreader.BufferedReader) (e
|
||||
if err != nil {
|
||||
return fmt.Errorf("proto.ReadAddMetricReq: %s", err)
|
||||
}
|
||||
fmt.Println("ReadAddMetricReq:", req)
|
||||
reply(conn, s.AddMetric(req))
|
||||
|
||||
case proto.TypeDeleteMetric:
|
||||
@@ -154,6 +160,7 @@ func (s *Database) processRequest(conn net.Conn, r *bufreader.BufferedReader) (e
|
||||
}
|
||||
|
||||
case proto.TypeDeleteMeasures:
|
||||
//fmt.Println("delete metric")
|
||||
req, err := proto.ReadDeleteMeasuresReq(r)
|
||||
if err != nil {
|
||||
return fmt.Errorf("proto.ReadDeleteMeasuresReq: %s", err)
|
||||
@@ -180,6 +187,7 @@ func (s *Database) processRequest(conn net.Conn, r *bufreader.BufferedReader) (e
|
||||
}
|
||||
|
||||
default:
|
||||
fmt.Printf("unknown messageType: %d\n", messageType)
|
||||
return fmt.Errorf("unknown messageType: %d", messageType)
|
||||
}
|
||||
return
|
||||
@@ -188,6 +196,7 @@ func (s *Database) processRequest(conn net.Conn, r *bufreader.BufferedReader) (e
|
||||
// API
|
||||
|
||||
func (s *Database) AddMetric(req proto.AddMetricReq) uint16 {
|
||||
fmt.Println("database.AddMetric")
|
||||
// Валидация
|
||||
if req.MetricID == 0 {
|
||||
return proto.ErrEmptyMetricID
|
||||
@@ -204,26 +213,33 @@ func (s *Database) AddMetric(req proto.AddMetricReq) uint16 {
|
||||
|
||||
resultCh := make(chan byte, 1)
|
||||
|
||||
s.appendJobToWorkerQueue(tryAddMetricReq{
|
||||
fmt.Println("add job")
|
||||
|
||||
s.worker.AddJobToQueue(tryAddMetricReq{
|
||||
MetricID: req.MetricID,
|
||||
ResultCh: resultCh,
|
||||
})
|
||||
|
||||
fmt.Println("job added")
|
||||
|
||||
resultCode := <-resultCh
|
||||
|
||||
switch resultCode {
|
||||
case Succeed:
|
||||
s.storage.Append(storage.MetricAddRecord{
|
||||
MetricID: req.MetricID,
|
||||
MetricType: req.MetricType,
|
||||
FracDigits: req.FracDigits,
|
||||
})
|
||||
fmt.Println("OK")
|
||||
// s.storage.Append(storage.MetricAddRecord{
|
||||
// MetricID: req.MetricID,
|
||||
// MetricType: req.MetricType,
|
||||
// FracDigits: req.FracDigits,
|
||||
// })
|
||||
//<-waitCh
|
||||
|
||||
case MetricDuplicate:
|
||||
fmt.Println("ErrDuplicate")
|
||||
return proto.ErrDuplicate
|
||||
|
||||
default:
|
||||
fmt.Println("ErrWrongResultCodeBug")
|
||||
qb.Abort(qb.WrongResultCodeBug, ErrWrongResultCodeBug)
|
||||
}
|
||||
return 0
|
||||
@@ -238,7 +254,7 @@ type Metric struct {
|
||||
func (s *Database) GetMetric(conn io.Writer, req proto.GetMetricReq) error {
|
||||
resultCh := make(chan Metric, 1)
|
||||
|
||||
s.appendJobToWorkerQueue(tryGetMetricReq{
|
||||
s.worker.AddJobToQueue(tryGetMetricReq{
|
||||
MetricID: req.MetricID,
|
||||
ResultCh: resultCh,
|
||||
})
|
||||
@@ -277,7 +293,7 @@ type tryDeleteMetricResult struct {
|
||||
func (s *Database) DeleteMetric(req proto.DeleteMetricReq) uint16 {
|
||||
resultCh := make(chan tryDeleteMetricResult, 1)
|
||||
|
||||
s.appendJobToWorkerQueue(tryDeleteMetricReq{
|
||||
s.worker.AddJobToQueue(tryDeleteMetricReq{
|
||||
MetricID: req.MetricID,
|
||||
ResultCh: resultCh,
|
||||
})
|
||||
@@ -441,7 +457,7 @@ type tryAppendMeasuresResult struct {
|
||||
func (s *Database) AppendMeasures(req proto.AppendMeasuresReq) uint16 {
|
||||
resultCh := make(chan tryAppendMeasuresResult, 1)
|
||||
|
||||
s.appendJobToWorkerQueue(tryAppendMeasuresReq{
|
||||
s.worker.AddJobToQueue(tryAppendMeasuresReq{
|
||||
MetricID: req.MetricID,
|
||||
Measures: req.Measures,
|
||||
ResultCh: resultCh,
|
||||
@@ -486,7 +502,7 @@ type tryDeleteMeasuresResult struct {
|
||||
func (s *Database) DeleteMeasures(req proto.DeleteMeasuresReq) uint16 {
|
||||
resultCh := make(chan tryDeleteMeasuresResult, 1)
|
||||
|
||||
s.appendJobToWorkerQueue(tryDeleteMeasuresReq{
|
||||
s.worker.AddJobToQueue(tryDeleteMeasuresReq{
|
||||
MetricID: req.MetricID,
|
||||
Since: req.Since,
|
||||
ResultCh: resultCh,
|
||||
@@ -667,7 +683,7 @@ type rangeScanReq struct {
|
||||
func (s *Database) rangeScan(req rangeScanReq) error {
|
||||
resultCh := make(chan rangeScanResult, 1)
|
||||
|
||||
s.appendJobToWorkerQueue(tryRangeScanReq{
|
||||
s.worker.AddJobToQueue(tryRangeScanReq{
|
||||
MetricID: req.MetricID,
|
||||
Since: req.Since,
|
||||
Until: req.Until,
|
||||
@@ -689,7 +705,7 @@ func (s *Database) rangeScan(req rangeScanReq) error {
|
||||
LastPageNo: result.LastPageNo,
|
||||
Since: req.Since,
|
||||
})
|
||||
s.metricRUnlock(req.MetricID)
|
||||
//s.metricRUnlock(req.MetricID)
|
||||
|
||||
if err != nil {
|
||||
reply(req.Conn, proto.ErrUnexpected)
|
||||
@@ -705,7 +721,7 @@ func (s *Database) rangeScan(req rangeScanReq) error {
|
||||
Since: req.Since,
|
||||
Until: req.Until,
|
||||
})
|
||||
s.metricRUnlock(req.MetricID)
|
||||
//s.metricRUnlock(req.MetricID)
|
||||
|
||||
if err != nil {
|
||||
reply(req.Conn, proto.ErrUnexpected)
|
||||
@@ -735,7 +751,7 @@ type fullScanReq struct {
|
||||
func (s *Database) fullScan(req fullScanReq) error {
|
||||
resultCh := make(chan fullScanResult, 1)
|
||||
|
||||
s.appendJobToWorkerQueue(tryFullScanReq{
|
||||
s.worker.AddJobToQueue(tryFullScanReq{
|
||||
MetricID: req.MetricID,
|
||||
MetricType: req.MetricType,
|
||||
ResponseWriter: req.ResponseWriter,
|
||||
@@ -754,7 +770,7 @@ func (s *Database) fullScan(req fullScanReq) error {
|
||||
ResponseWriter: req.ResponseWriter,
|
||||
LastPageNo: result.LastPageNo,
|
||||
})
|
||||
s.metricRUnlock(req.MetricID)
|
||||
s.worker.AddJobToQueue(req.MetricID)
|
||||
if err != nil {
|
||||
reply(req.Conn, proto.ErrUnexpected)
|
||||
} else {
|
||||
@@ -779,7 +795,7 @@ func (s *Database) ListCurrentValues(conn net.Conn, req proto.ListCurrentValuesR
|
||||
|
||||
resultCh := make(chan struct{})
|
||||
|
||||
s.appendJobToWorkerQueue(tryListCurrentValuesReq{
|
||||
s.worker.AddJobToQueue(tryListCurrentValuesReq{
|
||||
MetricIDs: req.MetricIDs,
|
||||
ResponseWriter: responseWriter,
|
||||
ResultCh: resultCh,
|
||||
|
||||
Reference in New Issue
Block a user