@@ -19,7 +19,6 @@ package producer
1919import (
2020 "fmt"
2121
22- "github.com/golang/protobuf/proto"
2322 "github.com/hyperledger/fabric/protos/common"
2423 pb "github.com/hyperledger/fabric/protos/peer"
2524 "github.com/hyperledger/fabric/protos/utils"
@@ -39,8 +38,9 @@ func SendProducerBlockEvent(block *common.Block) error {
3938 bevent .Metadata = block .Metadata
4039 bevent .Data = & common.BlockData {}
4140 for _ , d := range block .Data .Data {
42- if d != nil {
43- if env , err := utils .GetEnvelopeFromBlock (d ); err != nil {
41+ ebytes := d
42+ if ebytes != nil {
43+ if env , err := utils .GetEnvelopeFromBlock (ebytes ); err != nil {
4444 logger .Errorf ("Error getting tx from block(%s)\n " , err )
4545 } else if env != nil {
4646 // get the payload from the envelope
@@ -52,56 +52,51 @@ func SendProducerBlockEvent(block *common.Block) error {
5252 if common .HeaderType (payload .Header .ChainHeader .Type ) == common .HeaderType_ENDORSER_TRANSACTION {
5353 tx , err := utils .GetTransaction (payload .Data )
5454 if err != nil {
55- logger .Errorf ("Error unmarshalling transaction payload for block event: %s" , err )
56- continue
55+ return fmt .Errorf ("Error unmarshalling transaction payload for block event: %s" , err )
5756 }
58- chaincodeActionPayload := & pb.ChaincodeActionPayload {}
59- err = proto .Unmarshal (tx .Actions [0 ].Payload , chaincodeActionPayload )
57+ chaincodeActionPayload , err := utils .GetChaincodeActionPayload (tx .Actions [0 ].Payload )
6058 if err != nil {
61- logger .Errorf ("Error unmarshalling transaction action payload for block event: %s" , err )
62- continue
59+ return fmt .Errorf ("Error unmarshalling transaction action payload for block event: %s" , err )
6360 }
64-
65- propRespPayload := & pb.ProposalResponsePayload {}
66- err = proto .Unmarshal (chaincodeActionPayload .Action .ProposalResponsePayload , propRespPayload )
61+ propRespPayload , err := utils .GetProposalResponsePayload (chaincodeActionPayload .Action .ProposalResponsePayload )
6762 if err != nil {
68- logger .Errorf ("Error unmarshalling proposal response payload for block event: %s" , err )
69- continue
63+ return fmt .Errorf ("Error unmarshalling proposal response payload for block event: %s" , err )
7064 }
7165 //ENDORSER_ACTION, ProposalResponsePayload.Extension field contains ChaincodeAction
72- caPayload := & pb.ChaincodeAction {}
73- err = proto .Unmarshal (propRespPayload .Extension , caPayload )
66+ caPayload , err := utils .GetChaincodeAction (propRespPayload .Extension )
7467 if err != nil {
75- logger .Errorf ("Error unmarshalling chaincode action for block event: %s" , err )
76- continue
68+ return fmt .Errorf ("Error unmarshalling chaincode action for block event: %s" , err )
7769 }
7870 // Drop read write set from transaction before sending block event
71+ // Performance issue with chaincode deploy txs and causes nodejs grpc
72+ // to hit max message size bug
73+ // Dropping the read write set may cause issues for security and
74+ // we will need to revist when event security is addressed
7975 caPayload .Results = nil
80- propRespPayload .Extension , err = proto .Marshal (caPayload )
76+ chaincodeActionPayload .Action .ProposalResponsePayload , err = utils .GetBytesProposalResponsePayload (propRespPayload .ProposalHash , caPayload .Results , caPayload .Events )
77+ if err != nil {
78+ return fmt .Errorf ("Error marshalling tx proposal payload for block event: %s" , err )
79+ }
80+ tx .Actions [0 ].Payload , err = utils .GetBytesChaincodeActionPayload (chaincodeActionPayload )
8181 if err != nil {
82- logger .Errorf ("Error marshalling tx proposal extension payload for block event: %s" , err )
83- continue
82+ return fmt .Errorf ("Error marshalling tx action payload for block event: %s" , err )
8483 }
85- // Marshal Transaction again and append to block to be sent
86- chaincodeActionPayload .Action .ProposalResponsePayload , err = proto .Marshal (propRespPayload )
84+ payload .Data , err = utils .GetBytesTransaction (tx )
8785 if err != nil {
88- logger .Errorf ("Error marshalling tx proposal payload for block event: %s" , err )
89- continue
86+ return fmt .Errorf ("Error marshalling payload for block event: %s" , err )
9087 }
91- tx . Actions [ 0 ]. Payload , err = proto . Marshal ( chaincodeActionPayload )
88+ env . Payload , err = utils . GetBytesPayload ( payload )
9289 if err != nil {
93- logger .Errorf ("Error marshalling tx action payload for block event: %s" , err )
94- continue
90+ return fmt .Errorf ("Error marshalling tx envelope for block event: %s" , err )
9591 }
96- if t , err := proto .Marshal (tx ); err == nil {
97- bevent .Data .Data = append (bevent .Data .Data , t )
98- logger .Infof ("calling sendProducerBlockEvent\n " )
99- } else {
100- logger .Infof ("Cannot marshal transaction %s\n " , err )
92+ ebytes , err = utils .GetBytesEnvelope (env )
93+ if err != nil {
94+ return fmt .Errorf ("Cannot marshal transaction %s" , err )
10195 }
10296 }
10397 }
10498 }
99+ bevent .Data .Data = append (bevent .Data .Data , ebytes )
105100 }
106101 return Send (CreateBlockEvent (bevent ))
107102}
0 commit comments