aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpechatnov <pechatnov@yandex-team.com>2025-02-05 11:26:52 +0300
committerpechatnov <pechatnov@yandex-team.com>2025-02-05 11:56:52 +0300
commit79b0fcebd37c8cd6e4fee48d56164c30c59c54fc (patch)
treedbd3b7dd0735a027aac5f617d18e5aa493a2d6a0
parent04b7c9f187a8bace6cff58d85cae0b7ca2eb6492 (diff)
downloadydb-79b0fcebd37c8cd6e4fee48d56164c30c59c54fc.tar.gz
YT: Fix race on TAddressResolverConfig
commit_hash:8d5365eafb264f581ae6fa5ad92cd486ba87ca6e
-rw-r--r--yt/yt/core/net/address.cpp28
1 files changed, 15 insertions, 13 deletions
diff --git a/yt/yt/core/net/address.cpp b/yt/yt/core/net/address.cpp
index d09b5f846ce..5325a74c3fa 100644
--- a/yt/yt/core/net/address.cpp
+++ b/yt/yt/core/net/address.cpp
@@ -1016,15 +1016,16 @@ public:
void EnsureLocalHostName()
{
- if (Config_->LocalHostNameOverride) {
+ const auto config = Config_.Acquire();
+ if (config->LocalHostNameOverride) {
return;
}
- UpdateLocalHostName(Config_);
+ UpdateLocalHostName(config);
YT_LOG_INFO("Localhost name determined via system call (LocalHostName: %v, ResolveHostNameIntoFqdn: %v)",
GetLocalHostName(),
- Config_->ResolveHostNameIntoFqdn);
+ config->ResolveHostNameIntoFqdn);
}
bool IsLocalAddress(const TNetworkAddress& address)
@@ -1045,22 +1046,22 @@ public:
void Configure(TAddressResolverConfigPtr config)
{
- Config_ = std::move(config);
+ Config_.Store(config);
- SetDnsResolver(CreateAresDnsResolver(Config_));
- TAsyncExpiringCache::Reconfigure(Config_);
+ SetDnsResolver(CreateAresDnsResolver(config));
+ TAsyncExpiringCache::Reconfigure(config);
- if (Config_->LocalHostNameOverride) {
- SetLocalHostName(*Config_->LocalHostNameOverride);
+ if (config->LocalHostNameOverride) {
+ SetLocalHostName(*config->LocalHostNameOverride);
YT_LOG_INFO("Localhost name configured via config override (LocalHostName: %v)",
- Config_->LocalHostNameOverride);
+ config->LocalHostNameOverride);
}
- UpdateLoopbackAddress(Config_);
+ UpdateLoopbackAddress(config);
}
private:
- TAddressResolverConfigPtr Config_;
+ TAtomicIntrusivePtr<TAddressResolverConfig> Config_;
std::atomic<bool> HasCachedLocalAddresses_ = false;
std::vector<TNetworkAddress> CachedLocalAddresses_;
@@ -1072,9 +1073,10 @@ private:
TFuture<TNetworkAddress> DoGet(const std::string& hostName, bool /*isPeriodicUpdate*/) noexcept override
{
+ const auto config = Config_.Acquire();
TDnsResolveOptions options{
- .EnableIPv4 = Config_->EnableIPv4,
- .EnableIPv6 = Config_->EnableIPv6,
+ .EnableIPv4 = config->EnableIPv4,
+ .EnableIPv6 = config->EnableIPv6,
};
return GetDnsResolver()->Resolve(hostName, options)
.Apply(BIND([=] (const TErrorOr<TNetworkAddress>& result) {