Skip to content

Commit

Permalink
rpc/client: Fail fast on any non-temporary dial error
Browse files Browse the repository at this point in the history
Previously, RPC client unconditionally blocked by context passed into
`WithContext` (e.g. for 15s). In particular, it definitely stuck on
non-temporary error encounter. An example of such errors could be an
incorrect network address or connection refusal.

Now client instantly fails with any irreparable error in which it is
pointless to wait for a change in the connection state. This is achieved
with `grpcstd.FailOnNonTempDialError(true)` option.

Signed-off-by: Leonard Lyubich <[email protected]>
  • Loading branch information
cthulhu-rider committed Feb 28, 2024
1 parent 1d860f2 commit 9392e16
Showing 1 changed file with 11 additions and 6 deletions.
17 changes: 11 additions & 6 deletions rpc/client/connect.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,15 +51,20 @@ func (c *Client) openGRPCConn(ctx context.Context, extraDialOpts ...grpcstd.Dial
dialCtx, cancel := context.WithTimeout(ctx, c.dialTimeout)
var err error

dialOpts := []grpcstd.DialOption{
grpcstd.WithTransportCredentials(creds),
grpcstd.WithReturnConnectionError(),
}
if extraDialOpts != nil {
dialOpts = append(dialOpts, extraDialOpts...)
extraDialOpts = append([]grpcstd.DialOption{
grpcstd.WithTransportCredentials(creds),
grpcstd.WithReturnConnectionError(),
grpcstd.FailOnNonTempDialError(true),
}, extraDialOpts...)
} else {
extraDialOpts = []grpcstd.DialOption{
grpcstd.WithTransportCredentials(creds),
grpcstd.WithReturnConnectionError(),

Check warning on line 63 in rpc/client/connect.go

View check run for this annotation

Codecov / codecov/patch

rpc/client/connect.go#L61-L63

Added lines #L61 - L63 were not covered by tests
}
}

c.conn, err = grpcstd.DialContext(dialCtx, c.addr, dialOpts...)
c.conn, err = grpcstd.DialContext(dialCtx, c.addr, extraDialOpts...)

cancel()

Expand Down

0 comments on commit 9392e16

Please sign in to comment.