|
|
@@ -295,7 +295,14 @@ func isHaltErr(ctx context.Context, err error) bool {
|
|
|
if err == nil {
|
|
|
return false
|
|
|
}
|
|
|
- return grpc.Code(err) != codes.Unavailable
|
|
|
+ code := grpc.Code(err)
|
|
|
+ // Unavailable codes mean the system will be right back.
|
|
|
+ // (e.g., can't connect, lost leader)
|
|
|
+ // Treat Internal codes as if something failed, leaving the
|
|
|
+ // system in an inconsistent state, but retrying could make progress.
|
|
|
+ // (e.g., failed in middle of send, corrupted frame)
|
|
|
+ // TODO: are permanent Internal errors possible from grpc?
|
|
|
+ return code != codes.Unavailable && code != codes.Internal
|
|
|
}
|
|
|
|
|
|
func toErr(ctx context.Context, err error) error {
|