From dfc9b7ec762aa757111a896e110927b5c52b6a07 Mon Sep 17 00:00:00 2001 From: yunfeiyangbuaa Date: Thu, 18 Jul 2019 09:38:30 +0800 Subject: [PATCH] bugfix:modify supernode's response to dfget to resolve the json err Signed-off-by: yunfeiyangbuaa --- common/constants/dfget_super_code.go | 2 ++ dfget/core/api/supernode_api.go | 14 +++++++++++++- supernode/server/0.3_bridge.go | 10 ++++++---- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/common/constants/dfget_super_code.go b/common/constants/dfget_super_code.go index b59c3fc75..870045b4a 100644 --- a/common/constants/dfget_super_code.go +++ b/common/constants/dfget_super_code.go @@ -72,6 +72,8 @@ const ( CodeNeedAuth = 608 CodeWaitAuth = 609 CodeSourceError = 610 + CodeGetPieceReport = 611 + CodeGetPeerDown = 612 ) /* the code of task result that dfget will report to supernode */ diff --git a/dfget/core/api/supernode_api.go b/dfget/core/api/supernode_api.go index 674e1bb40..88957298a 100644 --- a/dfget/core/api/supernode_api.go +++ b/dfget/core/api/supernode_api.go @@ -21,8 +21,11 @@ import ( "fmt" "time" + "github.com/dragonflyoss/Dragonfly/common/constants" "github.com/dragonflyoss/Dragonfly/common/util" "github.com/dragonflyoss/Dragonfly/dfget/types" + + "github.com/sirupsen/logrus" ) /* the url paths of supernode APIs*/ @@ -100,9 +103,13 @@ func (api *supernodeAPI) ReportPiece(node string, req *types.ReportPieceRequest) url := fmt.Sprintf("%s://%s%s?%s", api.Scheme, node, peerReportPiecePath, util.ParseQuery(req)) - resp = new(types.BaseResponse) e = api.get(url, resp) + if e != nil { + logrus.Infof("failed to report piece{taskid:%s,range:%s},err: %v", req.TaskID, req.PieceRange, e) + } else if resp != nil && resp.Code != constants.CodeGetPieceReport { + logrus.Infof("failed to report piece{taskid:%s,range:%s} to supernode: api response code is %d not equal to %d", req.TaskID, req.PieceRange, e, resp.Code, constants.CodeGetPieceReport) + } return } @@ -115,6 +122,11 @@ func (api *supernodeAPI) ServiceDown(node string, taskID string, cid string) ( resp = new(types.BaseResponse) e = api.get(url, resp) + if e != nil { + logrus.Infof("failed to send service{taskid:%s} down,err: %v", taskID, e) + } else if resp != nil && resp.Code != constants.CodeGetPeerDown { + logrus.Infof("failed to send service{taskid:%s} down to supernode: api response code is %d not equal to %d", taskID, resp.Code, constants.CodeGetPeerDown) + } return } diff --git a/supernode/server/0.3_bridge.go b/supernode/server/0.3_bridge.go index ab524a6ae..19ad2b867 100644 --- a/supernode/server/0.3_bridge.go +++ b/supernode/server/0.3_bridge.go @@ -198,8 +198,9 @@ func (s *Server) reportPiece(ctx context.Context, rw http.ResponseWriter, req *h return err } - rw.WriteHeader(http.StatusOK) - return nil + return EncodeResponse(rw, http.StatusOK, &types.ResultInfo{ + Code: constants.CodeGetPieceReport, + }) } func (s *Server) reportServiceDown(ctx context.Context, rw http.ResponseWriter, req *http.Request) (err error) { @@ -228,6 +229,7 @@ func (s *Server) reportServiceDown(ctx context.Context, rw http.ResponseWriter, return err } - rw.WriteHeader(http.StatusOK) - return nil + return EncodeResponse(rw, http.StatusOK, &types.ResultInfo{ + Code: constants.CodeGetPeerDown, + }) }