diff options
author | Ondrej Fabry <ofabry@cisco.com> | 2020-06-16 10:40:34 +0200 |
---|---|---|
committer | Ondrej Fabry <ofabry@cisco.com> | 2020-06-16 10:40:34 +0200 |
commit | 280b1c6c83b676ef4e592f4ecf60cb5b54b6a753 (patch) | |
tree | bf9a35f020de061ba66a432411ee44866405fe76 /core/request_handler.go | |
parent | f049390060630c0085fe4ad683c83a4a14a47ffb (diff) |
Optimize socketclient adapter and add various code improvements
This commit includes:
Features
- optimized [socketclient](adapter/socketclient) adapter and add method to set client name
- added list of compatible messages to `CompatibilityError`
Fixes
- `MsgCodec` will recover panic occurring during a message decoding
- calling `Unsubscibe` will close the notification channel
Other
- improved log messages to provide more relevant info
Examples
- added more code samples of working with unions in [union example](examples/union-example)
- added profiling mode to [perf bench](examples/perf-bench) example
- improved [simple client](examples/simple-client) example to work properly even with multiple runs
Dependencies
- updated `github.com/sirupsen/logrus` dep to `v1.6.0`
- updated `github.com/lunixbochs/struc` dep to `v0.0.0-20200521075829-a4cb8d33dbbe`
Change-Id: I136a3968ccf9e93760d7ee2b9902fc7e6390a09d
Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
Diffstat (limited to 'core/request_handler.go')
-rw-r--r-- | core/request_handler.go | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/core/request_handler.go b/core/request_handler.go index ddd5307..e272c6f 100644 --- a/core/request_handler.go +++ b/core/request_handler.go @@ -17,10 +17,13 @@ package core import ( "errors" "fmt" + "reflect" "sync/atomic" "time" logger "github.com/sirupsen/logrus" + + "git.fd.io/govpp.git/api" ) var ReplyChannelTimeout = time.Millisecond * 100 @@ -93,7 +96,7 @@ func (c *Connection) processRequest(ch *Channel, req *vppRequest) error { "msg_size": len(data), "seq_num": req.seqNum, "msg_crc": req.msg.GetCrcString(), - }).Debugf("==> govpp send: %s: %+v", req.msg.GetMessageName(), req.msg) + }).Debugf("--> govpp SEND: %s %+v", req.msg.GetMessageName(), req.msg) } // send the request to VPP @@ -118,7 +121,7 @@ func (c *Connection) processRequest(ch *Channel, req *vppRequest) error { "msg_id": c.pingReqID, "msg_size": len(pingData), "seq_num": req.seqNum, - }).Debug("--> sending control ping") + }).Debug(" -> sending control ping") if err := c.vppClient.SendMsg(context, pingData); err != nil { log.WithFields(logger.Fields{ @@ -156,7 +159,16 @@ func (c *Connection) msgCallback(msgID uint16, data []byte) { } chanID, isMulti, seqNum := unpackRequestContext(context) + if log.Level == logger.DebugLevel { // for performance reasons - logrus does some processing even if debugs are disabled + msg = reflect.New(reflect.TypeOf(msg).Elem()).Interface().(api.Message) + + // decode the message + if err = c.codec.DecodeMsg(data, msg); err != nil { + err = fmt.Errorf("decoding message failed: %w", err) + return + } + log.WithFields(logger.Fields{ "context": context, "msg_id": msgID, @@ -165,7 +177,7 @@ func (c *Connection) msgCallback(msgID uint16, data []byte) { "is_multi": isMulti, "seq_num": seqNum, "msg_crc": msg.GetCrcString(), - }).Debugf("<== govpp recv: %s", msg.GetMessageName()) + }).Debugf("<-- govpp RECEIVE: %s %+v", msg.GetMessageName(), msg) } if context == 0 || c.isNotificationMessage(msgID) { @@ -210,7 +222,7 @@ func (c *Connection) msgCallback(msgID uint16, data []byte) { func sendReply(ch *Channel, reply *vppReply) { select { case ch.replyChan <- reply: - // reply sent successfully + // reply sent successfully case <-time.After(ReplyChannelTimeout): // receiver still not ready log.WithFields(logger.Fields{ |