Skip to content

Commit 30927d7

Browse files
[FAB-5764] Errors handling - 2
All packages under gossip/gossip. New errors created using github.com/pkg/errors, stack trace added to returned errors using WithStack. In case of returned error was incorporated in new one, now it is wrapped using Wrap. %+v added to each logger call that output error. Change-Id: I77189061dbd2305addab80e35fb495a23d9ab010 Signed-off-by: Gennady Laventman <gennady@il.ibm.com>
1 parent 6925648 commit 30927d7

File tree

6 files changed

+53
-51
lines changed

6 files changed

+53
-51
lines changed

gossip/gossip/batcher.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,11 @@ SPDX-License-Identifier: Apache-2.0
77
package gossip
88

99
import (
10-
"fmt"
1110
"sync"
1211
"sync/atomic"
1312
"time"
13+
14+
"github.com/pkg/errors"
1415
)
1516

1617
type emitBatchCallback func([]interface{})
@@ -36,7 +37,7 @@ type batchingEmitter interface {
3637
// cb: a callback that is called in order for the forwarding to take place
3738
func newBatchingEmitter(iterations, burstSize int, latency time.Duration, cb emitBatchCallback) batchingEmitter {
3839
if iterations < 0 {
39-
panic(fmt.Errorf("Got a negative iterations number"))
40+
panic(errors.Errorf("Got a negative iterations number"))
4041
}
4142

4243
p := &batchingEmitterImpl{

gossip/gossip/certstore.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ package gossip
88

99
import (
1010
"bytes"
11-
"fmt"
1211
"sync"
1312

1413
"github.com/hyperledger/fabric/gossip/api"
@@ -18,6 +17,7 @@ import (
1817
"github.com/hyperledger/fabric/gossip/util"
1918
proto "github.com/hyperledger/fabric/protos/gossip"
2019
"github.com/op/go-logging"
20+
"github.com/pkg/errors"
2121
)
2222

2323
// certStore supports pull dissemination of identity messages
@@ -43,20 +43,20 @@ func newCertStore(puller pull.Mediator, idMapper identity.Mapper, selfIdentity a
4343
}
4444

4545
if err := certStore.idMapper.Put(selfPKIID, selfIdentity); err != nil {
46-
certStore.logger.Panic("Failed associating self PKIID to cert:", err)
46+
certStore.logger.Panicf("Failed associating self PKIID to cert: %+v", errors.WithStack(err))
4747
}
4848

4949
selfIdMsg, err := certStore.createIdentityMessage()
5050
if err != nil {
51-
logger.Panic("Failed creating self identity message:", err)
51+
certStore.logger.Panicf("Failed creating self identity message: %+v", errors.WithStack(err))
5252
}
5353
puller.Add(selfIdMsg)
5454
puller.RegisterMsgHook(pull.RequestMsgType, func(_ []string, msgs []*proto.SignedGossipMessage, _ proto.ReceivedMessage) {
5555
for _, msg := range msgs {
5656
pkiID := common.PKIidType(msg.GetPeerIdentity().PkiId)
5757
cert := api.PeerIdentityType(msg.GetPeerIdentity().Cert)
5858
if err := certStore.idMapper.Put(pkiID, cert); err != nil {
59-
certStore.logger.Warning("Failed adding identity", cert, ", reason:", err)
59+
certStore.logger.Warningf("Failed adding identity %v, reason %+v", cert, errors.WithStack(err))
6060
}
6161
}
6262
})
@@ -68,15 +68,15 @@ func (cs *certStore) handleMessage(msg proto.ReceivedMessage) {
6868
for _, env := range update.Data {
6969
m, err := env.ToGossipMessage()
7070
if err != nil {
71-
cs.logger.Warning("Data update contains an invalid message:", err)
71+
cs.logger.Warningf("Data update contains an invalid message: %+v", errors.WithStack(err))
7272
return
7373
}
7474
if !m.IsIdentityMsg() {
7575
cs.logger.Warning("Got a non-identity message:", m, "aborting")
7676
return
7777
}
7878
if err := cs.validateIdentityMsg(m); err != nil {
79-
cs.logger.Warning("Failed validating identity message:", err)
79+
cs.logger.Warningf("Failed validating identity message: %+v", errors.WithStack(err))
8080
return
8181
}
8282
}
@@ -87,14 +87,14 @@ func (cs *certStore) handleMessage(msg proto.ReceivedMessage) {
8787
func (cs *certStore) validateIdentityMsg(msg *proto.SignedGossipMessage) error {
8888
idMsg := msg.GetPeerIdentity()
8989
if idMsg == nil {
90-
return fmt.Errorf("Identity empty: %+v", msg)
90+
return errors.Errorf("Identity empty: %+v", msg)
9191
}
9292
pkiID := idMsg.PkiId
9393
cert := idMsg.Cert
9494
calculatedPKIID := cs.mcs.GetPKIidOfCert(api.PeerIdentityType(cert))
9595
claimedPKIID := common.PKIidType(pkiID)
9696
if !bytes.Equal(calculatedPKIID, claimedPKIID) {
97-
return fmt.Errorf("Calculated pkiID doesn't match identity: calculated: %v, claimedPKI-ID: %v", calculatedPKIID, claimedPKIID)
97+
return errors.Errorf("Calculated pkiID doesn't match identity: calculated: %v, claimedPKI-ID: %v", calculatedPKIID, claimedPKIID)
9898
}
9999

100100
verifier := func(peerIdentity []byte, signature, message []byte) error {
@@ -103,7 +103,7 @@ func (cs *certStore) validateIdentityMsg(msg *proto.SignedGossipMessage) error {
103103

104104
err := msg.Verify(cert, verifier)
105105
if err != nil {
106-
return fmt.Errorf("Failed verifying message: %v", err)
106+
return errors.Wrap(err, "Failed verifying message")
107107
}
108108

109109
return cs.mcs.ValidateIdentity(api.PeerIdentityType(idMsg.Cert))
@@ -130,7 +130,7 @@ func (cs *certStore) createIdentityMessage() (*proto.SignedGossipMessage, error)
130130
GossipMessage: m,
131131
}
132132
_, err := sMsg.Sign(signer)
133-
return sMsg, err
133+
return sMsg, errors.WithStack(err)
134134
}
135135

136136
func (cs *certStore) listRevokedPeers(isSuspected api.PeerSuspector) []common.PKIidType {

gossip/gossip/channel/channel.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"github.com/hyperledger/fabric/gossip/util"
2727
proto "github.com/hyperledger/fabric/protos/gossip"
2828
"github.com/op/go-logging"
29+
"github.com/pkg/errors"
2930
)
3031

3132
// Config is a configuration item
@@ -220,7 +221,7 @@ func NewGossipChannel(pkiID common.PKIidType, org api.OrgIdentityType, mcs api.M
220221
return false
221222
}
222223
if err := gc.mcs.VerifyByChannel(chainID, peerIdentity, msg.Signature, msg.Payload); err != nil {
223-
gc.logger.Warning("Peer", peerIdentity, "isn't eligible for channel", string(chainID), ":", err)
224+
gc.logger.Warningf("Peer %v isn't eligible for channel %s : %+v", peerIdentity, string(chainID), errors.WithStack(err))
224225
return false
225226
}
226227
return true
@@ -285,7 +286,7 @@ func (gc *gossipChannel) GetPeers() []discovery.NetworkMember {
285286
func (gc *gossipChannel) requestStateInfo() {
286287
req, err := gc.createStateInfoRequest()
287288
if err != nil {
288-
gc.logger.Warning("Failed creating SignedGossipMessage:", err)
289+
gc.logger.Warningf("Failed creating SignedGossipMessage: %+v", errors.WithStack(err))
289290
return
290291
}
291292
endpoints := filter.SelectPeers(gc.GetConf().PullPeerNum, gc.GetMembership(), gc.IsMemberInChan)
@@ -347,7 +348,7 @@ func (gc *gossipChannel) createBlockPuller() pull.Mediator {
347348
for i := range digests {
348349
seqNum, err := strconv.ParseUint(digests[i], 10, 64)
349350
if err != nil {
350-
gc.logger.Warning("Can't parse digest", digests[i], "err", err)
351+
gc.logger.Warningf("Can't parse digest %s : %+v", digests[i], errors.WithStack(err))
351352
continue
352353
}
353354
if seqNum >= height {
@@ -521,7 +522,7 @@ func (gc *gossipChannel) HandleMessage(msg proto.ReceivedMessage) {
521522
for _, item := range m.GetDataUpdate().Data {
522523
gMsg, err := item.ToGossipMessage()
523524
if err != nil {
524-
gc.logger.Warning("Data update contains an invalid message:", err)
525+
gc.logger.Warningf("Data update contains an invalid message: %+v", errors.WithStack(err))
525526
return
526527
}
527528
if !bytes.Equal(gMsg.Channel, []byte(gc.chainID)) {
@@ -563,7 +564,7 @@ func (gc *gossipChannel) handleStateInfSnapshot(m *proto.GossipMessage, sender c
563564
for _, envelope := range m.GetStateSnapshot().Elements {
564565
stateInf, err := envelope.ToGossipMessage()
565566
if err != nil {
566-
gc.logger.Warning("Channel", chanName, ": StateInfo snapshot contains an invalid message:", err)
567+
gc.logger.Warningf("Channel %s : StateInfo snapshot contains an invalid message: %+v", chanName, errors.WithStack(err))
567568
return
568569
}
569570
if !stateInf.IsStateInfoMsg() {
@@ -593,8 +594,7 @@ func (gc *gossipChannel) handleStateInfSnapshot(m *proto.GossipMessage, sender c
593594
}
594595
err = gc.ValidateStateInfoMessage(stateInf)
595596
if err != nil {
596-
gc.logger.Warning("Channel", chanName, ": Failed validating state info message:",
597-
stateInf, ":", err, "sent from", sender)
597+
gc.logger.Warningf("Channel %s: Failed validating state info message: %v sent from %v : %+v", chanName, stateInf, sender, errors.WithStack(err))
598598
return
599599
}
600600

@@ -622,7 +622,7 @@ func (gc *gossipChannel) verifyBlock(msg *proto.GossipMessage, sender common.PKI
622622
rawBlock := payload.Data
623623
err := gc.mcs.VerifyBlock(msg.Channel, seqNum, rawBlock)
624624
if err != nil {
625-
gc.logger.Warning("Received fabricated block from", sender, "in DataUpdate:", err)
625+
gc.logger.Warningf("Received fabricated block from %v in DataUpdate: %+v", sender, errors.WithStack(err))
626626
return false
627627
}
628628
return true
@@ -728,7 +728,7 @@ func (gc *gossipChannel) UpdateStateInfo(msg *proto.SignedGossipMessage) {
728728

729729
nodeMeta, err := common.FromBytes(msg.GetStateInfo().Metadata)
730730
if err != nil {
731-
gc.logger.Warning("Can't extract ledger height from metadata", err)
731+
gc.logger.Warningf("Can't extract ledger height from metadata %+v", errors.WithStack(err))
732732
return
733733
}
734734
gc.ledgerHeight = nodeMeta.LedgerHeight

0 commit comments

Comments
 (0)