X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=core%2Frequest_handler.go;h=ddd53075495b1869e2b71ace1fee393ef5480c2e;hb=9f27eeff53ee501b8641595baa7cbc2f0014a68c;hp=e52e2628be0833cd702db5a757b026ae309626eb;hpb=0f731471ab258d9e01658f0ab70f8317fd0fb89c;p=govpp.git diff --git a/core/request_handler.go b/core/request_handler.go index e52e262..ddd5307 100644 --- a/core/request_handler.go +++ b/core/request_handler.go @@ -23,6 +23,8 @@ import ( logger "github.com/sirupsen/logrus" ) +var ReplyChannelTimeout = time.Millisecond * 100 + var ( ErrNotConnected = errors.New("not connected to VPP, ignoring the request") ErrProbeTimeout = errors.New("probe reply not received within timeout period") @@ -49,7 +51,7 @@ func (c *Connection) watchRequests(ch *Channel) { // processRequest processes a single request received on the request channel. func (c *Connection) processRequest(ch *Channel, req *vppRequest) error { // check whether we are connected to VPP - if atomic.LoadUint32(&c.connected) == 0 { + if atomic.LoadUint32(&c.vppConnected) == 0 { err := ErrNotConnected log.Errorf("processing request failed: %v", err) return err @@ -88,14 +90,14 @@ func (c *Connection) processRequest(ch *Channel, req *vppRequest) error { "context": context, "is_multi": req.multi, "msg_id": msgID, - "msg_name": req.msg.GetMessageName(), "msg_size": len(data), "seq_num": req.seqNum, - }).Debug(" -> Sending a message to VPP.") + "msg_crc": req.msg.GetCrcString(), + }).Debugf("==> govpp send: %s: %+v", req.msg.GetMessageName(), req.msg) } // send the request to VPP - err = c.vpp.SendMsg(context, data) + err = c.vppClient.SendMsg(context, data) if err != nil { err = fmt.Errorf("unable to send the message: %v", err) log.WithFields(logger.Fields{ @@ -108,7 +110,7 @@ func (c *Connection) processRequest(ch *Channel, req *vppRequest) error { if req.multi { // send a control ping to determine end of the multipart response - pingData, _ := c.codec.EncodeMsg(msgControlPing, c.pingReqID) + pingData, _ := c.codec.EncodeMsg(c.msgControlPing, c.pingReqID) log.WithFields(logger.Fields{ "channel": ch.id, @@ -116,9 +118,9 @@ func (c *Connection) processRequest(ch *Channel, req *vppRequest) error { "msg_id": c.pingReqID, "msg_size": len(pingData), "seq_num": req.seqNum, - }).Debug(" -> Sending a control ping to VPP.") + }).Debug("--> sending control ping") - if err := c.vpp.SendMsg(context, pingData); err != nil { + if err := c.vppClient.SendMsg(context, pingData); err != nil { log.WithFields(logger.Fields{ "context": context, "msg_id": msgID, @@ -132,9 +134,6 @@ func (c *Connection) processRequest(ch *Channel, req *vppRequest) error { // msgCallback is called whenever any binary API message comes from VPP. func (c *Connection) msgCallback(msgID uint16, data []byte) { - connLock.RLock() - defer connLock.RUnlock() - if c == nil { log.Warn("Already disconnected, ignoring the message.") return @@ -161,12 +160,12 @@ func (c *Connection) msgCallback(msgID uint16, data []byte) { log.WithFields(logger.Fields{ "context": context, "msg_id": msgID, - "msg_name": msg.GetMessageName(), "msg_size": len(data), "channel": chanID, "is_multi": isMulti, "seq_num": seqNum, - }).Debug(" <- Received a message from VPP.") + "msg_crc": msg.GetCrcString(), + }).Debugf("<== govpp recv: %s", msg.GetMessageName()) } if context == 0 || c.isNotificationMessage(msgID) { @@ -212,7 +211,7 @@ func sendReply(ch *Channel, reply *vppReply) { select { case ch.replyChan <- reply: // reply sent successfully - case <-time.After(time.Millisecond * 100): + case <-time.After(ReplyChannelTimeout): // receiver still not ready log.WithFields(logger.Fields{ "channel": ch,