@@ -22,8 +22,6 @@ package fabricclient
2222import (
2323 "crypto/x509"
2424 "fmt"
25- "io"
26- "strings"
2725 "time"
2826
2927 "github.com/hyperledger/fabric-sdk-go/config"
@@ -38,7 +36,7 @@ import (
3836// HFC sends a block of transactions of endorsed proposals requiring ordering.
3937type Orderer interface {
4038 GetURL () string
41- SendBroadcast (envelope * SignedEnvelope ) error
39+ SendBroadcast (envelope * SignedEnvelope ) ( error , * common. Status )
4240 SendDeliver (envelope * SignedEnvelope ) (chan * common.Block , chan error )
4341}
4442
@@ -81,45 +79,51 @@ func (o *orderer) GetURL() string {
8179}
8280
8381// SendBroadcast Send the created transaction to Orderer.
84- func (o * orderer ) SendBroadcast (envelope * SignedEnvelope ) error {
82+ func (o * orderer ) SendBroadcast (envelope * SignedEnvelope ) ( error , * common. Status ) {
8583 conn , err := grpc .Dial (o .url , o .grpcDialOption ... )
8684 if err != nil {
87- return err
85+ return err , nil
8886 }
8987 defer conn .Close ()
9088
9189 broadcastStream , err := ab .NewAtomicBroadcastClient (conn ).Broadcast (context .Background ())
9290 if err != nil {
93- return fmt .Errorf ("Error Create NewAtomicBroadcastClient %v" , err )
91+ return fmt .Errorf ("Error Create NewAtomicBroadcastClient %v" , err ), nil
9492 }
9593 done := make (chan bool )
9694 var broadcastErr error
95+ var broadcastStatus * common.Status = nil
96+
9797 go func () {
9898 for {
9999 broadcastResponse , err := broadcastStream .Recv ()
100100 logger .Debugf ("Orderer.broadcastStream - response:%v, error:%v\n " , broadcastResponse , err )
101101 if err != nil {
102- if strings .Contains (err .Error (), io .EOF .Error ()) {
103- done <- true
104- return
105- }
106102 broadcastErr = fmt .Errorf ("error broadcast response : %v" , err )
107- continue
103+ done <- true
104+ return
105+ }
106+ broadcastStatus = & broadcastResponse .Status
107+ if broadcastResponse .Status == common .Status_SUCCESS {
108+ done <- true
109+ return
108110 }
109111 if broadcastResponse .Status != common .Status_SUCCESS {
110112 broadcastErr = fmt .Errorf ("broadcast response is not success : %v" , broadcastResponse .Status )
113+ done <- true
114+ return
111115 }
112116 }
113117 }()
114118 if err := broadcastStream .Send (& common.Envelope {
115119 Payload : envelope .Payload ,
116120 Signature : envelope .Signature ,
117121 }); err != nil {
118- return fmt .Errorf ("Failed to send a envelope to orderer: %v" , err )
122+ return fmt .Errorf ("Failed to send a envelope to orderer: %v" , err ), nil
119123 }
120124 broadcastStream .CloseSend ()
121125 <- done
122- return broadcastErr
126+ return broadcastErr , broadcastStatus
123127}
124128
125129// SendDeliver sends a deliver request to the ordering service and returns the
@@ -175,6 +179,12 @@ func (o *orderer) SendDeliver(envelope *SignedEnvelope) (chan *common.Block,
175179 close (responses )
176180 return
177181 }
182+ if t .Status != common .Status_SUCCESS {
183+ errors <- fmt .Errorf ("Got error status from ordering service: %s" ,
184+ t .Status )
185+ return
186+ }
187+
178188 // Response is a requested block
179189 case * ab.DeliverResponse_Block :
180190 logger .Debug ("Received block from ordering service" )
0 commit comments