@@ -308,8 +308,8 @@ func (r *retrier) dialLocked() (c protect.Conn, err error) {
308308 r .conn = c // c may be nil
309309 r .timeout = calcTimeout (rtt )
310310
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 )
313313
314314 return
315315}
@@ -321,13 +321,15 @@ func (r *retrier) doDialLocked(dialStrat int32) (protect.Conn, error) {
321321 var errs error
322322 for ; r .nextDialerIdx < len (r .dialers ); r .nextDialerIdx ++ {
323323 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+
324328 if err == nil {
325329 return c , nil
326330 } else {
327331 clos (c )
328332 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 )
331333 }
332334 }
333335 return nil , core .OneErr (errs , errNoDialer )
@@ -438,26 +440,28 @@ func (r *retrier) Read(buf []byte) (n int, err error) {
438440 if ! r .retryCompleted () {
439441 note = log .I
440442 defer close (r .retryDoneCh ) // signal that retry is complete or unnecessary
441- var retryReadErr error
443+
444+ retryReadErr := err
442445 // 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 () {
444447 r .retryCount ++
445448 n , retryReadErr = r .retryWriteReadLocked (buf )
446449 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 {
448451 retryReadErr = core .OneErr (retryReadErr , errNoConn )
449452 err = core .JoinErr (err , retryReadErr )
450453 } else {
451- err = nil // break
454+ retryReadErr = nil // break
455+ err = nil // return no error
452456 }
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" ,
454458 r .retryCount , r .multidial , r .nextDialerIdx , laddr (c ), r .raddr , n , retryReadErr )
455459 }
456460 if c != nil && core .IsNotNil (c ) {
457461 _ = c .SetReadDeadline (r .readDeadline )
458462 _ = c .SetWriteDeadline (r .writeDeadline )
459463 }
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" ,
461465 r .retryCount , len (r .dialers ), r .nextDialerIdx , laddr (c ), r .raddr , n , err )
462466 r .tee = nil // discard teed data
463467 return
0 commit comments