Skip to content

Commit 967b5ef

Browse files
committed
[FAB-7695]: Restructure filtered events proto msg.
Currently FilteredBlock proto message inlcude the common.HeaderType information, while this information should be available per transaction base. E.g. instead of having: message FilteredBlock { string channel_id = 1; uint64 number = 2; // The position in the blockchain common.HeaderType type = 3; repeated FilteredTransaction filtered_tx = 4; } this commit moves transaction header type into FilteredTransaction and introduces a new extensible field to accomodate possible future extenstion for more transaction types: message FilteredTransaction { string txid = 1; common.HeaderType type = 2; TxValidationCode tx_validation_code = 3; oneof Data { FilteredProposalResponse proposal_response = 4; } } Change-Id: I92315ba391a35714282ed390c2c3d825673dc240 Signed-off-by: Artem Barger <bartem@il.ibm.com>
1 parent 3367d59 commit 967b5ef

File tree

6 files changed

+233
-120
lines changed

6 files changed

+233
-120
lines changed

core/peer/deliverevents.go

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -181,32 +181,34 @@ func (block *blockEvent) toFilteredBlock() (*peer.FilteredBlock, error) {
181181
return nil, err
182182
}
183183

184-
filteredBlock.Type = common.HeaderType(chdr.Type)
185184
filteredBlock.ChannelId = chdr.ChannelId
186185

187-
if filteredBlock.Type == common.HeaderType_ENDORSER_TRANSACTION {
186+
filteredTransaction := &peer.FilteredTransaction{
187+
Txid: chdr.TxId,
188+
Type: common.HeaderType(chdr.Type),
189+
TxValidationCode: txsFltr.Flag(txIndex)}
190+
191+
if filteredTransaction.Type == common.HeaderType_ENDORSER_TRANSACTION {
188192
tx, err := utils.GetTransaction(payload.Data)
189193
if err != nil {
190194
return nil, errors.WithMessage(err, "error unmarshal transaction payload for block event")
191195
}
192196

193-
filteredActionArray, err := transactionActions(tx.Actions).toFilteredActions()
197+
filteredTransaction.Data, err = transactionActions(tx.Actions).toFilteredActions()
194198
if err != nil {
195199
logger.Errorf(err.Error())
196200
return nil, err
197201
}
198-
filteredBlock.FilteredTx = append(filteredBlock.FilteredTx, &peer.FilteredTransaction{
199-
Txid: chdr.TxId,
200-
TxValidationCode: txsFltr.Flag(txIndex),
201-
FilteredAction: filteredActionArray})
202202
}
203+
204+
filteredBlock.FilteredTx = append(filteredBlock.FilteredTx, filteredTransaction)
203205
}
204206

205207
return filteredBlock, nil
206208
}
207209

