Skip to content

Commit e9da546

Browse files
committed
fix discrepancies between options structs
1 parent 6ed2349 commit e9da546

File tree

3 files changed

+223
-112
lines changed

3 files changed

+223
-112
lines changed

osscluster.go

Lines changed: 56 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -85,13 +85,29 @@ type ClusterOptions struct {
8585
MinRetryBackoff time.Duration
8686
MaxRetryBackoff time.Duration
8787

88-
DialTimeout time.Duration
89-
ReadTimeout time.Duration
90-
WriteTimeout time.Duration
88+
DialTimeout time.Duration
89+
ReadTimeout time.Duration
90+
WriteTimeout time.Duration
91+
92+
// DialerRetries is the maximum number of retry attempts when dialing fails.
93+
//
94+
// default: 5
95+
DialerRetries int
96+
97+
// DialerRetryTimeout is the backoff duration between retry attempts.
98+
//
99+
// default: 100 milliseconds
100+
DialerRetryTimeout time.Duration
101+
91102
ContextTimeoutEnabled bool
92103

93-
PoolFIFO bool
94-
PoolSize int // applies per cluster node and not for the whole cluster
104+
PoolFIFO bool
105+
PoolSize int // applies per cluster node and not for the whole cluster
106+
107+
// MaxConcurrentDials is the maximum number of concurrent connection creation goroutines.
108+
// If <= 0, defaults to PoolSize. If > PoolSize, it will be capped at PoolSize.
109+
MaxConcurrentDials int
110+
95111
PoolTimeout time.Duration
96112
MinIdleConns int
97113
MaxIdleConns int
@@ -163,9 +179,24 @@ func (opt *ClusterOptions) init() {
163179
opt.ReadOnly = true
164180
}
165181

182+
if opt.DialTimeout == 0 {
183+
opt.DialTimeout = 5 * time.Second
184+
}
185+
if opt.DialerRetries == 0 {
186+
opt.DialerRetries = 5
187+
}
188+
if opt.DialerRetryTimeout == 0 {
189+
opt.DialerRetryTimeout = 100 * time.Millisecond
190+
}
191+
166192
if opt.PoolSize == 0 {
167193
opt.PoolSize = 5 * runtime.GOMAXPROCS(0)
168194
}
195+
if opt.MaxConcurrentDials <= 0 {
196+
opt.MaxConcurrentDials = opt.PoolSize
197+
} else if opt.MaxConcurrentDials > opt.PoolSize {
198+
opt.MaxConcurrentDials = opt.PoolSize
199+
}
169200
if opt.ReadBufferSize == 0 {
170201
opt.ReadBufferSize = proto.DefaultBufferSize
171202
}
@@ -303,10 +334,13 @@ func setupClusterQueryParams(u *url.URL, o *ClusterOptions) (*ClusterOptions, er
303334
o.MinRetryBackoff = q.duration("min_retry_backoff")
304335
o.MaxRetryBackoff = q.duration("max_retry_backoff")
305336
o.DialTimeout = q.duration("dial_timeout")
337+
o.DialerRetries = q.int("dialer_retries")
338+
o.DialerRetryTimeout = q.duration("dialer_retry_timeout")
306339
o.ReadTimeout = q.duration("read_timeout")
307340
o.WriteTimeout = q.duration("write_timeout")
308341
o.PoolFIFO = q.bool("pool_fifo")
309342
o.PoolSize = q.int("pool_size")
343+
o.MaxConcurrentDials = q.int("max_concurrent_dials")
310344
o.MinIdleConns = q.int("min_idle_conns")
311345
o.MaxIdleConns = q.int("max_idle_conns")
312346
o.MaxActiveConns = q.int("max_active_conns")
@@ -362,21 +396,25 @@ func (opt *ClusterOptions) clientOptions() *Options {
362396
MinRetryBackoff: opt.MinRetryBackoff,
363397
MaxRetryBackoff: opt.MaxRetryBackoff,
364398

365-
DialTimeout: opt.DialTimeout,
366-
ReadTimeout: opt.ReadTimeout,
367-
WriteTimeout: opt.WriteTimeout,
399+
DialTimeout: opt.DialTimeout,
400+
DialerRetries: opt.DialerRetries,
401+
DialerRetryTimeout: opt.DialerRetryTimeout,
402+
ReadTimeout: opt.ReadTimeout,
403+
WriteTimeout: opt.WriteTimeout,
404+
368405
ContextTimeoutEnabled: opt.ContextTimeoutEnabled,
369406

370-
PoolFIFO: opt.PoolFIFO,
371-
PoolSize: opt.PoolSize,
372-
PoolTimeout: opt.PoolTimeout,
373-
MinIdleConns: opt.MinIdleConns,
374-
MaxIdleConns: opt.MaxIdleConns,
375-
MaxActiveConns: opt.MaxActiveConns,
376-
ConnMaxIdleTime: opt.ConnMaxIdleTime,
377-
ConnMaxLifetime: opt.ConnMaxLifetime,
378-
ReadBufferSize: opt.ReadBufferSize,
379-
WriteBufferSize: opt.WriteBufferSize,
407+
PoolFIFO: opt.PoolFIFO,
408+
PoolSize: opt.PoolSize,
409+
MaxConcurrentDials: opt.MaxConcurrentDials,
410+
PoolTimeout: opt.PoolTimeout,
411+
MinIdleConns: opt.MinIdleConns,
412+
MaxIdleConns: opt.MaxIdleConns,
413+
MaxActiveConns: opt.MaxActiveConns,
414+
ConnMaxIdleTime: opt.ConnMaxIdleTime,
415+
ConnMaxLifetime: opt.ConnMaxLifetime,
416+
ReadBufferSize: opt.ReadBufferSize,
417+
WriteBufferSize: opt.WriteBufferSize,
380418
DisableIdentity: opt.DisableIdentity,
381419
DisableIndentity: opt.DisableIdentity,
382420
IdentitySuffix: opt.IdentitySuffix,

sentinel.go

Lines changed: 81 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,18 @@ type FailoverOptions struct {
8989
MinRetryBackoff time.Duration
9090
MaxRetryBackoff time.Duration
9191

92-
DialTimeout time.Duration
92+
DialTimeout time.Duration
93+
94+
// DialerRetries is the maximum number of retry attempts when dialing fails.
95+
//
96+
// default: 5
97+
DialerRetries int
98+
99+
// DialerRetryTimeout is the backoff duration between retry attempts.
100+
//
101+
// default: 100 milliseconds
102+
DialerRetryTimeout time.Duration
103+
93104
ReadTimeout time.Duration
94105
WriteTimeout time.Duration
95106
ContextTimeoutEnabled bool
@@ -110,7 +121,12 @@ type FailoverOptions struct {
110121

111122
PoolFIFO bool
112123

113-
PoolSize int
124+
PoolSize int
125+
126+
// MaxConcurrentDials is the maximum number of concurrent connection creation goroutines.
127+
// If <= 0, defaults to PoolSize. If > PoolSize, it will be capped at PoolSize.
128+
MaxConcurrentDials int
129+
114130
PoolTimeout time.Duration
115131
MinIdleConns int
116132
MaxIdleConns int
@@ -141,6 +157,10 @@ type FailoverOptions struct {
141157

142158
UnstableResp3 bool
143159

160+
// PushNotificationProcessor is the processor for handling push notifications.
161+
// If nil, a default processor will be created for RESP3 connections.
162+
PushNotificationProcessor push.NotificationProcessor
163+
144164
// MaintNotificationsConfig is not supported for FailoverClients at the moment
145165
// MaintNotificationsConfig provides custom configuration for maintnotifications upgrades.
146166
// When MaintNotificationsConfig.Mode is not "disabled", the client will handle
@@ -174,27 +194,32 @@ func (opt *FailoverOptions) clientOptions() *Options {
174194
ReadBufferSize: opt.ReadBufferSize,
175195
WriteBufferSize: opt.WriteBufferSize,
176196

177-
DialTimeout: opt.DialTimeout,
178-
ReadTimeout: opt.ReadTimeout,
179-
WriteTimeout: opt.WriteTimeout,
197+
DialTimeout: opt.DialTimeout,
198+
DialerRetries: opt.DialerRetries,
199+
DialerRetryTimeout: opt.DialerRetryTimeout,
200+
ReadTimeout: opt.ReadTimeout,
201+
WriteTimeout: opt.WriteTimeout,
202+
180203
ContextTimeoutEnabled: opt.ContextTimeoutEnabled,
181204

182-
PoolFIFO: opt.PoolFIFO,
183-
PoolSize: opt.PoolSize,
184-
PoolTimeout: opt.PoolTimeout,
185-
MinIdleConns: opt.MinIdleConns,
186-
MaxIdleConns: opt.MaxIdleConns,
187-
MaxActiveConns: opt.MaxActiveConns,
188-
ConnMaxIdleTime: opt.ConnMaxIdleTime,
189-
ConnMaxLifetime: opt.ConnMaxLifetime,
205+
PoolFIFO: opt.PoolFIFO,
206+
PoolSize: opt.PoolSize,
207+
MaxConcurrentDials: opt.MaxConcurrentDials,
208+
PoolTimeout: opt.PoolTimeout,
209+
MinIdleConns: opt.MinIdleConns,
210+
MaxIdleConns: opt.MaxIdleConns,
211+
MaxActiveConns: opt.MaxActiveConns,
212+
ConnMaxIdleTime: opt.ConnMaxIdleTime,
213+
ConnMaxLifetime: opt.ConnMaxLifetime,
190214

191215
TLSConfig: opt.TLSConfig,
192216

193217
DisableIdentity: opt.DisableIdentity,
194218
DisableIndentity: opt.DisableIndentity,
195219

196-
IdentitySuffix: opt.IdentitySuffix,
197-
UnstableResp3: opt.UnstableResp3,
220+
IdentitySuffix: opt.IdentitySuffix,
221+
UnstableResp3: opt.UnstableResp3,
222+
PushNotificationProcessor: opt.PushNotificationProcessor,
198223

199224
MaintNotificationsConfig: &maintnotifications.Config{
200225
Mode: maintnotifications.ModeDisabled,
@@ -222,27 +247,32 @@ func (opt *FailoverOptions) sentinelOptions(addr string) *Options {
222247
ReadBufferSize: 4096,
223248
WriteBufferSize: 4096,
224249

225-
DialTimeout: opt.DialTimeout,
226-
ReadTimeout: opt.ReadTimeout,
227-
WriteTimeout: opt.WriteTimeout,
250+
DialTimeout: opt.DialTimeout,
251+
DialerRetries: opt.DialerRetries,
252+
DialerRetryTimeout: opt.DialerRetryTimeout,
253+
ReadTimeout: opt.ReadTimeout,
254+
WriteTimeout: opt.WriteTimeout,
255+
228256
ContextTimeoutEnabled: opt.ContextTimeoutEnabled,
229257

230-
PoolFIFO: opt.PoolFIFO,
231-
PoolSize: opt.PoolSize,
232-
PoolTimeout: opt.PoolTimeout,
233-
MinIdleConns: opt.MinIdleConns,
234-
MaxIdleConns: opt.MaxIdleConns,
235-
MaxActiveConns: opt.MaxActiveConns,
236-
ConnMaxIdleTime: opt.ConnMaxIdleTime,
237-
ConnMaxLifetime: opt.ConnMaxLifetime,
258+
PoolFIFO: opt.PoolFIFO,
259+
PoolSize: opt.PoolSize,
260+
MaxConcurrentDials: opt.MaxConcurrentDials,
261+
PoolTimeout: opt.PoolTimeout,
262+
MinIdleConns: opt.MinIdleConns,
263+
MaxIdleConns: opt.MaxIdleConns,
264+
MaxActiveConns: opt.MaxActiveConns,
265+
ConnMaxIdleTime: opt.ConnMaxIdleTime,
266+
ConnMaxLifetime: opt.ConnMaxLifetime,
238267

239268
TLSConfig: opt.TLSConfig,
240269

241270
DisableIdentity: opt.DisableIdentity,
242271
DisableIndentity: opt.DisableIndentity,
243272

244-
IdentitySuffix: opt.IdentitySuffix,
245-
UnstableResp3: opt.UnstableResp3,
273+
IdentitySuffix: opt.IdentitySuffix,
274+
UnstableResp3: opt.UnstableResp3,
275+
PushNotificationProcessor: opt.PushNotificationProcessor,
246276

247277
MaintNotificationsConfig: &maintnotifications.Config{
248278
Mode: maintnotifications.ModeDisabled,
@@ -276,26 +306,31 @@ func (opt *FailoverOptions) clusterOptions() *ClusterOptions {
276306
ReadBufferSize: opt.ReadBufferSize,
277307
WriteBufferSize: opt.WriteBufferSize,
278308

279-
DialTimeout: opt.DialTimeout,
280-
ReadTimeout: opt.ReadTimeout,
281-
WriteTimeout: opt.WriteTimeout,
309+
DialTimeout: opt.DialTimeout,
310+
DialerRetries: opt.DialerRetries,
311+
DialerRetryTimeout: opt.DialerRetryTimeout,
312+
ReadTimeout: opt.ReadTimeout,
313+
WriteTimeout: opt.WriteTimeout,
314+
282315
ContextTimeoutEnabled: opt.ContextTimeoutEnabled,
283316

284-
PoolFIFO: opt.PoolFIFO,
285-
PoolSize: opt.PoolSize,
286-
PoolTimeout: opt.PoolTimeout,
287-
MinIdleConns: opt.MinIdleConns,
288-
MaxIdleConns: opt.MaxIdleConns,
289-
MaxActiveConns: opt.MaxActiveConns,
290-
ConnMaxIdleTime: opt.ConnMaxIdleTime,
291-
ConnMaxLifetime: opt.ConnMaxLifetime,
317+
PoolFIFO: opt.PoolFIFO,
318+
PoolSize: opt.PoolSize,
319+
MaxConcurrentDials: opt.MaxConcurrentDials,
320+
PoolTimeout: opt.PoolTimeout,
321+
MinIdleConns: opt.MinIdleConns,
322+
MaxIdleConns: opt.MaxIdleConns,
323+
MaxActiveConns: opt.MaxActiveConns,
324+
ConnMaxIdleTime: opt.ConnMaxIdleTime,
325+
ConnMaxLifetime: opt.ConnMaxLifetime,
292326

293327
TLSConfig: opt.TLSConfig,
294328

295-
DisableIdentity: opt.DisableIdentity,
296-
DisableIndentity: opt.DisableIndentity,
297-
IdentitySuffix: opt.IdentitySuffix,
298-
FailingTimeoutSeconds: opt.FailingTimeoutSeconds,
329+
DisableIdentity: opt.DisableIdentity,
330+
DisableIndentity: opt.DisableIndentity,
331+
IdentitySuffix: opt.IdentitySuffix,
332+
FailingTimeoutSeconds: opt.FailingTimeoutSeconds,
333+
PushNotificationProcessor: opt.PushNotificationProcessor,
299334

300335
MaintNotificationsConfig: &maintnotifications.Config{
301336
Mode: maintnotifications.ModeDisabled,
@@ -399,11 +434,14 @@ func setupFailoverConnParams(u *url.URL, o *FailoverOptions) (*FailoverOptions,
399434
o.MinRetryBackoff = q.duration("min_retry_backoff")
400435
o.MaxRetryBackoff = q.duration("max_retry_backoff")
401436
o.DialTimeout = q.duration("dial_timeout")
437+
o.DialerRetries = q.int("dialer_retries")
438+
o.DialerRetryTimeout = q.duration("dialer_retry_timeout")
402439
o.ReadTimeout = q.duration("read_timeout")
403440
o.WriteTimeout = q.duration("write_timeout")
404441
o.ContextTimeoutEnabled = q.bool("context_timeout_enabled")
405442
o.PoolFIFO = q.bool("pool_fifo")
406443
o.PoolSize = q.int("pool_size")
444+
o.MaxConcurrentDials = q.int("max_concurrent_dials")
407445
o.MinIdleConns = q.int("min_idle_conns")
408446
o.MaxIdleConns = q.int("max_idle_conns")
409447
o.MaxActiveConns = q.int("max_active_conns")

0 commit comments

Comments
 (0)