"sync/atomic"
"time"
+ log "github.com/sirupsen/logrus"
wire "github.com/tendermint/go-wire"
cmn "github.com/tendermint/tmlibs/common"
flow "github.com/tendermint/tmlibs/flowrate"
}
func (c *MConnection) flush() {
- c.Logger.Debug("Flush", "conn", c)
+ log.WithField("conn", c).Debug("Flush")
err := c.bufWriter.Flush()
if err != nil {
- c.Logger.Error("MConnection flush failed", "error", err)
+ log.WithField("error", err).Error("MConnection flush failed")
}
}
return false
}
- c.Logger.Debug("Send", "channel", chID, "conn", c, "msg", msg) //, "bytes", wire.BinaryBytes(msg))
+ log.WithFields(log.Fields{
+ "chID": chID,
+ "conn": c,
+ "msg": msg,
+ }).Debug("Send")
// Send message to channel.
channel, ok := c.channelsIdx[chID]
if !ok {
- c.Logger.Error(cmn.Fmt("Cannot send bytes, unknown channel %X", chID))
+ log.WithField("chID", chID).Error(cmn.Fmt("Cannot send bytes, unknown channel"))
return false
}
default:
}
} else {
- c.Logger.Error("Send failed", "channel", chID, "conn", c, "msg", msg)
+ log.WithFields(log.Fields{
+ "chID": chID,
+ "conn": c,
+ "msg": msg,
+ }).Error("Send failed")
}
return success
}
return false
}
- c.Logger.Debug("TrySend", "channel", chID, "conn", c, "msg", msg)
+ log.WithFields(log.Fields{
+ "chID": chID,
+ "conn": c,
+ "msg": msg,
+ }).Debug("TrySend")
// Send message to channel.
channel, ok := c.channelsIdx[chID]
if !ok {
- c.Logger.Error(cmn.Fmt("Cannot send bytes, unknown channel %X", chID))
+ log.WithField("chID", chID).Error(cmn.Fmt("cannot send bytes, unknown channel"))
return false
}
channel, ok := c.channelsIdx[chID]
if !ok {
- c.Logger.Error(cmn.Fmt("Unknown channel %X", chID))
+ log.WithField("chID", chID).Error(cmn.Fmt("Unknown channel"))
return false
}
return channel.canSend()
channel.updateStats()
}
case <-c.pingTimer.Ch:
- c.Logger.Debug("Send Ping")
+ log.Debug("Send Ping")
wire.WriteByte(packetTypePing, c.bufWriter, &n, &err)
c.sendMonitor.Update(int(n))
c.flush()
case <-c.pong:
- c.Logger.Debug("Send Pong")
+ log.Debug("Send Pong")
wire.WriteByte(packetTypePong, c.bufWriter, &n, &err)
c.sendMonitor.Update(int(n))
c.flush()
break FOR_LOOP
}
if err != nil {
- c.Logger.Error("Connection failed @ sendRoutine", "conn", c, "error", err)
+ log.WithFields(log.Fields{
+ "conn": c,
+ "error": err,
+ }).Error("Connection failed @ sendRoutine")
c.stopForError(err)
break FOR_LOOP
}
// Make & send a msgPacket from this channel
n, err := leastChannel.writeMsgPacketTo(c.bufWriter)
if err != nil {
- c.Logger.Error("Failed to write msgPacket", "error", err)
+ log.WithField("error", err).Error("Failed to write msgPacket")
c.stopForError(err)
return true
}
c.recvMonitor.Update(int(n))
if err != nil {
if c.IsRunning() {
- c.Logger.Error("Connection failed @ recvRoutine (reading byte)", "conn", c, "error", err)
+ log.WithFields(log.Fields{
+ "conn": c,
+ "error": err,
+ }).Error("Connection failed @ recvRoutine (reading byte)")
c.stopForError(err)
}
break FOR_LOOP
switch pktType {
case packetTypePing:
// TODO: prevent abuse, as they cause flush()'s.
- c.Logger.Debug("Receive Ping")
+ log.Debug("Receive Ping")
c.pong <- struct{}{}
case packetTypePong:
// do nothing
- c.Logger.Debug("Receive Pong")
+ log.Debug("Receive Pong")
case packetTypeMsg:
pkt, n, err := msgPacket{}, int(0), error(nil)
wire.ReadBinaryPtr(&pkt, c.bufReader, maxMsgPacketTotalSize, &n, &err)
c.recvMonitor.Update(int(n))
if err != nil {
if c.IsRunning() {
- c.Logger.Error("Connection failed @ recvRoutine", "conn", c, "error", err)
+ log.WithFields(log.Fields{
+ "conn": c,
+ "error": err,
+ }).Error("Connection failed @ recvRoutine")
c.stopForError(err)
}
break FOR_LOOP
msgBytes, err := channel.recvMsgPacket(pkt)
if err != nil {
if c.IsRunning() {
- c.Logger.Error("Connection failed @ recvRoutine", "conn", c, "error", err)
+ log.WithFields(log.Fields{
+ "conn": c,
+ "error": err,
+ }).Error("Connection failed @ recvRoutine")
c.stopForError(err)
}
break FOR_LOOP
}
if msgBytes != nil {
c.Logger.Debug("Received bytes", "chID", pkt.ChannelID, "msgBytes", msgBytes)
+ log.WithFields(log.Fields{
+ "channelID": pkt.ChannelID,
+ "msgBytes": msgBytes,
+ }).Debug("Received bytes")
c.onReceive(pkt.ChannelID, msgBytes)
}
default:
// Not goroutine-safe
func (ch *Channel) writeMsgPacketTo(w io.Writer) (n int, err error) {
packet := ch.nextMsgPacket()
- // log.Debug("Write Msg Packet", "conn", ch.conn, "packet", packet)
wire.WriteByte(packetTypeMsg, w, &n, &err)
wire.WriteBinary(packet, w, &n, &err)
if err == nil {
// Handles incoming msgPackets. Returns a msg bytes if msg is complete.
// Not goroutine-safe
func (ch *Channel) recvMsgPacket(packet msgPacket) ([]byte, error) {
- // log.Debug("Read Msg Packet", "conn", ch.conn, "packet", packet)
if ch.desc.RecvMessageCapacity < len(ch.recving)+len(packet.Bytes) {
return nil, wire.ErrBinaryReadOverflow
}
"time"
"github.com/pkg/errors"
+ log "github.com/sirupsen/logrus"
crypto "github.com/tendermint/go-crypto"
wire "github.com/tendermint/go-wire"
cmn "github.com/tendermint/tmlibs/common"
func() {
var n int
wire.ReadBinary(peerNodeInfo, p.conn, maxNodeInfoSize, &n, &err2)
- p.Logger.Info("Peer handshake", "peerNodeInfo", peerNodeInfo)
+ log.WithField("peerNodeInfo", peerNodeInfo).Info("Peer handshake")
})
if err1 != nil {
return errors.Wrap(err1, "Error during handshake/write")
package p2p
import (
- golog "log"
"net"
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
+ log "github.com/sirupsen/logrus"
crypto "github.com/tendermint/go-crypto"
)
func (p *remotePeer) Start() {
l, e := net.Listen("tcp", "127.0.0.1:0") // any available address
if e != nil {
- golog.Fatalf("net.Listen tcp :0: %+v", e)
+ log.Fatalf("net.Listen tcp :0: %+v", e)
}
p.addr = NewNetAddress(l.Addr())
p.quit = make(chan struct{})
for {
conn, err := l.Accept()
if err != nil {
- golog.Fatalf("Failed to accept conn: %+v", err)
+ log.Fatalf("Failed to accept conn: %+v", err)
}
peer, err := newInboundPeerWithConfig(conn, make(map[byte]Reactor), make([]*ChannelDescriptor, 0), func(p *Peer, r interface{}) {}, p.PrivKey, p.Config)
if err != nil {
- golog.Fatalf("Failed to create a peer: %+v", err)
+ log.Fatalf("Failed to create a peer: %+v", err)
}
err = peer.HandshakeTimeout(&NodeInfo{
PubKey: p.PrivKey.PubKey().Unwrap().(crypto.PubKeyEd25519),
Version: "123.123.123",
}, 1*time.Second)
if err != nil {
- golog.Fatalf("Failed to perform handshake: %+v", err)
+ log.Fatalf("Failed to perform handshake: %+v", err)
}
select {
case <-p.quit:
"reflect"
"time"
+ log "github.com/sirupsen/logrus"
wire "github.com/tendermint/go-wire"
cmn "github.com/tendermint/tmlibs/common"
)
addr, err := NewNetAddressString(p.ListenAddr)
if err != nil {
// this should never happen
- r.Logger.Error("Error in AddPeer: invalid peer address", "addr", p.ListenAddr, "error", err)
+ log.WithFields(log.Fields{
+ "addr": p.ListenAddr,
+ "error": err,
+ }).Error("Error in AddPeer: Invalid peer address")
return
}
r.book.AddAddress(addr, addr)
r.IncrementMsgCountForPeer(srcAddrStr)
if r.ReachedMaxMsgCountForPeer(srcAddrStr) {
- r.Logger.Error("Maximum number of messages reached for peer", "peer", srcAddrStr)
+ log.WithField("peer", srcAddrStr).Error("Maximum number of messages reached for peer")
// TODO remove src from peers?
return
}
_, msg, err := DecodeMessage(msgBytes)
if err != nil {
- r.Logger.Error("Error decoding message", "error", err)
+ log.WithField("error", err).Error("Error decoding message")
return
}
- r.Logger.Info("Received message", "msg", msg)
+ log.WithField("msg", msg).Info("Reveived message")
switch msg := msg.(type) {
case *pexRequestMessage:
}
}
default:
- r.Logger.Error(fmt.Sprintf("Unknown message type %v", reflect.TypeOf(msg)))
+ log.WithField("type", reflect.TypeOf(msg)).Error("Unknown message type")
}
}
func (r *PEXReactor) ensurePeers() {
numOutPeers, _, numDialing := r.Switch.NumPeers()
numToDial := minNumOutboundPeers - (numOutPeers + numDialing)
- r.Logger.Info("Ensure peers", "numOutPeers", numOutPeers, "numDialing", numDialing, "numToDial", numToDial)
+ log.WithFields(log.Fields{
+ "numOutPeers": numOutPeers,
+ "numDialing": numDialing,
+ "numToDial": numToDial,
+ }).Info("Ensure peers")
if numToDial <= 0 {
return
}
alreadyDialing := r.Switch.IsDialing(try)
alreadyConnected := r.Switch.Peers().Has(try.IP.String())
if alreadySelected || alreadyDialing || alreadyConnected {
- // r.Logger.Info("Cannot dial address", "addr", try,
- // "alreadySelected", alreadySelected,
- // "alreadyDialing", alreadyDialing,
- // "alreadyConnected", alreadyConnected)
continue
} else {
- r.Logger.Info("Will dial address", "addr", try)
+ log.WithField("addr", try).Info("Will dial address")
picked = try
break
}
if peers := r.Switch.Peers().List(); len(peers) > 0 {
i := rand.Int() % len(peers)
peer := peers[i]
- r.Logger.Info("No addresses to dial. Sending pexRequest to random peer", "peer", peer)
+ log.WithField("peer", peer).Info("No addresses to dial. Sending pexRequest to random peer")
r.RequestPEX(peer)
}
}
"time"
cfg "github.com/bytom/config"
+ log "github.com/sirupsen/logrus"
crypto "github.com/tendermint/go-crypto"
cmn "github.com/tendermint/tmlibs/common"
)
return err
}
- sw.Logger.Info("Added peer", "peer", peer)
+ log.WithField("peer", peer).Info("Added peer")
return nil
}
func (sw *Switch) dialSeed(addr *NetAddress) {
peer, err := sw.DialPeerWithAddress(addr, true)
if err != nil {
- sw.Logger.Error("Error dialing seed", "error", err)
+ log.WithField("error", err).Error("Error dialing seed")
} else {
- sw.Logger.Info("Connected to seed", "peer", peer)
+ log.WithField("peer", peer).Info("Connected to seed")
}
}
sw.dialing.Set(addr.IP.String(), addr)
defer sw.dialing.Delete(addr.IP.String())
- sw.Logger.Info("Dialing peer", "address", addr)
+ log.WithField("address", addr).Info("Dialing peer")
peer, err := newOutboundPeerWithConfig(addr, sw.reactorsByCh, sw.chDescs, sw.StopPeerForError, sw.nodePrivKey, sw.peerConfig)
if err != nil {
- sw.Logger.Info("Failed to dial peer", "address", addr, "error", err)
+ log.WithFields(log.Fields{
+ "address": addr,
+ "error": err,
+ }).Info("Failed to dial peer")
return nil, err
}
peer.SetLogger(sw.Logger.With("peer", addr))
}
err = sw.AddPeer(peer)
if err != nil {
- sw.Logger.Info("Failed to add peer", "address", addr, "error", err)
+ log.WithFields(log.Fields{
+ "address": addr,
+ "error": err,
+ }).Info("Failed to add peer")
peer.CloseConn()
return nil, err
}
- sw.Logger.Info("Dialed and added peer", "address", addr, "peer", peer)
+ log.WithFields(log.Fields{
+ "address": addr,
+ "error": err,
+ }).Info("Dialed and added peer")
return peer, nil
}
// NOTE: Broadcast uses goroutines, so order of broadcast may not be preserved.
func (sw *Switch) Broadcast(chID byte, msg interface{}) chan bool {
successChan := make(chan bool, len(sw.peers.List()))
- sw.Logger.Debug("Broadcast", "channel", chID, "msg", msg)
+ log.WithFields(log.Fields{
+ "chID": chID,
+ "msg": msg,
+ }).Debug("Broadcast")
for _, peer := range sw.peers.List() {
go func(peer *Peer) {
success := peer.Send(chID, msg)
// TODO: make record depending on reason.
func (sw *Switch) StopPeerForError(peer *Peer, reason interface{}) {
addr := NewNetAddress(peer.Addr())
- sw.Logger.Info("Stopping peer for error", "peer", peer, "error", reason)
+ log.WithFields(log.Fields{
+ "peer": peer,
+ "error": reason,
+ }).Info("Stopping peer due to error")
sw.stopAndRemovePeer(peer, reason)
if peer.IsPersistent() {
go func() {
- sw.Logger.Info("Reconnecting to peer", "peer", peer)
+ log.WithField("peer", peer).Info("Reconnecting to peer")
for i := 1; i < reconnectAttempts; i++ {
if !sw.IsRunning() {
return
peer, err := sw.DialPeerWithAddress(addr, true)
if err != nil {
if i == reconnectAttempts {
- sw.Logger.Info("Error reconnecting to peer. Giving up", "tries", i, "error", err)
+ log.WithFields(log.Fields{
+ "retries": i,
+ "error": err,
+ }).Info("Error reconnecting to peer. Giving up")
return
}
- sw.Logger.Info("Error reconnecting to peer. Trying again", "tries", i, "error", err)
+ log.WithFields(log.Fields{
+ "retries": i,
+ "error": err,
+ }).Info("Error reconnecting to peer. Trying again")
time.Sleep(reconnectInterval)
continue
}
- sw.Logger.Info("Reconnected to peer", "peer", peer)
+ log.WithField("peer", peer).Info("Reconnected to peer")
return
}
}()
// Disconnect from a peer gracefully.
// TODO: handle graceful disconnects.
func (sw *Switch) StopPeerGracefully(peer *Peer) {
- sw.Logger.Info("Stopping peer gracefully")
+ log.Info("Stopping peer gracefully")
sw.stopAndRemovePeer(peer, nil)
}
// ignore connection if we already have enough
maxPeers := sw.config.MaxNumPeers
if maxPeers <= sw.peers.Size() {
- sw.Logger.Info("Ignoring inbound connection: already have enough peers", "address", inConn.RemoteAddr().String(), "numPeers", sw.peers.Size(), "max", maxPeers)
+ log.WithFields(log.Fields{
+ "address": inConn.RemoteAddr().String(),
+ "numPeers": sw.peers.Size(),
+ "max": maxPeers,
+ }).Info("Ignoring inbound connection: already have enough peers")
continue
}
// New inbound connection!
err := sw.addPeerWithConnectionAndConfig(inConn, sw.peerConfig)
if err != nil {
- sw.Logger.Info("Ignoring inbound connection: error while adding peer", "address", inConn.RemoteAddr().String(), "error", err)
+ log.WithFields(log.Fields{
+ "address": inConn.RemoteAddr().String(),
+ "error": err,
+ }).Info("Ignoring inbound connection: error while adding peer")
continue
}