@@ -20,18 +20,45 @@ import (
2020 "github.com/pkg/errors"
2121)
2222
23- //EndorseTxHandler for handling endorse transactions
24- type EndorseTxHandler struct {
23+ //EndorsementHandler for handling endorse transactions
24+ type EndorsementHandler struct {
2525 next chclient.Handler
2626}
2727
2828//Handle for endorsing transactions
29- func (e * EndorseTxHandler ) Handle (requestContext * chclient.RequestContext , clientContext * chclient.ClientContext ) {
29+ func (e * EndorsementHandler ) Handle (requestContext * chclient.RequestContext , clientContext * chclient.ClientContext ) {
30+ // Endorse Tx
31+ transactionProposalResponses , txnID , err := internal .CreateAndSendTransactionProposal (clientContext .Channel ,
32+ requestContext .Request .ChaincodeID , requestContext .Request .Fcn , requestContext .Request .Args , requestContext .Opts .ProposalProcessors , requestContext .Request .TransientMap )
33+
34+ requestContext .Response .TransactionID = txnID
35+
36+ if err != nil {
37+ requestContext .Error = err
38+ return
39+ }
40+
41+ requestContext .Response .Responses = transactionProposalResponses
42+ if len (transactionProposalResponses ) > 0 {
43+ requestContext .Response .Payload = transactionProposalResponses [0 ].ProposalResponse .GetResponse ().Payload
44+ }
45+
46+ //Delegate to next step if any
47+ if e .next != nil {
48+ e .next .Handle (requestContext , clientContext )
49+ }
50+ }
51+
52+ //ProposalProcessorHandler for selecting proposal processors
53+ type ProposalProcessorHandler struct {
54+ next chclient.Handler
55+ }
3056
57+ //Handle selects proposal processors
58+ func (h * ProposalProcessorHandler ) Handle (requestContext * chclient.RequestContext , clientContext * chclient.ClientContext ) {
3159 //Get proposal processor, if not supplied then use discovery service to get available peers as endorser
3260 //If selection service available then get endorser peers for this chaincode
33- txProcessors := requestContext .Opts .ProposalProcessors
34- if len (txProcessors ) == 0 {
61+ if len (requestContext .Opts .ProposalProcessors ) == 0 {
3562 // Use discovery service to figure out proposal processors
3663 peers , err := clientContext .Discovery .GetPeers ()
3764 if err != nil {
@@ -46,28 +73,12 @@ func (e *EndorseTxHandler) Handle(requestContext *chclient.RequestContext, clien
4673 return
4774 }
4875 }
49- txProcessors = peer .PeersToTxnProcessors (endorsers )
50- }
51-
52- // Endorse Tx
53- transactionProposalResponses , txnID , err := internal .CreateAndSendTransactionProposal (clientContext .Channel ,
54- requestContext .Request .ChaincodeID , requestContext .Request .Fcn , requestContext .Request .Args , txProcessors , requestContext .Request .TransientMap )
55-
56- requestContext .Response .TransactionID = txnID
57-
58- if err != nil {
59- requestContext .Error = err
60- return
61- }
62-
63- requestContext .Response .Responses = transactionProposalResponses
64- if len (transactionProposalResponses ) > 0 {
65- requestContext .Response .Payload = transactionProposalResponses [0 ].ProposalResponse .GetResponse ().Payload
76+ requestContext .Opts .ProposalProcessors = peer .PeersToTxnProcessors (endorsers )
6677 }
6778
6879 //Delegate to next step if any
69- if e .next != nil {
70- e .next .Handle (requestContext , clientContext )
80+ if h .next != nil {
81+ h .next .Handle (requestContext , clientContext )
7182 }
7283}
7384
@@ -160,17 +171,30 @@ func (c *CommitTxHandler) Handle(requestContext *chclient.RequestContext, client
160171
161172//NewQueryHandler returns query handler with EndorseTxHandler & EndorsementValidationHandler Chained
162173func NewQueryHandler (next ... chclient.Handler ) chclient.Handler {
163- return NewEndorseHandler (NewEndorsementValidationHandler (next ... ))
174+ return NewProposalProcessorHandler (
175+ NewEndorsementHandler (
176+ NewEndorsementValidationHandler (next ... ),
177+ ),
178+ )
164179}
165180
166181//NewExecuteHandler returns query handler with EndorseTxHandler, EndorsementValidationHandler & CommitTxHandler Chained
167182func NewExecuteHandler (next ... chclient.Handler ) chclient.Handler {
168- return NewEndorseHandler (NewEndorsementValidationHandler (NewCommitHandler (next ... )))
183+ return NewProposalProcessorHandler (
184+ NewEndorsementHandler (
185+ NewEndorsementValidationHandler (NewCommitHandler (next ... )),
186+ ),
187+ )
188+ }
189+
190+ //NewProposalProcessorHandler returns a handler that selects proposal processors
191+ func NewProposalProcessorHandler (next ... chclient.Handler ) * ProposalProcessorHandler {
192+ return & ProposalProcessorHandler {next : getNext (next )}
169193}
170194
171- //NewEndorseHandler returns a handler that endorses a transaction proposal
172- func NewEndorseHandler (next ... chclient.Handler ) * EndorseTxHandler {
173- return & EndorseTxHandler {next : getNext (next )}
195+ //NewEndorsementHandler returns a handler that endorses a transaction proposal
196+ func NewEndorsementHandler (next ... chclient.Handler ) * EndorsementHandler {
197+ return & EndorsementHandler {next : getNext (next )}
174198}
175199
176200//NewEndorsementValidationHandler returns a handler that validates an endorsement
0 commit comments