diff --git a/client/client.go b/client/client.go index 014b3d7..f6530de 100644 --- a/client/client.go +++ b/client/client.go @@ -11,6 +11,8 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc" "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client" "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" ) // Client represents virtual connection to the FrostFS network to communicate @@ -98,13 +100,21 @@ func (c *Client) Dial(ctx context.Context, prm PrmDial) error { c.setFrostFSAPIServer((*coreServer)(&c.c)) - // TODO: (neofs-api-go#382) perform generic dial stage of the client.Client _, err := rpc.Balance(&c.c, new(v2accounting.BalanceRequest), client.WithContext(ctx), ) - // return context errors since they signal about dial problem - if errors.Is(err, context.Canceled) || errors.Is(err, context.DeadlineExceeded) { - return err + if err != nil { + // return context errors since they signal about dial problem + if errors.Is(err, context.Canceled) || errors.Is(err, context.DeadlineExceeded) { + return err + } + st, ok := status.FromError(err) + if ok && st.Code() == codes.Canceled { + return context.Canceled + } + if ok && st.Code() == codes.DeadlineExceeded { + return context.DeadlineExceeded + } } return nil