|
|
@ -150,7 +150,7 @@ func isRetryableGrpcError(err error) bool { |
|
|
st, ok := status.FromError(err) |
|
|
st, ok := status.FromError(err) |
|
|
if ok { |
|
|
if ok { |
|
|
switch st.Code() { |
|
|
switch st.Code() { |
|
|
case codes.Unavailable, // Server unavailable (temporary)
|
|
|
|
|
|
|
|
|
case codes.Unavailable, // Server unavailable (temporary)
|
|
|
codes.DeadlineExceeded, // Request timeout
|
|
|
codes.DeadlineExceeded, // Request timeout
|
|
|
codes.ResourceExhausted, // Rate limited or overloaded
|
|
|
codes.ResourceExhausted, // Rate limited or overloaded
|
|
|
codes.Aborted: // Operation aborted (might succeed on retry)
|
|
|
codes.Aborted: // Operation aborted (might succeed on retry)
|
|
|
@ -266,7 +266,7 @@ func (p *filerVolumeProvider) LookupVolumeIds(ctx context.Context, volumeIds []s |
|
|
glog.V(1).Infof("FilerClient: all %d filer(s) failed with retryable error (attempt %d/%d), retrying in %v: %v", |
|
|
glog.V(1).Infof("FilerClient: all %d filer(s) failed with retryable error (attempt %d/%d), retrying in %v: %v", |
|
|
n, retry+1, maxRetries, waitTime, lastErr) |
|
|
n, retry+1, maxRetries, waitTime, lastErr) |
|
|
time.Sleep(waitTime) |
|
|
time.Sleep(waitTime) |
|
|
waitTime = waitTime * 3 / 2 // Exponential backoff: 1s, 1.5s, 2.25s
|
|
|
|
|
|
|
|
|
waitTime = waitTime * 3 / 2 // Exponential backoff: 1s, 1.5s, 2.25s
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|