@@ -19,7 +19,6 @@ package producer
19
19
import (
20
20
"fmt"
21
21
22
- "github.com/golang/protobuf/proto"
23
22
"github.com/hyperledger/fabric/protos/common"
24
23
pb "github.com/hyperledger/fabric/protos/peer"
25
24
"github.com/hyperledger/fabric/protos/utils"
@@ -39,8 +38,9 @@ func SendProducerBlockEvent(block *common.Block) error {
39
38
bevent .Metadata = block .Metadata
40
39
bevent .Data = & common.BlockData {}
41
40
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 {
44
44
logger .Errorf ("Error getting tx from block(%s)\n " , err )
45
45
} else if env != nil {
46
46
// get the payload from the envelope
@@ -52,56 +52,51 @@ func SendProducerBlockEvent(block *common.Block) error {
52
52
if common .HeaderType (payload .Header .ChainHeader .Type ) == common .HeaderType_ENDORSER_TRANSACTION {
53
53
tx , err := utils .GetTransaction (payload .Data )
54
54
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 )
57
56
}
58
- chaincodeActionPayload := & pb.ChaincodeActionPayload {}
59
- err = proto .Unmarshal (tx .Actions [0 ].Payload , chaincodeActionPayload )
57
+ chaincodeActionPayload , err := utils .GetChaincodeActionPayload (tx .Actions [0 ].Payload )
60
58
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 )
63
60
}
64
-
65
- propRespPayload := & pb.ProposalResponsePayload {}
66
- err = proto .Unmarshal (chaincodeActionPayload .Action .ProposalResponsePayload , propRespPayload )
61
+ propRespPayload , err := utils .GetProposalResponsePayload (chaincodeActionPayload .Action .ProposalResponsePayload )
67
62
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 )
70
64
}
71
65
//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 )
74
67
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 )
77
69
}
78
70
// 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
79
75
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 )
81
81
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 )
84
83
}
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 )
87
85
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 )
90
87
}
91
- tx . Actions [ 0 ]. Payload , err = proto . Marshal ( chaincodeActionPayload )
88
+ env . Payload , err = utils . GetBytesPayload ( payload )
92
89
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 )
95
91
}
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 )
101
95
}
102
96
}
103
97
}
104
98
}
99
+ bevent .Data .Data = append (bevent .Data .Data , ebytes )
105
100
}
106
101
return Send (CreateBlockEvent (bevent ))
107
102
}
0 commit comments