clientv3: do not treat Internal codes as halting

Fixes #6277
release-3.1
Anthony Romano 2016-08-28 19:41:27 -07:00
parent 3552420dfd
commit 5e963608b7
1 changed files with 8 additions and 1 deletions

View File

@ -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 {