@@ -48,7 +48,28 @@ func newGrpcClient(ctx context.Context, settings backend.DataSourceInstanceSetti
48
48
if err != nil {
49
49
return nil , fmt .Errorf ("error getting dial options: %w" , err )
50
50
}
51
- clientConn , err := grpc .NewClient (onlyHost , dialOpts ... )
51
+
52
+ // grpc.Dial() is deprecated in favor of grpc.NewClient(), but grpc.NewClient() changed the default resolver to dns from passthrough.
53
+ // This is a problem because the getDialOpts() function appends a custom dialer to the dial options to support Grafana Cloud PDC.
54
+ //
55
+ // See the following quote from the grpc package documentation:
56
+ // One subtle difference between NewClient and Dial and DialContext is that the
57
+ // former uses "dns" as the default name resolver, while the latter use
58
+ // "passthrough" for backward compatibility. This distinction should not matter
59
+ // to most users, but could matter to legacy users that specify a custom dialer
60
+ // and expect it to receive the target string directly.
61
+ // https://github.com/grpc/grpc-go/blob/fa274d77904729c2893111ac292048d56dcf0bb1/clientconn.go#L209
62
+ //
63
+ // Unfortunately, the passthrough resolver isn't exported by the grpc package, so we can't use it.
64
+ // The options are to continue using grpc.Dial() or implement a custom resolver.
65
+ // Since the go-grpc package maintainers intend to continue supporting grpc.Dial() through the 1.x series,
66
+ // we'll continue using grpc.Dial() until we have a compelling reason or bandwidth to implement the custom resolver.
67
+ // Reference: https://github.com/grpc/grpc-go/blob/f199062ef31ddda54152e1ca5e3d15fb63903dc3/clientconn.go#L204
68
+ //
69
+ // See this issue for more information: https://github.com/grpc/grpc-go/issues/7091
70
+ // Ignore the lint check as this fails the build and for the reasons above.
71
+ // nolint:staticcheck
72
+ clientConn , err := grpc .Dial (onlyHost , dialOpts ... )
52
73
if err != nil {
53
74
logger .Error ("Error dialing gRPC client" , "error" , err , "URL" , settings .URL , "function" , logEntrypoint ())
54
75
return nil , err
0 commit comments