@@ -13,6 +13,7 @@ import (
1313
1414 "github.com/hyperledger/fabric-sdk-go/pkg/client/channel/invoke"
1515 "github.com/hyperledger/fabric-sdk-go/pkg/client/common/discovery/greylist"
16+ "github.com/hyperledger/fabric-sdk-go/pkg/client/common/filter"
1617 "github.com/hyperledger/fabric-sdk-go/pkg/common/errors/retry"
1718 "github.com/hyperledger/fabric-sdk-go/pkg/common/errors/status"
1819 "github.com/hyperledger/fabric-sdk-go/pkg/common/providers/context"
@@ -79,22 +80,39 @@ func New(channelProvider context.ChannelProvider, opts ...ClientOption) (*Client
7980
8081// Query chaincode using request and optional options provided
8182func (cc * Client ) Query (request Request , options ... RequestOption ) (Response , error ) {
82- optsWithTimeout , err := cc .addDefaultTimeout (cc .context , fab .Query , options ... )
83- if err != nil {
84- return Response {}, errors .WithMessage (err , "option failed" )
85- }
8683
87- return cc .InvokeHandler (invoke .NewQueryHandler (), request , optsWithTimeout ... )
84+ options = append (options , addDefaultTimeout (fab .Query ))
85+ options = append (options , addDefaultTargetFilter (cc .context , filter .ChaincodeQuery ))
86+
87+ return cc .InvokeHandler (invoke .NewQueryHandler (), request , options ... )
8888}
8989
9090// Execute prepares and executes transaction using request and optional options provided
9191func (cc * Client ) Execute (request Request , options ... RequestOption ) (Response , error ) {
92- optsWithTimeout , err := cc .addDefaultTimeout (cc .context , fab .Execute , options ... )
93- if err != nil {
94- return Response {}, errors .WithMessage (err , "option failed" )
92+ options = append (options , addDefaultTimeout (fab .Execute ))
93+ options = append (options , addDefaultTargetFilter (cc .context , filter .EndorsingPeer ))
94+
95+ return cc .InvokeHandler (invoke .NewExecuteHandler (), request , options ... )
96+ }
97+
98+ // addDefaultTargetFilter adds default target filter if target filter is not specified
99+ func addDefaultTargetFilter (chCtx context.Channel , ft filter.EndpointType ) RequestOption {
100+ return func (ctx context.Client , o * requestOptions ) error {
101+ if len (o .Targets ) == 0 && o .TargetFilter == nil {
102+ return WithTargetFilter (filter .NewEndpointFilter (chCtx , ft ))(ctx , o )
103+ }
104+ return nil
95105 }
106+ }
96107
97- return cc .InvokeHandler (invoke .NewExecuteHandler (), request , optsWithTimeout ... )
108+ // addDefaultTimeout adds default timeout if timeout is not specified
109+ func addDefaultTimeout (tt fab.TimeoutType ) RequestOption {
110+ return func (ctx context.Client , o * requestOptions ) error {
111+ if o .Timeouts [tt ] == 0 {
112+ return WithTimeout (tt , ctx .EndpointConfig ().Timeout (tt ))(ctx , o )
113+ }
114+ return nil
115+ }
98116}
99117
100118//InvokeHandler invokes handler using request and options provided
@@ -224,23 +242,6 @@ func (cc *Client) prepareOptsFromOptions(ctx context.Client, options ...RequestO
224242 return txnOpts , nil
225243}
226244
227- //addDefaultTimeout adds given default timeout if it is missing in options
228- func (cc * Client ) addDefaultTimeout (ctx context.Client , timeOutType fab.TimeoutType , options ... RequestOption ) ([]RequestOption , error ) {
229- txnOpts := requestOptions {}
230- for _ , option := range options {
231- err := option (ctx , & txnOpts )
232- if err != nil {
233- return nil , errors .WithMessage (err , "option failed" )
234- }
235- }
236-
237- if txnOpts .Timeouts [timeOutType ] == 0 {
238- //InvokeHandler relies on Execute timeout
239- return append (options , WithTimeout (fab .Execute , cc .context .EndpointConfig ().Timeout (timeOutType ))), nil
240- }
241- return options , nil
242- }
243-
244245// RegisterChaincodeEvent registers chain code event
245246// @param {chan bool} channel which receives event details when the event is complete
246247// @returns {object} object handle that should be used to unregister
0 commit comments