summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrobot-piglet <[email protected]>2025-02-08 15:41:30 +0300
committerrobot-piglet <[email protected]>2025-02-08 15:53:29 +0300
commitf432cacb199120d2ca3b2c6c4224362cef823a44 (patch)
treeb5be2f477862081b604b43fc0864718feb466e03
parent952ceef6ef6b4dd693bba71ea513f91725bc2440 (diff)
Intermediate changes
commit_hash:49d3672ff34befbb1a1622d593ba1ee835660898
-rw-r--r--yt/yt/client/cache/cache.cpp73
-rw-r--r--yt/yt/client/cache/cache.h4
-rw-r--r--yt/yt/client/cache/config.cpp6
-rw-r--r--yt/yt/client/cache/config.h4
-rw-r--r--yt/yt/client/cache/unittests/cache_ut.cpp22
-rw-r--r--yt/yt/client/federated/cache.cpp9
6 files changed, 60 insertions, 58 deletions
diff --git a/yt/yt/client/cache/cache.cpp b/yt/yt/client/cache/cache.cpp
index a866a16baa2..c466dacd9ef 100644
--- a/yt/yt/client/cache/cache.cpp
+++ b/yt/yt/client/cache/cache.cpp
@@ -29,52 +29,25 @@ TClientsCacheConfigPtr GetClustersConfigWithNormalClusterName(const TClientsCach
YT_VERIFY(config);
auto newConfig = New<TClientsCacheConfig>();
- newConfig->DefaultConfig = CloneYsonStruct(config->DefaultConfig, /*postprocess*/ false, /*setDefaults*/ false);
- for (const auto& [clusterName, clusterConfig] : config->ClusterConfigs) {
- newConfig->ClusterConfigs[ToString(GetNormalClusterName(clusterName))] =
- CloneYsonStruct(clusterConfig, /*postprocess*/ false, /*setDefaults*/ false);
+ newConfig->DefaultConnection = CloneYsonStruct(
+ config->DefaultConnection,
+ /*postprocess*/ false,
+ /*setDefaults*/ false);
+ for (const auto& [cluster, connection] : config->PerClusterConnection) {
+ newConfig->PerClusterConnection[ToString(GetNormalClusterName(cluster))] =
+ CloneYsonStruct(connection, /*postprocess*/ false, /*setDefaults*/ false);
}
return newConfig;
}
////////////////////////////////////////////////////////////////////////////////
-} // namespace
-
-TConnectionConfigPtr MakeClusterConfig(
- const TClientsCacheConfigPtr& clustersConfig,
- TStringBuf clusterUrl)
-{
- auto [cluster, proxyRole] = ExtractClusterAndProxyRole(clusterUrl);
- auto it = clustersConfig->ClusterConfigs.find(GetNormalClusterName(cluster));
- const bool useDefaultConfig = (it == clustersConfig->ClusterConfigs.end());
- const auto& config = useDefaultConfig ? clustersConfig->DefaultConfig : it->second;
-
- auto newConfig = config ? CloneYsonStruct(config, /*postprocess*/ false, /*setDefaults*/ false) : New<NApi::NRpcProxy::TConnectionConfig>();
- // Ignore cluster url from DefaultConfig, but use it from ClusterConfigs[_] if it is set.
- if (useDefaultConfig || !newConfig->ClusterUrl.has_value() || newConfig->ClusterUrl->empty()) {
- newConfig->ClusterUrl = ToString(cluster);
- }
- newConfig->ClusterName = InferYTClusterFromClusterUrl(*newConfig->ClusterUrl);
- if (!proxyRole.empty()) {
- newConfig->ProxyRole = ToString(proxyRole);
- }
- newConfig->Postprocess();
- return newConfig;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-namespace {
-
-////////////////////////////////////////////////////////////////////////////////
-
class TClientsCache
: public TClientsCacheBase
{
public:
TClientsCache(const TClientsCacheConfigPtr& config, const TClientsCacheAuthentificationOptionsPtr& clientsOptions)
- : ClustersConfig_(GetClustersConfigWithNormalClusterName(config))
+ : Config_(GetClustersConfigWithNormalClusterName(config))
, ClientsOptions_(clientsOptions)
{ }
@@ -82,11 +55,11 @@ protected:
NApi::IClientPtr CreateClient(TStringBuf clusterUrl) override
{
auto& options = ClientsOptions_->ClusterOptions.ValueRef(clusterUrl, ClientsOptions_->DefaultOptions);
- return NCache::CreateClient(MakeClusterConfig(ClustersConfig_, clusterUrl), options);
+ return NCache::CreateClient(GetConnectionConfig(Config_, clusterUrl), options);
}
private:
- const TClientsCacheConfigPtr ClustersConfig_;
+ const TClientsCacheConfigPtr Config_;
const TClientsCacheAuthentificationOptionsPtr ClientsOptions_;
};
@@ -113,7 +86,7 @@ IClientsCachePtr CreateClientsCache(
const NApi::TClientOptions& options)
{
auto clustersConfig = New<TClientsCacheConfig>();
- clustersConfig->DefaultConfig = CloneYsonStruct(config, /*postprocess*/ false, /*setDefaults*/ false);
+ clustersConfig->DefaultConnection = CloneYsonStruct(config, /*postprocess*/ false, /*setDefaults*/ false);
return CreateClientsCache(clustersConfig, options);
}
@@ -134,6 +107,30 @@ IClientsCachePtr CreateClientsCache()
return CreateClientsCache(NApi::GetClientOptionsFromEnvStatic());
}
+NApi::NRpcProxy::TConnectionConfigPtr GetConnectionConfig(const TClientsCacheConfigPtr& config, TStringBuf clusterUrl)
+{
+ auto [cluster, proxyRole] = ExtractClusterAndProxyRole(clusterUrl);
+
+ const auto& connectionConfig = config->PerClusterConnection.ValueRef(
+ GetNormalClusterName(cluster),
+ config->DefaultConnection);
+ YT_VERIFY(connectionConfig);
+ auto connectionConfigCopy = CloneYsonStruct(connectionConfig, /*postprocess*/ false, /*setDefaults*/ false);
+
+ // Ignore cluster url from DefaultConfig, but use it from ClusterConfigs[_] if it is set.
+ if (connectionConfig == config->DefaultConnection ||
+ !connectionConfigCopy->ClusterUrl || connectionConfigCopy->ClusterUrl->empty())
+ {
+ connectionConfigCopy->ClusterUrl = ToString(cluster);
+ connectionConfigCopy->ClusterName = InferYTClusterFromClusterUrl(*connectionConfigCopy->ClusterUrl);
+ }
+ if (!proxyRole.empty()) {
+ connectionConfigCopy->ProxyRole = ToString(proxyRole);
+ }
+ connectionConfigCopy->Postprocess();
+ return connectionConfigCopy;
+}
+
////////////////////////////////////////////////////////////////////////////////
} // namespace NYT::NClient::NCache
diff --git a/yt/yt/client/cache/cache.h b/yt/yt/client/cache/cache.h
index 4cc842d753c..b7209d71fa1 100644
--- a/yt/yt/client/cache/cache.h
+++ b/yt/yt/client/cache/cache.h
@@ -43,8 +43,8 @@ IClientsCachePtr CreateClientsCache(const NApi::TClientOptions& options);
//! Shortcut to create cache with default config.
IClientsCachePtr CreateClientsCache();
-//! Helper function to create one cluster config from cluster URL and clusters config.
-NApi::NRpcProxy::TConnectionConfigPtr MakeClusterConfig(const TClientsCacheConfigPtr& config, TStringBuf clusterUrl);
+//! Helper function to get a cluster config by |clusterUrl|.
+NApi::NRpcProxy::TConnectionConfigPtr GetConnectionConfig(const TClientsCacheConfigPtr& config, TStringBuf clusterUrl);
////////////////////////////////////////////////////////////////////////////////
diff --git a/yt/yt/client/cache/config.cpp b/yt/yt/client/cache/config.cpp
index 51549f7de76..f0cd2caca5a 100644
--- a/yt/yt/client/cache/config.cpp
+++ b/yt/yt/client/cache/config.cpp
@@ -10,9 +10,11 @@ using namespace NApi;
void TClientsCacheConfig::Register(TRegistrar registrar)
{
- registrar.Parameter("default_config", &TThis::DefaultConfig)
+ registrar.Parameter("default_connection", &TThis::DefaultConnection)
+ .Alias("defailt_config")
.DefaultNew();
- registrar.Parameter("cluster_configs", &TThis::ClusterConfigs)
+ registrar.Parameter("per_cluster_connection", &TThis::PerClusterConnection)
+ .Alias("cluster_configs")
.Default();
}
diff --git a/yt/yt/client/cache/config.h b/yt/yt/client/cache/config.h
index 516a2e537fe..0ed8c0ab659 100644
--- a/yt/yt/client/cache/config.h
+++ b/yt/yt/client/cache/config.h
@@ -18,9 +18,9 @@ namespace NYT::NClient::NCache {
struct TClientsCacheConfig
: public virtual NYTree::TYsonStruct
{
- NApi::NRpcProxy::TConnectionConfigPtr DefaultConfig;
+ NApi::NRpcProxy::TConnectionConfigPtr DefaultConnection;
- THashMap<TString, NApi::NRpcProxy::TConnectionConfigPtr> ClusterConfigs;
+ THashMap<TString, NApi::NRpcProxy::TConnectionConfigPtr> PerClusterConnection;
REGISTER_YSON_STRUCT(TClientsCacheConfig);
diff --git a/yt/yt/client/cache/unittests/cache_ut.cpp b/yt/yt/client/cache/unittests/cache_ut.cpp
index 34f200befe3..e7e72d42916 100644
--- a/yt/yt/client/cache/unittests/cache_ut.cpp
+++ b/yt/yt/client/cache/unittests/cache_ut.cpp
@@ -90,46 +90,46 @@ TEST(TClientsCacheTest, MultiThreads)
////////////////////////////////////////////////////////////////////////////////
-TEST(TClientsCacheTest, MakeClusterConfig)
+TEST(TClientsCacheTest, GetConnectionConfig)
{
auto clientsCacheConfig = New<TClientsCacheConfig>();
- clientsCacheConfig->DefaultConfig = New<NApi::NRpcProxy::TConnectionConfig>();
- clientsCacheConfig->DefaultConfig->ClusterUrl = "seneca-nan"; // will be ignored
- clientsCacheConfig->DefaultConfig->ProxyRole = "default_role"; // can be overwritten
- clientsCacheConfig->DefaultConfig->DynamicChannelPool->MaxPeerCount = 42;
+ clientsCacheConfig->DefaultConnection = New<NApi::NRpcProxy::TConnectionConfig>();
+ clientsCacheConfig->DefaultConnection->ClusterUrl = "seneca-nan"; // will be ignored
+ clientsCacheConfig->DefaultConnection->ProxyRole = "default_role"; // can be overwritten
+ clientsCacheConfig->DefaultConnection->DynamicChannelPool->MaxPeerCount = 42;
auto senecaVlaConfig = New<NApi::NRpcProxy::TConnectionConfig>();
senecaVlaConfig->ClusterUrl = ""; // will be ignored
senecaVlaConfig->ProxyRole = "seneca_vla_role"; // can be overwritten
senecaVlaConfig->DynamicChannelPool->MaxPeerCount = 43;
- clientsCacheConfig->ClusterConfigs["seneca-vla"] = senecaVlaConfig;
+ clientsCacheConfig->PerClusterConnection["seneca-vla"] = senecaVlaConfig;
{
- auto config = MakeClusterConfig(clientsCacheConfig, "seneca-man");
+ auto config = GetConnectionConfig(clientsCacheConfig, "seneca-man");
EXPECT_EQ(config->ClusterUrl, "seneca-man");
EXPECT_EQ(config->ProxyRole, "default_role");
EXPECT_EQ(config->DynamicChannelPool->MaxPeerCount, 42);
}
{
- auto config = MakeClusterConfig(clientsCacheConfig, "seneca-man/overwriting_role");
+ auto config = GetConnectionConfig(clientsCacheConfig, "seneca-man/overwriting_role");
EXPECT_EQ(config->ClusterUrl, "seneca-man");
EXPECT_EQ(config->ProxyRole, "overwriting_role");
EXPECT_EQ(config->DynamicChannelPool->MaxPeerCount, 42);
}
{
- auto config = MakeClusterConfig(clientsCacheConfig, "seneca-vla");
+ auto config = GetConnectionConfig(clientsCacheConfig, "seneca-vla");
EXPECT_EQ(config->ClusterUrl, "seneca-vla");
EXPECT_EQ(config->ProxyRole, "seneca_vla_role");
EXPECT_EQ(config->DynamicChannelPool->MaxPeerCount, 43);
}
{
- auto config = MakeClusterConfig(clientsCacheConfig, "seneca-vla/overwriting_role");
+ auto config = GetConnectionConfig(clientsCacheConfig, "seneca-vla/overwriting_role");
EXPECT_EQ(config->ClusterUrl, "seneca-vla");
EXPECT_EQ(config->ProxyRole, "overwriting_role");
EXPECT_EQ(config->DynamicChannelPool->MaxPeerCount, 43);
}
{
- auto config = MakeClusterConfig(clientsCacheConfig, "seneca-vla.yt.yandex.net");
+ auto config = GetConnectionConfig(clientsCacheConfig, "seneca-vla.yt.yandex.net");
EXPECT_EQ(config->ClusterUrl, "seneca-vla.yt.yandex.net");
EXPECT_EQ(config->ProxyRole, "seneca_vla_role");
EXPECT_EQ(config->DynamicChannelPool->MaxPeerCount, 43);
diff --git a/yt/yt/client/federated/cache.cpp b/yt/yt/client/federated/cache.cpp
index f04e99a2ad0..3d86366b335 100644
--- a/yt/yt/client/federated/cache.cpp
+++ b/yt/yt/client/federated/cache.cpp
@@ -40,7 +40,7 @@ protected:
case 0:
THROW_ERROR_EXCEPTION("Cannot create client without cluster");
case 1:
- return NCache::CreateClient(NCache::MakeClusterConfig(ClientsCacheConfig_, clusterUrl), Options_);
+ return NCache::CreateClient(NCache::GetConnectionConfig(ClientsCacheConfig_, clusterUrl), Options_);
default:
return CreateFederatedClient(clusters);
}
@@ -104,12 +104,15 @@ IClientsCachePtr CreateFederatedClientsCache(
IClientsCachePtr CreateFederatedClientsCache(
TConnectionConfigPtr federatedConfig,
- const NApi::NRpcProxy::TConnectionConfigPtr& cacheConfig,
+ const NApi::NRpcProxy::TConnectionConfigPtr& connectionConfig,
const NApi::TClientOptions& options,
TString clusterSeparator)
{
auto clientsCacheConfig = New<TClientsCacheConfig>();
- clientsCacheConfig->DefaultConfig = CloneYsonStruct(cacheConfig, /*postprocess*/ false, /*setDefaults*/ false);
+ clientsCacheConfig->DefaultConnection = CloneYsonStruct(
+ connectionConfig,
+ /*postprocess*/ false,
+ /*setDefaults*/ false);
return NYT::New<TClientsCache>(
std::move(clientsCacheConfig),