in spark/client/channel/channel.go [113:144]
func (cb *BaseBuilder) Build(ctx context.Context) (*grpc.ClientConn, error) {
var opts []grpc.DialOption
opts = append(opts, grpc.WithAuthority(cb.host))
if cb.token == "" {
opts = append(opts, grpc.WithTransportCredentials(insecure.NewCredentials()))
} else {
// Note: On the Windows platform, use of x509.SystemCertPool() requires
// go version 1.18 or higher.
systemRoots, err := x509.SystemCertPool()
if err != nil {
return nil, err
}
cred := credentials.NewTLS(&tls.Config{
RootCAs: systemRoots,
})
opts = append(opts, grpc.WithTransportCredentials(cred))
ts := oauth2.StaticTokenSource(&oauth2.Token{
AccessToken: cb.token,
TokenType: "bearer",
})
opts = append(opts, grpc.WithPerRPCCredentials(oauth.TokenSource{TokenSource: ts}))
}
remote := fmt.Sprintf("%v:%v", cb.host, cb.port)
conn, err := grpc.NewClient(remote, opts...)
if err != nil {
return nil, sparkerrors.WithType(fmt.Errorf("failed to connect to remote %s: %w",
remote, err), sparkerrors.ConnectionError)
}
return conn, nil
}