From 6009d089fc69c11156ff76360671c3fc2a43b5ef Mon Sep 17 00:00:00 2001 From: Dmitrii Stepanov Date: Mon, 16 Sep 2024 14:46:07 +0300 Subject: [PATCH] [#270] client: Use RPC call instead of Dial After api-go upgrade created client doesn't establish connection after created, so RPC call is required to establish and check connection. RPC call returns status error, so conversion from status error to context error is required to satisfy Dial contract and unit tests. Signed-off-by: Dmitrii Stepanov --- client/client.go | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) 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