diff --git a/ydb/library/actors/interconnect/interconnect_tcp_session.cpp b/ydb/library/actors/interconnect/interconnect_tcp_session.cpp index 780d91d8f985..f0397b5cee6c 100644 --- a/ydb/library/actors/interconnect/interconnect_tcp_session.cpp +++ b/ydb/library/actors/interconnect/interconnect_tcp_session.cpp @@ -767,9 +767,10 @@ namespace NActors { #endif } - // Zero copy socket write has noticiable overhead for memory managment inside kernel. + // Note1: Zero copy socket write has noticiable overhead for memory managment inside kernel. // So now we try to use ZC only for XDC - const bool tryZc = XdcSocket ? (int)socket == (int)*XdcSocket : false; + // Note2: Current socket encryption implementation does not allow to pass flags + const bool tryZc = (XdcSocket && !Params.Encryption) ? (int)socket == (int)*XdcSocket : false; TStackVec wbuffers; TStackVec zeroCtrl; diff --git a/ydb/library/actors/interconnect/ut/lib/ic_test_cluster.h b/ydb/library/actors/interconnect/ut/lib/ic_test_cluster.h index a597bdd009e4..2afea5c8a847 100644 --- a/ydb/library/actors/interconnect/ut/lib/ic_test_cluster.h +++ b/ydb/library/actors/interconnect/ut/lib/ic_test_cluster.h @@ -18,6 +18,12 @@ class TTestICCluster: public TNonCopyable { bool Disconnect; }; + enum Flags : ui64 { + EMPTY = 0, + USE_ZC = 1, + USE_TLS = 1 << 1 + }; + private: const ui32 NumNodes; const TString Address = "::1"; @@ -31,7 +37,7 @@ class TTestICCluster: public TNonCopyable { public: TTestICCluster(ui32 numNodes = 1, NActors::TChannelsConfig channelsConfig = NActors::TChannelsConfig(), - TTrafficInterrupterSettings* tiSettings = nullptr, TIntrusivePtr loggerSettings = nullptr, bool useZc = false) + TTrafficInterrupterSettings* tiSettings = nullptr, TIntrusivePtr loggerSettings = nullptr, Flags flags = EMPTY) : NumNodes(numNodes) , Counters(new NMonitoring::TDynamicCounters) , ChannelsConfig(channelsConfig) @@ -64,7 +70,8 @@ class TTestICCluster: public TNonCopyable { auto& portMap = tiSettings ? specificNodePortMap[i] : nodeToPortMap; Nodes.emplace(i, MakeHolder(i, NumNodes, portMap, Address, Counters, DeadPeerTimeout, ChannelsConfig, /*numDynamicNodes=*/0, /*numThreads=*/1, LoggerSettings, TNode::DefaultInflight(), - useZc ? ESocketSendOptimization::IC_MSG_ZEROCOPY : ESocketSendOptimization::DISABLED)); + flags & USE_ZC ? ESocketSendOptimization::IC_MSG_ZEROCOPY : ESocketSendOptimization::DISABLED, + flags & USE_TLS)); } } diff --git a/ydb/library/actors/interconnect/ut/lib/node.h b/ydb/library/actors/interconnect/ut/lib/node.h index d00daf4ca482..ab13b21add6d 100644 --- a/ydb/library/actors/interconnect/ut/lib/node.h +++ b/ydb/library/actors/interconnect/ut/lib/node.h @@ -12,10 +12,13 @@ #include #include +#include "tls/tls.h" + using namespace NActors; class TNode { THolder ActorSystem; + TString CaPath; public: static constexpr ui32 DefaultInflight() { return 512 * 1024; } @@ -24,7 +27,8 @@ class TNode { TChannelsConfig channelsSettings = TChannelsConfig(), ui32 numDynamicNodes = 0, ui32 numThreads = 1, TIntrusivePtr loggerSettings = nullptr, ui32 inflight = DefaultInflight(), - ESocketSendOptimization sendOpt = ESocketSendOptimization::DISABLED) { + ESocketSendOptimization sendOpt = ESocketSendOptimization::DISABLED, + bool withTls = false) { TActorSystemSetup setup; setup.NodeId = nodeId; setup.ExecutorsCount = 2; @@ -50,6 +54,14 @@ class TNode { common->Settings.SocketSendOptimization = sendOpt; common->OutgoingHandshakeInflightLimit = 3; + if (withTls) { + common->Settings.Certificate = NInterconnect::GetCertificateForTest(); + common->Settings.PrivateKey = NInterconnect::GetPrivateKeyForTest(); + CaPath = NInterconnect::GetTempCaPathForTest(); + common->Settings.CaFilePath = CaPath; + common->Settings.EncryptionMode = EEncryptionMode::REQUIRED; + } + setup.Interconnect.ProxyActors.resize(numNodes + 1 - numDynamicNodes); setup.Interconnect.ProxyWrapperFactory = CreateProxyWrapperFactory(common, interconnectPoolId); @@ -127,6 +139,7 @@ class TNode { ~TNode() { ActorSystem->Stop(); + unlink(CaPath.c_str()); } bool Send(const TActorId& recipient, IEventBase* ev) { diff --git a/ydb/library/actors/interconnect/ut/lib/tls/tls.cpp b/ydb/library/actors/interconnect/ut/lib/tls/tls.cpp new file mode 100644 index 000000000000..dfccca53acc1 --- /dev/null +++ b/ydb/library/actors/interconnect/ut/lib/tls/tls.cpp @@ -0,0 +1,148 @@ +#include "tls.h" +#include + +#include +#include + +namespace NInterconnect { + +// Fake CA and cert for IC tests + +TString GetPrivateKeyForTest() +{ + return TString(R"(-----BEGIN PRIVATE KEY----- +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 +rJ98v+ZO1xZec9kMwz0v9iUBkSYBXkg= +-----END PRIVATE KEY-----)"); + +} + +TString GetCertificateForTest() +{ + return TString(R"(-----BEGIN CERTIFICATE----- +MIIFPzCCAycCFF/7eZiR10RwN8JRGcAAyZC8Xu39MA0GCSqGSIb3DQEBCwUAMHIx +CzAJBgNVBAYTAlVWMREwDwYDVQQIDAhNaWxreVdheTERMA8GA1UEBwwIT3Jpb25B +cm0xDjAMBgNVBAoMBUVhcnRoMRkwFwYDVQQLDBBFYXJ0aERldmVsb3BtZW50MRIw +EAYDVQQDDAlsb2NhbGhvc3QwIBcNMjUwNTIyMTE0NjMzWhgPMjA1MjEwMDcxMTQ2 +MzNaMEQxCzAJBgNVBAYTAlVWMREwDwYDVQQIDAhNaWxreVdheTEOMAwGA1UECgwF +RWFydGgxEjAQBgNVBAMMCWxvY2FsaG9zdDCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBAOSAEAz3u3Sr90OWuCc7oABTbAQxr0UcfGlnTEqNszjjjpfZkux4 +Av51qG9q9HKS2gt+zT7VNTP4VOf0N736uCDxjkeQfE6C3s1Cx5iE464UOV9Htzt9 +WRirFwFyZcNa57Kf5Cq9ztZwwXkcxN66s2viRVP3NDhhcD5V0rNmAR/cG7XCea+0 +PiGznUrUJUmKvvPIdA8Gb3aZ+9mlTUaQMm2GoQsuOEuuIgOGP52EAb8hhJnGGdbI +/uBYwSzh/A93gtKcsSwGvE7jPrNYG/kQg5dGZ6ogWUnkZO3roUljeA+MqgZyTHhQ +oTP9VOgSmP4QXJXxknV9RkOXPbKC364b6hcI4bAb/OJ/lZdapbzczaSdWcujSu+K +cMaTC/aE0GVRjxZaD1WdlvwY2+VUWjbBZybwp0b+W4CS2qXyHQ0EYbJFV1jGjm5V +twx4B/mvcVHxv7MGuEYIq+NXAzQ9wqwg2XHMOMaa0RFzv+HcEEQBD/OyPRm+JClS +as5bb6poKWjPoCRUSr3vLs+Euh+DX0y6IUHg/ICEd/BvD1HX34ppmlM8l6yXzQp7 +ws7xuoWXb7r5yLqZyQ7XeTn0XYUp3gNr2gATqSTie3GrT+nEeDdA+qYFuHUeNZ2+ +Tbo4vwNANRZgSJbjtQPUGhG6ZbpwiA497738QLki96QQrF2WsYQAYp8rAgMBAAEw +DQYJKoZIhvcNAQELBQADggIBAGkxQD3jWmdkmiefblrPtslDKdGpo3Mu18QiUrDk +vf7BrTwPbPCm4/zTYPKkxfWKbSZRJr6Fg0Glc0d5HczjDisqh519rqDif3NTGQGK +/eaVi7JQkKClIM7DUNb3nNmWwpoloDsgVbIQ9eJed1vTctcVMa0OowpL5JD6fhE+ +oRHSBo8f5VZkViSA7TRoFsqLfgmZZDHp+Hvv8Z47la0AGRynnwFybea7DIRoE+6J +lNA7LPYkwKUkfz88ayGapbqldmyj0rlX74DqyS3G5pS7JYqGPC8MWtpmaklJnP+Y +J8XnEtjIZFx1j6E4ocI/pfSFCXQU2v6ICNpEOLo3IPAtpgjpCGOPXX/ppSo9/N8+ +JOpT+3OlYPXKuXftCu57WD1f62nsTp/2jySN3I2Ej6xyzGSHh4Dejzvh0bNEOFMy +9Z2YFY90jgM6qLfNhrfbb/nENADusMsyjdIKX9sq/aCaAy8FKasGgukuAHFdlg2N +4fovR1GiOK7ALaUiDarytEutINLx/g9FK1S9AXL8Rs1ho3ARsvtuoiU8WILAhWcr +wCvCu8XZcCG7ZaOvTdsbxuqqBOf0+oT4g9kJmFjq4f5ogcZ41hyjvMjejmlAxJ7M +un1GLHp0TMSAhnTeWN1ImAJZDh81b0q1TbRArP9KU/DTaKTdeWwWbSiNw0zMoEN8 +kUJ9 +-----END CERTIFICATE-----)"); +} + +TString GetTempCaPathForTest() +{ + TString ca = R"(-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + )"; + char name[32] = {0}; + const char* namemask = "ydb-temp-ca-XXXXXX"; + strncpy(name, namemask, sizeof(name)); + int fd = mkstemp(name); + Y_ABORT_UNLESS(fd > 0); + Y_ABORT_UNLESS(write(fd, ca.data(), ca.size()) == (ssize_t)ca.size()); + return TString(name); +} + +} diff --git a/ydb/library/actors/interconnect/ut/lib/tls/tls.h b/ydb/library/actors/interconnect/ut/lib/tls/tls.h new file mode 100644 index 000000000000..3c762c6b0584 --- /dev/null +++ b/ydb/library/actors/interconnect/ut/lib/tls/tls.h @@ -0,0 +1,11 @@ +#pragma once + +#include + +namespace NInterconnect { + +TString GetPrivateKeyForTest(); +TString GetCertificateForTest(); +TString GetTempCaPathForTest(); + +} diff --git a/ydb/library/actors/interconnect/ut/lib/tls/ya.make b/ydb/library/actors/interconnect/ut/lib/tls/ya.make new file mode 100644 index 000000000000..f150054fac8d --- /dev/null +++ b/ydb/library/actors/interconnect/ut/lib/tls/ya.make @@ -0,0 +1,7 @@ +LIBRARY() + +SRCS( + tls.cpp +) + +END() diff --git a/ydb/library/actors/interconnect/ut/lib/ya.make b/ydb/library/actors/interconnect/ut/lib/ya.make index 615c6a0e5449..24530f778abe 100644 --- a/ydb/library/actors/interconnect/ut/lib/ya.make +++ b/ydb/library/actors/interconnect/ut/lib/ya.make @@ -7,4 +7,8 @@ SRCS( ic_test_cluster.h ) +PEERDIR( + ydb/library/actors/interconnect/ut/lib/tls +) + END() diff --git a/ydb/library/actors/interconnect/ut_fat/main.cpp b/ydb/library/actors/interconnect/ut_fat/main.cpp index a765a8724e20..504a8aee6f83 100644 --- a/ydb/library/actors/interconnect/ut_fat/main.cpp +++ b/ydb/library/actors/interconnect/ut_fat/main.cpp @@ -88,7 +88,7 @@ namespace { }; class TReceiverActor: public TReceiverBaseActor { - ui64 ReceivedCount = 0; + std::atomic ReceivedCount = 0; TNode* SenderNode = nullptr; public: @@ -98,11 +98,16 @@ namespace { { } + ui64 GetReceivedCount() const { + return ReceivedCount.load(std::memory_order_relaxed); + } + void Handle(TEvTest::TPtr& ev, const TActorContext& /*ctx*/) override { const NInterconnectTest::TEvTest& m = ev->Get()->Record; Y_ABORT_UNLESS(m.HasSequenceNumber()); - Y_ABORT_UNLESS(m.GetSequenceNumber() >= ReceivedCount, "got #%" PRIu64 " expected at least #%" PRIu64, - m.GetSequenceNumber(), ReceivedCount); + ui64 cur = GetReceivedCount(); + Y_ABORT_UNLESS(m.GetSequenceNumber() >= cur, "got #%" PRIu64 " expected at least #%" PRIu64, + m.GetSequenceNumber(), cur); if (m.HasPayloadId()) { auto rope = ev->Get()->GetPayload(m.GetPayloadId()); auto data = rope.GetContiguousSpan(); @@ -111,12 +116,12 @@ namespace { } else { Y_ABORT_UNLESS(m.HasPayload()); } - ++ReceivedCount; + ReceivedCount.fetch_add(1); SenderNode->Send(ev->Sender, new TEvTestResponse(m.GetSequenceNumber())); } ~TReceiverActor() override { - Cerr << "Received " << ReceivedCount << " messages\n"; + Cerr << "Received " << GetReceivedCount() << " messages\n"; } }; @@ -166,6 +171,24 @@ Y_UNIT_TEST_SUITE(InterconnectUnstableConnection) { NanoSleep(30ULL * 1000 * 1000 * 1000); } + Y_UNIT_TEST(InterconnectTestWithProxyTlsReestablishWithXdc) { + ui32 numNodes = 2; + double bandWidth = 1000000; + ui16 flags = IEventHandle::FlagTrackDelivery | IEventHandle::FlagGenerateUnsureUndelivered; + TTestICCluster::TTrafficInterrupterSettings interrupterSettings{TDuration::Seconds(2), bandWidth, true}; + + TTestICCluster testCluster(numNodes, TChannelsConfig(), &interrupterSettings, nullptr, TTestICCluster::USE_TLS); + + TReceiverActor* receiverActor = new TReceiverActor(testCluster.GetNode(1)); + const TActorId recipient = testCluster.RegisterActor(receiverActor, 2); + TSenderActor* senderActor = new TSenderActor(recipient, flags, true); + testCluster.RegisterActor(senderActor, 1); + + NanoSleep(30ULL * 1000 * 1000 * 1000); + + UNIT_ASSERT_C(receiverActor->GetReceivedCount() > 0, "no traffic detected!"); + } + Y_UNIT_TEST(InterconnectTestWithProxy) { ui32 numNodes = 2; double bandWidth = 1000000; @@ -203,7 +226,7 @@ Y_UNIT_TEST_SUITE(InterconnectZcLocalOp) { ui32 numNodes = 2; ui16 flags = IEventHandle::FlagTrackDelivery | IEventHandle::FlagGenerateUnsureUndelivered; - TTestICCluster testCluster(numNodes, TChannelsConfig(), nullptr, nullptr, true); + TTestICCluster testCluster(numNodes, TChannelsConfig(), nullptr, nullptr, TTestICCluster::USE_ZC); TReceiverActor* receiverActor = new TReceiverActor(testCluster.GetNode(1)); const TActorId recipient = testCluster.RegisterActor(receiverActor, 2);