208-
func (ta transactionActions) toFilteredActions() ([]*peer.FilteredAction, error) {
209-
var res []*peer.FilteredAction
210+
func (ta transactionActions) toFilteredActions() (*peer.FilteredTransaction_ProposalResponse, error) {
211+
proposalResponse := &peer.FilteredProposalResponse{}
210212
for _, action := range ta {
211213
chaincodeActionPayload, err := utils.GetChaincodeActionPayload(action.Payload)
212214
if err != nil {
@@ -229,16 +231,19 @@ func (ta transactionActions) toFilteredActions() ([]*peer.FilteredAction, error)
229231
}
230232

231233
if ccEvent.GetChaincodeId() != "" {
232-
res = append(res, &peer.FilteredAction{
234+
filteredAction := &peer.FilteredChaincodeAction{
233235
CcEvent: &peer.ChaincodeEvent{
234236
TxId: ccEvent.TxId,
235237
ChaincodeId: ccEvent.ChaincodeId,
236238
EventName: ccEvent.EventName,
237239
},
238-
})
240+
}
241+
proposalResponse.ChaincodeActions = append(proposalResponse.ChaincodeActions, filteredAction)
239242
}
240243
}
241-
return res, nil
244+
return &peer.FilteredTransaction_ProposalResponse{
245+
ProposalResponse: proposalResponse,
246+
}, nil
242247
}
243248

244249
func dumpStacktraceOnPanic() {

core/peer/deliverevents_test.go

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -247,13 +247,17 @@ func TestEventsServer_DeliverFiltered(t *testing.T) {
247247
test.Equal(uint64(0), block.Number)
248248
test.Equal(test.channelID, block.ChannelId)
249249
test.Equal(1, len(block.FilteredTx))
250-
test.Equal(test.txID, block.FilteredTx[0].Txid)
251-
test.Equal(peer.TxValidationCode_VALID, block.FilteredTx[0].TxValidationCode)
252-
filteredActions := block.FilteredTx[0].FilteredAction
253-
test.Equal(1, len(filteredActions))
254-
test.Equal(test.eventName, filteredActions[0].CcEvent.EventName)
255-
test.Equal(test.txID, filteredActions[0].CcEvent.TxId)
256-
test.Equal(test.chaincodeName, filteredActions[0].CcEvent.ChaincodeId)
250+
tx := block.FilteredTx[0]
251+
test.Equal(test.txID, tx.Txid)
252+
test.Equal(peer.TxValidationCode_VALID, tx.TxValidationCode)
253+
test.Equal(common.HeaderType_ENDORSER_TRANSACTION, tx.Type)
254+
proposalResponse := tx.GetProposalResponse()
255+
test.NotNil(proposalResponse)
256+
chaincodeActions := proposalResponse.ChaincodeActions
257+
test.Equal(1, len(chaincodeActions))
258+
test.Equal(test.eventName, chaincodeActions[0].CcEvent.EventName)
259+
test.Equal(test.txID, chaincodeActions[0].CcEvent.TxId)
260+
test.Equal(test.chaincodeName, chaincodeActions[0].CcEvent.ChaincodeId)
257261
default:
258262
test.FailNow("Unexpected response type")
259263
}

events/producer/eventhelper.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,8 @@ func CreateBlockEvents(block *common.Block) (bevent *pb.Event, fbevent *pb.Event
6868
return nil, nil, "", fmt.Errorf("error unmarshalling transaction payload for block event: %s", err)
6969
}
7070

71-
filteredTx := &pb.FilteredTransaction{Txid: chdr.TxId, TxValidationCode: txsFltr.Flag(txIndex)}
72-
filteredActionArray := []*pb.FilteredAction{}
71+
filteredTx := &pb.FilteredTransaction{Txid: chdr.TxId, TxValidationCode: txsFltr.Flag(txIndex), Type: headerType}
72+
proposalResponse := &pb.FilteredProposalResponse{}
7373
for _, action := range tx.Actions {
7474
chaincodeActionPayload, err := utils.GetChaincodeActionPayload(action.Payload)
7575
if err != nil {
@@ -90,14 +90,14 @@ func CreateBlockEvents(block *common.Block) (bevent *pb.Event, fbevent *pb.Event
9090
return nil, nil, "", fmt.Errorf("error unmarshalling chaincode event for block event: %s", err)
9191
}
9292

93-
filteredAction := &pb.FilteredAction{}
93+
chaincodeAction := &pb.FilteredChaincodeAction{}
9494
if ccEvent.GetChaincodeId() != "" {
9595
filteredCcEvent := ccEvent
9696
// nil out ccevent payload
9797
filteredCcEvent.Payload = nil
98-
filteredAction.CcEvent = filteredCcEvent
98+
chaincodeAction.CcEvent = filteredCcEvent
9999
}
100-
filteredActionArray = append(filteredActionArray, filteredAction)
100+
proposalResponse.ChaincodeActions = append(proposalResponse.ChaincodeActions, chaincodeAction)
101101

102102
// Drop read write set from transaction before sending block event
103103
// Performance issue with chaincode deploy txs and causes nodejs grpc
@@ -114,7 +114,7 @@ func CreateBlockEvents(block *common.Block) (bevent *pb.Event, fbevent *pb.Event
114114
return nil, nil, "", fmt.Errorf("error marshalling tx action payload for block event: %s", err)
115115
}
116116
}
117-
filteredTx.FilteredAction = filteredActionArray
117+
filteredTx.Data = &pb.FilteredTransaction_ProposalResponse{ProposalResponse: proposalResponse}
118118
filteredTxArray = append(filteredTxArray, filteredTx)
119119

120120
payload.Data, err = utils.GetBytesTransaction(tx)
@@ -136,7 +136,6 @@ func CreateBlockEvents(block *common.Block) (bevent *pb.Event, fbevent *pb.Event
136136
}
137137
filteredBlockForEvent.ChannelId = channelID
138138
filteredBlockForEvent.Number = block.Header.Number
139-
filteredBlockForEvent.Type = headerType
140139
filteredBlockForEvent.FilteredTx = filteredTxArray
141140

142141
return CreateBlockEvent(blockForEvent), CreateFilteredBlockEvent(filteredBlockForEvent), channelID, nil

protos/peer/admin.pb.go

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)