diff options
author | pechatnov <pechatnov@yandex-team.com> | 2025-02-05 11:26:52 +0300 |
---|---|---|
committer | pechatnov <pechatnov@yandex-team.com> | 2025-02-05 11:56:52 +0300 |
commit | 79b0fcebd37c8cd6e4fee48d56164c30c59c54fc (patch) | |
tree | dbd3b7dd0735a027aac5f617d18e5aa493a2d6a0 | |
parent | 04b7c9f187a8bace6cff58d85cae0b7ca2eb6492 (diff) | |
download | ydb-79b0fcebd37c8cd6e4fee48d56164c30c59c54fc.tar.gz |
YT: Fix race on TAddressResolverConfig
commit_hash:8d5365eafb264f581ae6fa5ad92cd486ba87ca6e
-rw-r--r-- | yt/yt/core/net/address.cpp | 28 |
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) { |