@@ -40,14 +40,16 @@ func UnaryClientInterceptor(optFuncs ...CallOption) grpc.UnaryClientInterceptor
40
40
if err := waitRetryBackoff (attempt , parentCtx , callOpts ); err != nil {
41
41
return err
42
42
}
43
+ if attempt > 0 {
44
+ callOpts .onRetryCallback (parentCtx , attempt , lastErr )
45
+ }
43
46
callCtx , cancel := perCallContext (parentCtx , callOpts , attempt )
44
47
defer cancel () // Clean up potential resources.
45
48
lastErr = invoker (callCtx , method , req , reply , cc , grpcOpts ... )
46
49
// TODO(mwitkow): Maybe dial and transport errors should be retriable?
47
50
if lastErr == nil {
48
51
return nil
49
52
}
50
- callOpts .onRetryCallback (parentCtx , attempt , lastErr )
51
53
if isContextError (lastErr ) {
52
54
if parentCtx .Err () != nil {
53
55
logTrace (parentCtx , "grpc_retry attempt: %d, parent context error: %v" , attempt , parentCtx .Err ())
@@ -94,6 +96,9 @@ func StreamClientInterceptor(optFuncs ...CallOption) grpc.StreamClientIntercepto
94
96
if err := waitRetryBackoff (attempt , parentCtx , callOpts ); err != nil {
95
97
return nil , err
96
98
}
99
+ if attempt > 0 {
100
+ callOpts .onRetryCallback (parentCtx , attempt , lastErr )
101
+ }
97
102
var newStreamer grpc.ClientStream
98
103
newStreamer , lastErr = streamer (parentCtx , desc , cc , method , grpcOpts ... )
99
104
if lastErr == nil {
@@ -107,7 +112,6 @@ func StreamClientInterceptor(optFuncs ...CallOption) grpc.StreamClientIntercepto
107
112
}
108
113
return retryingStreamer , nil
109
114
}
110
- callOpts .onRetryCallback (parentCtx , attempt , lastErr )
111
115
if isContextError (lastErr ) {
112
116
if parentCtx .Err () != nil {
113
117
logTrace (parentCtx , "grpc_retry attempt: %d, parent context error: %v" , attempt , parentCtx .Err ())
0 commit comments