aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoruzhas <uzhas@yandex-team.ru>2022-02-28 13:05:09 +0300
committeruzhas <uzhas@yandex-team.ru>2022-02-28 13:05:09 +0300
commit400b07abc9772c95bdae8e426b80dda93c9eabb4 (patch)
treeca3d97a6f489aabebd87785d565a90d3e35327c5
parentf23d808d6c8b0f50c51b44baad1f919cab389cde (diff)
downloadydb-400b07abc9772c95bdae8e426b80dda93c9eabb4.tar.gz
YQ-884: support ssl in simple YQ discovery
ref:6937cdd7fa1c69c2dc96cf7c18071b50b3cffd1a
-rw-r--r--ydb/core/grpc_services/grpc_request_proxy_simple.cpp47
1 files changed, 39 insertions, 8 deletions
diff --git a/ydb/core/grpc_services/grpc_request_proxy_simple.cpp b/ydb/core/grpc_services/grpc_request_proxy_simple.cpp
index 1feb754a3e1..ec6893b7442 100644
--- a/ydb/core/grpc_services/grpc_request_proxy_simple.cpp
+++ b/ydb/core/grpc_services/grpc_request_proxy_simple.cpp
@@ -5,11 +5,40 @@
#include <ydb/core/base/appdata.h>
+#include <util/system/hostname.h>
+
namespace NKikimr {
namespace NGRpcService {
using namespace NActors;
+namespace {
+
+void FillEnpointInfo(const TString& host, ui32 port, const TString& publicHost, ui32 publicPort, bool ssl, Ydb::Discovery::EndpointInfo& info) {
+ auto effectivePublicHost = publicHost ? publicHost : host;
+ auto effectivePublicPort = publicPort ? publicPort : port;
+ info.set_address(effectivePublicHost);
+ info.set_port(effectivePublicPort);
+ info.set_ssl(ssl);
+}
+
+TString InferPublicHostFromServerHost(const TString& serverHost) {
+ return serverHost && serverHost != "[::]" ? serverHost : FQDNHostName();
+}
+
+template <typename T>
+void AddEndpointsForGrpcConfig(const T& grpcConfig, Ydb::Discovery::ListEndpointsResult& result) {
+ const TString& address = InferPublicHostFromServerHost(grpcConfig.GetHost());
+ if (const ui32 port = grpcConfig.GetPort()) {
+ FillEnpointInfo(address, port, grpcConfig.GetPublicHost(), grpcConfig.GetPublicPort(), false, *result.add_endpoints());
+ }
+
+ if (const ui32 sslPort = grpcConfig.GetSslPort()) {
+ FillEnpointInfo(address, sslPort, grpcConfig.GetPublicHost(), grpcConfig.GetPublicSslPort(), true, *result.add_endpoints());
+ }
+}
+
+}
class TGRpcRequestProxySimple
: public TActorBootstrapped<TGRpcRequestProxySimple>
@@ -42,14 +71,16 @@ private:
requestBaseCtx->RaiseIssue(issue);
requestBaseCtx->ReplyWithYdbStatus(Ydb::StatusIds::BAD_REQUEST);
} else {
- THolder<TEvListEndpointsRequest> Request(event->Release().Release());
- auto *result = TEvListEndpointsRequest::AllocateResult<Ydb::Discovery::ListEndpointsResult>(Request);
- auto xres = result->add_endpoints();
- auto publicHost = AppConfig.GetGRpcConfig().GetPublicHost();
- xres->set_address(publicHost ? publicHost : AppConfig.GetGRpcConfig().GetHost()); //TODO: use cfg
- auto publicPort = AppConfig.GetGRpcConfig().GetPublicPort();
- xres->set_port(publicPort ? publicPort : AppConfig.GetGRpcConfig().GetPort());
- Request->SendResult(*result, Ydb::StatusIds::SUCCESS);
+ THolder<TEvListEndpointsRequest> request(event->Release().Release());
+ auto *result = TEvListEndpointsRequest::AllocateResult<Ydb::Discovery::ListEndpointsResult>(request);
+ const auto& grpcConfig = AppConfig.GetGRpcConfig();
+ AddEndpointsForGrpcConfig(grpcConfig, *result);
+
+ for (const auto& externalEndpoint : grpcConfig.GetExtEndpoints()) {
+ AddEndpointsForGrpcConfig(externalEndpoint, *result);
+ }
+
+ request->SendResult(*result, Ydb::StatusIds::SUCCESS);
}
}