[#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 <a.savchuk@yadro.com>
This commit is contained in:
parent
a8824fed89
commit
e44fe4bde0
1 changed files with 10 additions and 17 deletions
|
@ -106,26 +106,19 @@ func (c *Client) Dial(ctx context.Context, prm PrmDial) error {
|
||||||
_, err := rpc.Balance(&c.c, new(v2accounting.BalanceRequest),
|
_, err := rpc.Balance(&c.c, new(v2accounting.BalanceRequest),
|
||||||
client.WithContext(ctx),
|
client.WithContext(ctx),
|
||||||
)
|
)
|
||||||
if err != nil {
|
|
||||||
var ctxErr error
|
|
||||||
|
|
||||||
// return context errors since they signal about dial problem
|
if err == nil {
|
||||||
if errors.Is(err, context.Canceled) || errors.Is(err, context.DeadlineExceeded) {
|
return nil
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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
|
// sets underlying provider of frostFSAPIServer. The method is used for testing as an approach
|
||||||
|
|
Loading…
Add table
Reference in a new issue