diff options
| author | robot-piglet <[email protected]> | 2023-12-04 15:32:14 +0300 |
|---|---|---|
| committer | robot-piglet <[email protected]> | 2023-12-05 01:22:50 +0300 |
| commit | c21ed9eedf73010bc81342518177dfdfb0d56bd7 (patch) | |
| tree | 72f8fde4463080cfe5a38eb0babc051cfe32c51e /library/cpp/actors/interconnect/interconnect_resolve.cpp | |
| parent | ec1311bf2e8cc231723b8b5e484ca576663a1309 (diff) | |
Intermediate changes
Diffstat (limited to 'library/cpp/actors/interconnect/interconnect_resolve.cpp')
| -rw-r--r-- | library/cpp/actors/interconnect/interconnect_resolve.cpp | 208 |
1 files changed, 0 insertions, 208 deletions
diff --git a/library/cpp/actors/interconnect/interconnect_resolve.cpp b/library/cpp/actors/interconnect/interconnect_resolve.cpp deleted file mode 100644 index 071af2f7c4b..00000000000 --- a/library/cpp/actors/interconnect/interconnect_resolve.cpp +++ /dev/null @@ -1,208 +0,0 @@ -#include "interconnect.h" -#include "interconnect_address.h" -#include "events_local.h" -#include "logging.h" - -#include <library/cpp/actors/core/actor_bootstrapped.h> -#include <library/cpp/actors/core/hfunc.h> -#include <library/cpp/actors/dnsresolver/dnsresolver.h> - -namespace NActors { - - using namespace NActors::NDnsResolver; - - class TInterconnectResolveActor - : public TActorBootstrapped<TInterconnectResolveActor> - , public TInterconnectLoggingBase - { - public: - TInterconnectResolveActor( - const TString& host, ui16 port, ui32 nodeId, const TString& defaultAddress, - const TActorId& replyTo, const TActorId& replyFrom, TInstant deadline) - : Host(host) - , NodeId(nodeId) - , Port(port) - , DefaultAddress(defaultAddress) - , ReplyTo(replyTo) - , ReplyFrom(replyFrom) - , Deadline(deadline) - { } - - TInterconnectResolveActor( - const TString& host, ui16 port, - const TActorId& replyTo, const TActorId& replyFrom, TInstant deadline) - : Host(host) - , Port(port) - , ReplyTo(replyTo) - , ReplyFrom(replyFrom) - , Deadline(deadline) - { } - - static constexpr EActivityType ActorActivityType() { - return EActivityType::NAMESERVICE; - } - - void Bootstrap() { - TMaybe<TString> errorText; - if (auto addr = ExtractDefaultAddr(errorText)) { - LOG_TRACE_IC("ICR01", "Host: %s, CACHED address: %s", Host.c_str(), DefaultAddress.c_str()); - if (NodeId) { - return SendLocalNodeInfoAndDie({{*addr}}); - } else { - return SendAddressInfoAndDie(std::move(addr)); - } - } - - if (errorText) { - SendErrorAndDie(*errorText); - } - - auto now = TActivationContext::Now(); - if (Deadline < now) { - SendErrorAndDie("Deadline"); - return; - } - - LOG_DEBUG_IC("ICR02", "Host: %s, RESOLVING address ...", Host.c_str()); - Send(MakeDnsResolverActorId(), - NodeId - ? static_cast<IEventBase*>(new TEvDns::TEvGetHostByName(Host, AF_UNSPEC)) - : static_cast<IEventBase*>(new TEvDns::TEvGetAddr(Host, AF_UNSPEC)), - IEventHandle::FlagTrackDelivery); - - if (Deadline != TInstant::Max()) { - Schedule(Deadline, new TEvents::TEvWakeup); - } - - Become(&TThis::StateWork); - } - - STRICT_STFUNC(StateWork, { - sFunc(TEvents::TEvWakeup, HandleTimeout); - sFunc(TEvents::TEvUndelivered, HandleUndelivered); - hFunc(TEvDns::TEvGetAddrResult, Handle); - hFunc(TEvDns::TEvGetHostByNameResult, Handle); - }); - - void HandleTimeout() { - SendErrorAndDie("Deadline"); - } - - void HandleUndelivered() { - SendErrorAndDie("Dns resolver is unavailable"); - } - - void Handle(TEvDns::TEvGetAddrResult::TPtr& ev) { - if (auto addr = ExtractAddr(ev->Get())) { - SendAddressInfoAndDie(std::move(addr)); - } else { - SendErrorAndDie(ev->Get()->ErrorText); - } - } - - void Handle(TEvDns::TEvGetHostByNameResult::TPtr& ev) { - auto& msg = *ev->Get(); - if (msg.Status) { - SendErrorAndDie(msg.ErrorText); - } else { - std::vector<NInterconnect::TAddress> addresses; - for (const auto& ipv6 : msg.AddrsV6) { - addresses.emplace_back(ipv6, Port); - } - for (const auto& ipv4 : msg.AddrsV4) { - addresses.emplace_back(ipv4, Port); - } - SendLocalNodeInfoAndDie(std::move(addresses)); - } - } - - void SendAddressInfoAndDie(NAddr::IRemoteAddrPtr addr) { - LOG_DEBUG_IC("ICR03", "Host: %s, RESOLVED address", Host.c_str()); - auto reply = new TEvAddressInfo; - reply->Address = std::move(addr); - TActivationContext::Send(new IEventHandle(ReplyTo, ReplyFrom, reply)); - PassAway(); - } - - void SendLocalNodeInfoAndDie(std::vector<NInterconnect::TAddress> addresses) { - LOG_DEBUG_IC("ICR04", "Host: %s, RESOLVED address", Host.c_str()); - auto reply = std::make_unique<TEvLocalNodeInfo>(); - reply->NodeId = *NodeId; - reply->Addresses = std::move(addresses); - TActivationContext::Send(new IEventHandle(ReplyTo, ReplyFrom, reply.release())); - PassAway(); - } - - void SendErrorAndDie(const TString& errorText) { - LOG_DEBUG_IC("ICR05", "Host: %s, ERROR resolving: %s", Host.c_str(), errorText.c_str()); - auto *event = new TEvResolveError; - event->Explain = errorText; - event->Host = Host; - TActivationContext::Send(new IEventHandle(ReplyTo, ReplyFrom, event)); - PassAway(); - } - - NAddr::IRemoteAddrPtr ExtractAddr(TEvDns::TEvGetAddrResult* msg) { - if (msg->Status == 0) { - if (msg->IsV6()) { - struct sockaddr_in6 sin6; - Zero(sin6); - sin6.sin6_family = AF_INET6; - sin6.sin6_addr = msg->GetAddrV6(); - sin6.sin6_port = HostToInet(Port); - return MakeHolder<NAddr::TIPv6Addr>(sin6); - } - - if (msg->IsV4()) { - return MakeHolder<NAddr::TIPv4Addr>(TIpAddress(msg->GetAddrV4().s_addr, Port)); - } - - Y_ABORT("Unexpected result address family"); - } - - return nullptr; - } - - NAddr::IRemoteAddrPtr ExtractDefaultAddr(TMaybe<TString>& errorText) { - if (DefaultAddress) { - NInterconnect::TAddress address(DefaultAddress.data(), Port); - - switch (address.GetFamily()) { - case AF_INET: - return MakeHolder<NAddr::TIPv4Addr>(*(sockaddr_in*)address.SockAddr()); - case AF_INET6: - return MakeHolder<NAddr::TIPv6Addr>(*(sockaddr_in6*)address.SockAddr()); - default: - errorText = "Unsupported default address: " + DefaultAddress; - break; - } - } - - return nullptr; - } - - private: - const TString Host; - const std::optional<ui32> NodeId; - const ui16 Port; - const TString DefaultAddress; - const TActorId ReplyTo; - const TActorId ReplyFrom; - const TInstant Deadline; - }; - - IActor* CreateResolveActor( - const TString& host, ui16 port, ui32 nodeId, const TString& defaultAddress, - const TActorId& replyTo, const TActorId& replyFrom, TInstant deadline) - { - return new TInterconnectResolveActor(host, port, nodeId, defaultAddress, replyTo, replyFrom, deadline); - } - - IActor* CreateResolveActor( - const TString& host, ui16 port, - const TActorId& replyTo, const TActorId& replyFrom, TInstant deadline) - { - return new TInterconnectResolveActor(host, port, replyTo, replyFrom, deadline); - } - -} // namespace NActors |
