From a611c052aceed7602a3593ebf76fbb59320b32b7 Mon Sep 17 00:00:00 2001 From: Aleksey Savchuk Date: Wed, 16 Oct 2024 18:17:02 +0300 Subject: [PATCH] [#287] client: Fix error handling after dialing Before, when error was presented and neither `Canceled` nor `DeadlineExceeded`, that method returned no error on failed dial. Signed-off-by: Aleksey Savchuk --- client/client.go | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/client/client.go b/client/client.go index 10eb018..817f048 100644 --- a/client/client.go +++ b/client/client.go @@ -106,26 +106,19 @@ func (c *Client) Dial(ctx context.Context, prm PrmDial) error { _, err := rpc.Balance(&c.c, new(v2accounting.BalanceRequest), client.WithContext(ctx), ) - if err != nil { - var ctxErr error - // return context errors since they signal about dial problem - if errors.Is(err, context.Canceled) || errors.Is(err, context.DeadlineExceeded) { - ctxErr = err - } else if st, ok := status.FromError(err); ok && st.Code() == codes.Canceled { - ctxErr = context.Canceled - } else if ok && st.Code() == codes.DeadlineExceeded { - ctxErr = context.DeadlineExceeded - } - if ctxErr != nil { - if conn := c.c.Conn(); conn != nil { - _ = conn.Close() - } - return ctxErr - } + if err == nil { + return nil } - return nil + switch st, ok := status.FromError(err); { + case errors.Is(err, context.Canceled) || (ok && st.Code() == codes.Canceled): + return context.Canceled + case errors.Is(err, context.DeadlineExceeded) || (ok && st.Code() == codes.DeadlineExceeded): + return context.DeadlineExceeded + default: + return err + } } // sets underlying provider of frostFSAPIServer. The method is used for testing as an approach