Skip to content

Commit 450b122

Browse files
Srinivasan MuralidharanGerrit Code Review
authored andcommitted
Merge "[FAB-2691] Improve Bcst/Dlvr log serviceability"
2 parents 7d900f3 + 88cb6cc commit 450b122

File tree

2 files changed

+66
-25
lines changed

2 files changed

+66
-25
lines changed

orderer/common/broadcast/broadcast.go

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -85,66 +85,83 @@ func (bh *handlerImpl) Handle(srv ab.AtomicBroadcast_BroadcastServer) error {
8585

8686
payload := &cb.Payload{}
8787
err = proto.Unmarshal(msg.Payload, payload)
88-
if payload.Header == nil /* || payload.Header.ChannelHeader == nil */ {
89-
logger.Debugf("Received malformed message, dropping connection")
88+
if err != nil {
89+
if logger.IsEnabledFor(logging.WARNING) {
90+
logger.Warningf("Received malformed message, dropping connection: %s", err)
91+
}
92+
return srv.Send(&ab.BroadcastResponse{Status: cb.Status_BAD_REQUEST})
93+
}
94+
95+
if payload.Header == nil {
96+
logger.Warningf("Received malformed message, with missing header, dropping connection")
9097
return srv.Send(&ab.BroadcastResponse{Status: cb.Status_BAD_REQUEST})
9198
}
9299

93100
chdr, err := utils.UnmarshalChannelHeader(payload.Header.ChannelHeader)
94101
if err != nil {
95-
logger.Debugf("Received malformed message (bad channel header), dropping connection")
102+
if logger.IsEnabledFor(logging.WARNING) {
103+
logger.Warningf("Received malformed message (bad channel header), dropping connection: %s", err)
104+
}
96105
return srv.Send(&ab.BroadcastResponse{Status: cb.Status_BAD_REQUEST})
97106
}
98107

99108
if chdr.Type == int32(cb.HeaderType_CONFIG_UPDATE) {
100109
logger.Debugf("Preprocessing CONFIG_UPDATE")
101110
msg, err = bh.sm.Process(msg)
102111
if err != nil {
112+
if logger.IsEnabledFor(logging.WARNING) {
113+
logger.Warningf("Rejecting CONFIG_UPDATE because: %s", err)
114+
}
103115
return srv.Send(&ab.BroadcastResponse{Status: cb.Status_BAD_REQUEST})
104116
}
105117

106118
err = proto.Unmarshal(msg.Payload, payload)
107-
if payload.Header == nil {
119+
if err != nil || payload.Header == nil {
108120
logger.Criticalf("Generated bad transaction after CONFIG_UPDATE processing")
109121
return srv.Send(&ab.BroadcastResponse{Status: cb.Status_INTERNAL_SERVER_ERROR})
110122
}
111123

112124
chdr, err = utils.UnmarshalChannelHeader(payload.Header.ChannelHeader)
113125
if err != nil {
114-
logger.Debugf("Generated bad transaction after CONFIG_UPDATE processing (bad channel header)")
115-
return srv.Send(&ab.BroadcastResponse{Status: cb.Status_BAD_REQUEST})
126+
logger.Criticalf("Generated bad transaction after CONFIG_UPDATE processing (bad channel header): %s", err)
127+
return srv.Send(&ab.BroadcastResponse{Status: cb.Status_INTERNAL_SERVER_ERROR})
116128
}
117129

118130
if chdr.ChannelId == "" {
119-
logger.Criticalf("Generated bad transaction after CONFIG_UPDATE processing")
131+
logger.Criticalf("Generated bad transaction after CONFIG_UPDATE processing (empty channel ID)")
120132
return srv.Send(&ab.BroadcastResponse{Status: cb.Status_INTERNAL_SERVER_ERROR})
121133
}
122134
}
123135

124136
support, ok := bh.sm.GetChain(chdr.ChannelId)
125137
if !ok {
138+
if logger.IsEnabledFor(logging.WARNING) {
139+
logger.Warningf("Rejecting broadcast because channel %s was not found", chdr.ChannelId)
140+
}
126141
return srv.Send(&ab.BroadcastResponse{Status: cb.Status_NOT_FOUND})
127142
}
128143

129144
if logger.IsEnabledFor(logging.DEBUG) {
130-
logger.Debugf("Broadcast is filtering message for channel %s", chdr.ChannelId)
145+
logger.Debugf("Broadcast is filtering message of type %d for channel %s", chdr.Type, chdr.ChannelId)
131146
}
132147

133148
// Normal transaction for existing chain
134149
_, filterErr := support.Filters().Apply(msg)
135150

136151
if filterErr != nil {
137-
logger.Debugf("Rejecting broadcast message")
152+
if logger.IsEnabledFor(logging.WARNING) {
153+
logger.Warningf("Rejecting broadcast message because of filter error: %s", err)
154+
}
138155
return srv.Send(&ab.BroadcastResponse{Status: cb.Status_BAD_REQUEST})
139156
}
140157

141158
if !support.Enqueue(msg) {
142-
logger.Debugf("Consenter instructed us to shut down")
159+
logger.Infof("Consenter instructed us to shut down")
143160
return srv.Send(&ab.BroadcastResponse{Status: cb.Status_SERVICE_UNAVAILABLE})
144161
}
145162

146163
if logger.IsEnabledFor(logging.DEBUG) {
147-
logger.Debugf("Broadcast is successfully enqueued message for chain %s", chdr.ChannelId)
164+
logger.Debugf("Broadcast has successfully enqueued message of type %d for chain %s", chdr.Type, chdr.ChannelId)
148165
}
149166

150167
err = srv.Send(&ab.BroadcastResponse{Status: cb.Status_SUCCESS})

orderer/common/deliver/deliver.go

Lines changed: 38 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ limitations under the License.
1717
package deliver
1818

1919
import (
20-
"fmt"
21-
2220
"github.com/hyperledger/fabric/common/policies"
2321
"github.com/hyperledger/fabric/orderer/common/filter"
2422
"github.com/hyperledger/fabric/orderer/common/sigfilter"
@@ -69,19 +67,24 @@ func (ds *deliverServer) Handle(srv ab.AtomicBroadcast_DeliverServer) error {
6967
logger.Debugf("Attempting to read seek info message")
7068
envelope, err := srv.Recv()
7169
if err != nil {
72-
logger.Errorf("Error reading from stream: %s", err)
70+
if logger.IsEnabledFor(logging.WARNING) {
71+
logger.Warningf("Error reading from stream: %s", err)
72+
}
7373
return err
7474
}
7575
payload := &cb.Payload{}
7676
if err = proto.Unmarshal(envelope.Payload, payload); err != nil {
77-
logger.Errorf("Received an envelope with no payload: %s", err)
78-
return err
77+
if logger.IsEnabledFor(logging.WARNING) {
78+
logger.Warningf("Received an envelope with no payload: %s", err)
79+
}
80+
return sendStatusReply(srv, cb.Status_BAD_REQUEST)
7981
}
8082

81-
if payload.Header == nil /* || payload.Header.ChannelHeader == nil */ {
82-
err = fmt.Errorf("Malformed envelope received with bad header")
83-
logger.Error(err)
84-
return err
83+
if payload.Header == nil {
84+
if logger.IsEnabledFor(logging.WARNING) {
85+
logger.Warningf("Malformed envelope received with bad header")
86+
}
87+
return sendStatusReply(srv, cb.Status_BAD_REQUEST)
8588
}
8689

8790
chdr, err := utils.UnmarshalChannelHeader(payload.Header.ChannelHeader)
@@ -92,23 +95,40 @@ func (ds *deliverServer) Handle(srv ab.AtomicBroadcast_DeliverServer) error {
9295

9396
chain, ok := ds.sm.GetChain(chdr.ChannelId)
9497
if !ok {
98+
// Note, we log this at DEBUG because SDKs will poll waiting for channels to be created
99+
// So we would expect our log to be somewhat flooded with these
100+
if logger.IsEnabledFor(logging.DEBUG) {
101+
logger.Debugf("Client request for channel %s not found", chdr.ChannelId)
102+
}
95103
return sendStatusReply(srv, cb.Status_NOT_FOUND)
96104
}
97105

98106
sf := sigfilter.New(policies.ChannelReaders, chain.PolicyManager())
99107
result, _ := sf.Apply(envelope)
100108
if result != filter.Forward {
109+
if logger.IsEnabledFor(logging.WARNING) {
110+
logger.Warningf("Received unauthorized deliver request for channel %s", chdr.ChannelId)
111+
}
101112
return sendStatusReply(srv, cb.Status_FORBIDDEN)
102113
}
103114

104115
seekInfo := &ab.SeekInfo{}
105116
if err = proto.Unmarshal(payload.Data, seekInfo); err != nil {
106-
logger.Errorf("Received a signed deliver request with malformed seekInfo payload: %s", err)
107-
return err
117+
if logger.IsEnabledFor(logging.WARNING) {
118+
logger.Warningf("Received a signed deliver request with malformed seekInfo payload: %s", err)
119+
}
120+
return sendStatusReply(srv, cb.Status_BAD_REQUEST)
121+
}
122+
123+
if seekInfo.Start == nil || seekInfo.Stop == nil {
124+
if logger.IsEnabledFor(logging.WARNING) {
125+
logger.Warningf("Received seekInfo message with missing start or stop %v, %v", seekInfo.Start, seekInfo.Stop)
126+
}
127+
return sendStatusReply(srv, cb.Status_BAD_REQUEST)
108128
}
109129

110130
if logger.IsEnabledFor(logging.DEBUG) {
111-
logger.Debugf("Received seekInfo %v for chain %s", seekInfo, chdr.ChannelId)
131+
logger.Debugf("Received seekInfo (%p) %v for chain %s", seekInfo, seekInfo, chdr.ChannelId)
112132
}
113133

114134
cursor, number := chain.Reader().Iterator(seekInfo.Start)
@@ -139,7 +159,9 @@ func (ds *deliverServer) Handle(srv ab.AtomicBroadcast_DeliverServer) error {
139159
return sendStatusReply(srv, status)
140160
}
141161

142-
logger.Debugf("Delivering block")
162+
if logger.IsEnabledFor(logging.DEBUG) {
163+
logger.Debugf("Delivering block for (%p) channel: %s", seekInfo, chdr.ChannelId)
164+
}
143165
if err := sendBlockReply(srv, block); err != nil {
144166
return err
145167
}
@@ -152,7 +174,9 @@ func (ds *deliverServer) Handle(srv ab.AtomicBroadcast_DeliverServer) error {
152174
if err := sendStatusReply(srv, cb.Status_SUCCESS); err != nil {
153175
return err
154176
}
155-
logger.Debugf("Done delivering, waiting for new SeekInfo")
177+
if logger.IsEnabledFor(logging.DEBUG) {
178+
logger.Debugf("Done delivering for (%p), waiting for new SeekInfo", seekInfo)
179+
}
156180
}
157181
}
158182

0 commit comments

Comments
 (0)