#include "raw_client.h" #include #include #include #include #include #include #include namespace NYT { //////////////////////////////////////////////////////////////////////////////// namespace NDetail { //////////////////////////////////////////////////////////////////////////////// NYT::NApi::IClientPtr CreateApiClient(const TClientContext& context) { auto connectionConfig = New(); connectionConfig->SetDefaults(); if (context.JobProxySocketPath) { connectionConfig->ProxyUnixDomainSocket = *context.JobProxySocketPath; } else { connectionConfig->ClusterUrl = context.ServerName; } if (context.RpcProxyRole) { connectionConfig->ProxyRole = *context.RpcProxyRole; } if (context.ProxyAddress) { connectionConfig->ProxyAddresses = {*context.ProxyAddress}; } THashMap proxyUrlAliasingRules; for (const auto& [clusterName, url] : context.Config->ProxyUrlAliasingRules) { proxyUrlAliasingRules.emplace(clusterName, url); } connectionConfig->ProxyUrlAliasingRules = std::move(proxyUrlAliasingRules); NApi::TClientOptions clientOptions; clientOptions.Token = context.Token; if (context.ServiceTicketAuth) { clientOptions.ServiceTicketAuth = context.ServiceTicketAuth->Ptr; } if (context.ImpersonationUser) { clientOptions.User = *context.ImpersonationUser; } if (context.JobProxySocketPath) { clientOptions.MultiproxyTargetCluster = context.MultiproxyTargetCluster; } auto connection = NApi::NRpcProxy::CreateConnection(connectionConfig); return connection->CreateClient(clientOptions); } //////////////////////////////////////////////////////////////////////////////// } // namespace NDetail //////////////////////////////////////////////////////////////////////////////// IClientPtr CreateRpcClient( const TString& serverName, const TCreateClientOptions& options) { auto context = NDetail::CreateClientContext(serverName, options); auto globalTxId = GetGuid(context.Config->GlobalTxId); auto retryConfigProvider = options.RetryConfigProvider_; if (!retryConfigProvider) { retryConfigProvider = CreateDefaultRetryConfigProvider(); } auto rawClient = MakeIntrusive( NDetail::CreateApiClient(context), context.Config); NDetail::EnsureInitialized(); return new NDetail::TClient( std::move(rawClient), context, globalTxId, CreateDefaultClientRetryPolicy(retryConfigProvider, context.Config)); } //////////////////////////////////////////////////////////////////////////////// } // namespace NYT