@@ -308,8 +308,8 @@ func (r *retrier) dialLocked() (c protect.Conn, err error) {
308
308
r .conn = c // c may be nil
309
309
r .timeout = calcTimeout (rtt )
310
310
311
- logeif (err )("retrier: dial(%s) %s=>%s; strat: %d (mult? %t ), rtt: %dms; err? %v" ,
312
- r .dialerOpts , laddr (c ), r .raddr , strat , r . multidial , rtt .Milliseconds (), err )
311
+ logeif (err )("retrier: dial(%s) %s=>%s; strat: %d (mult? %d ), rtt: %dms; err? %v" ,
312
+ r .dialerOpts , laddr (c ), r .raddr , strat , len ( r . dialers ) , rtt .Milliseconds (), err )
313
313
314
314
return
315
315
}
@@ -321,13 +321,15 @@ func (r *retrier) doDialLocked(dialStrat int32) (protect.Conn, error) {
321
321
var errs error
322
322
for ; r .nextDialerIdx < len (r .dialers ); r .nextDialerIdx ++ {
323
323
c , err := protect .Dial (r .dialers [r .nextDialerIdx ], r .laddr , r .raddr )
324
+
325
+ logeif (err )("retrier: mult: #%d/%d dial(%s) %s=>%s; strat: %d, err? %v" ,
326
+ r .nextDialerIdx , len (r .dialers ), r .dialerOpts , laddr (c ), r .raddr , dialStrat , err )
327
+
324
328
if err == nil {
325
329
return c , nil
326
330
} else {
327
331
clos (c )
328
332
errs = core .JoinErr (errs , err )
329
- logeif (err )("retrier: mult: #%d dial(%s) %s=>%s; strat: %d, err? %v" ,
330
- r .nextDialerIdx , r .dialerOpts , laddr (c ), r .raddr , dialStrat , err )
331
333
}
332
334
}
333
335
return nil , core .OneErr (errs , errNoDialer )
@@ -438,26 +440,28 @@ func (r *retrier) Read(buf []byte) (n int, err error) {
438
440
if ! r .retryCompleted () {
439
441
note = log .I
440
442
defer close (r .retryDoneCh ) // signal that retry is complete or unnecessary
441
- var retryReadErr error
443
+
444
+ retryReadErr := err
442
445
// retry on errs like timeouts or connection resets
443
- for (c == nil || core .IsNil (c ) || err != nil ) && r .canRetryLocked () {
446
+ for (c == nil || core .IsNil (c ) || retryReadErr != nil ) && r .canRetryLocked () {
444
447
r .retryCount ++
445
448
n , retryReadErr = r .retryWriteReadLocked (buf )
446
449
c = r .conn // re-assign c to newConn, if any; may be nil
447
- if c == nil || core .IsNil (c ) {
450
+ if c == nil || core .IsNil (c ) || retryReadErr != nil {
448
451
retryReadErr = core .OneErr (retryReadErr , errNoConn )
449
452
err = core .JoinErr (err , retryReadErr )
450
453
} else {
451
- err = nil // break
454
+ retryReadErr = nil // break
455
+ err = nil // return no error
452
456
}
453
- logeor (retryReadErr , note )("retrier: read#%d + (mult? %t / c: %d): [%s<=%s] %d; err? %v" ,
457
+ logeor (retryReadErr , note )("retrier: read: #%d + (mult? %t / c: %d): [%s<=%s] %d; err? %v" ,
454
458
r .retryCount , r .multidial , r .nextDialerIdx , laddr (c ), r .raddr , n , retryReadErr )
455
459
}
456
460
if c != nil && core .IsNotNil (c ) {
457
461
_ = c .SetReadDeadline (r .readDeadline )
458
462
_ = c .SetWriteDeadline (r .writeDeadline )
459
463
}
460
- logeor (err , note )("retrier: read#%d + (mult? %d / %d) [%s<=%s] %d; err? %v" ,
464
+ logeor (err , note )("retrier: read: #%d + (mult? %d / %d) [%s<=%s] %d; err? %v" ,
461
465
r .retryCount , len (r .dialers ), r .nextDialerIdx , laddr (c ), r .raddr , n , err )
462
466
r .tee = nil // discard teed data
463
467
return
0 commit comments