timeout unanswered requests quickly (#76)

This commit is contained in:
Paul Wells
2023-11-18 06:27:18 -08:00
committed by GitHub
parent 897561cda5
commit 5f0110939b
2 changed files with 12 additions and 3 deletions
+7
View File
@@ -32,6 +32,7 @@ type ClientOption func(*ClientOpts)
type ClientOpts struct { type ClientOpts struct {
ClientID string ClientID string
Timeout time.Duration Timeout time.Duration
SelectionTimeout time.Duration
ChannelSize int ChannelSize int
EnableStreams bool EnableStreams bool
RequestHooks []ClientRequestHook RequestHooks []ClientRequestHook
@@ -53,6 +54,12 @@ func WithClientTimeout(timeout time.Duration) ClientOption {
} }
} }
func WithClientSelectTimeout(timeout time.Duration) ClientOption {
return func(o *ClientOpts) {
o.SelectionTimeout = timeout
}
}
func WithClientChannelSize(size int) ClientOption { func WithClientChannelSize(size int) ClientOption {
return func(o *ClientOpts) { return func(o *ClientOpts) {
o.ChannelSize = size o.ChannelSize = size
+5 -3
View File
@@ -30,8 +30,9 @@ func withStreams() psrpc.ClientOption {
func getClientOpts(opts ...psrpc.ClientOption) psrpc.ClientOpts { func getClientOpts(opts ...psrpc.ClientOption) psrpc.ClientOpts {
o := &psrpc.ClientOpts{ o := &psrpc.ClientOpts{
Timeout: psrpc.DefaultClientTimeout, Timeout: psrpc.DefaultClientTimeout,
ChannelSize: bus.DefaultChannelSize, SelectionTimeout: psrpc.DefaultAffinityTimeout,
ChannelSize: bus.DefaultChannelSize,
} }
for _, opt := range opts { for _, opt := range opts {
opt(o) opt(o)
@@ -45,11 +46,12 @@ func getRequestOpts(i *info.RequestInfo, options psrpc.ClientOpts, opts ...psrpc
} }
if i.AffinityEnabled { if i.AffinityEnabled {
o.SelectionOpts = psrpc.SelectionOpts{ o.SelectionOpts = psrpc.SelectionOpts{
AffinityTimeout: psrpc.DefaultAffinityTimeout, AffinityTimeout: options.SelectionTimeout,
ShortCircuitTimeout: psrpc.DefaultAffinityShortCircuit, ShortCircuitTimeout: psrpc.DefaultAffinityShortCircuit,
} }
} else { } else {
o.SelectionOpts = psrpc.SelectionOpts{ o.SelectionOpts = psrpc.SelectionOpts{
AffinityTimeout: options.SelectionTimeout,
AcceptFirstAvailable: true, AcceptFirstAvailable: true,
} }
} }