Skip to content

Commit ef036a2

Browse files
authored
rework grpc monitoring (#11191)
1 parent f2cdb34 commit ef036a2

File tree

5 files changed

+54
-28
lines changed

5 files changed

+54
-28
lines changed

ydb/core/fq/libs/compute/ydb/control_plane/compute_database_control_plane_service.cpp

Lines changed: 40 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include <ydb/library/security/ydb_credentials_provider_factory.h>
1212

1313
#include <ydb/public/lib/fq/scope.h>
14+
#include <ydb/public/sdk/cpp/client/resources/ydb_resources.h>
1415
#include <ydb/public/sdk/cpp/client/ydb_query/client.h>
1516
#include <ydb/public/sdk/cpp/client/ydb_operation/operation.h>
1617

@@ -308,6 +309,18 @@ class TCreateDatabaseRequestActor : public NActors::TActorBootstrapped<TCreateDa
308309
};
309310
};
310311

312+
bool IsValidLoadControlConfig(const NConfig::TLoadControlConfig& config) {
313+
if (!config.GetEnable()) {
314+
return true;
315+
}
316+
317+
const auto& databaseConnection = config.GetDatabaseConnection();
318+
if (!databaseConnection.GetDatabase()) {
319+
return false;
320+
}
321+
return databaseConnection.GetEndpoint() || config.GetMonitoringEndpoint();
322+
}
323+
311324
}
312325

313326
class TComputeDatabaseControlPlaneServiceActor : public NActors::TActorBootstrapped<TComputeDatabaseControlPlaneServiceActor> {
@@ -342,7 +355,7 @@ class TComputeDatabaseControlPlaneServiceActor : public NActors::TActorBootstrap
342355
switch (controlPlane.type_case()) {
343356
case NConfig::TYdbComputeControlPlane::TYPE_NOT_SET:
344357
case NConfig::TYdbComputeControlPlane::kSingle:
345-
CreateSingleClientActors(controlPlane.GetSingle());
358+
CreateSingleClientActors();
346359
break;
347360
case NConfig::TYdbComputeControlPlane::kCms:
348361
CreateCmsClientActors(controlPlane.GetCms(), controlPlane.GetDatabasesCacheReloadPeriod());
@@ -361,11 +374,13 @@ class TComputeDatabaseControlPlaneServiceActor : public NActors::TActorBootstrap
361374
if (connection.GetCertificateFile()) {
362375
settings.CertificateRootCA = StripString(TFileInput(connection.GetCertificateFile()).ReadAll());
363376
}
377+
settings.Headers[NYdb::YDB_DATABASE_HEADER] = connection.GetDatabase();
364378
return settings;
365379
}
366380

367-
static NGrpcActorClient::TGrpcClientSettings CreateGrpcClientSettings(const auto& connection) {
381+
static NGrpcActorClient::TGrpcClientSettings CreateGrpcClientSettings(const NConfig::TComputeDatabaseConfig& config) {
368382
NGrpcActorClient::TGrpcClientSettings settings;
383+
const auto& connection = config.GetExecutionConnection();
369384
settings.Endpoint = connection.GetEndpoint();
370385
settings.EnableSsl = connection.GetUseSsl();
371386
if (connection.GetCertificateFile()) {
@@ -375,23 +390,21 @@ class TComputeDatabaseControlPlaneServiceActor : public NActors::TActorBootstrap
375390
return settings;
376391
}
377392

378-
static NGrpcActorClient::TGrpcClientSettings CreateGrpcClientSettings(const NConfig::TComputeDatabaseConfig& config) {
379-
return CreateGrpcClientSettings(config.GetControlPlaneConnection());
380-
}
381-
382-
void CreateSingleClientActors(const NConfig::TYdbComputeControlPlane::TSingle& singleConfig) {
393+
void CreateSingleClientActors() {
383394
auto globalLoadConfig = Config.GetYdb().GetLoadControlConfig();
384-
if (globalLoadConfig.GetEnable()) {
385-
TActorId clientActor;
386-
auto monitoringEndpoint = globalLoadConfig.GetMonitoringEndpoint();
387-
auto credentialsProvider = CredentialsProviderFactory(GetYdbCredentialSettings(singleConfig.GetConnection()))->CreateProvider();
388-
if (monitoringEndpoint) {
389-
clientActor = Register(CreateMonitoringRestClientActor(monitoringEndpoint, singleConfig.GetConnection().GetDatabase(), credentialsProvider).release());
390-
} else {
391-
clientActor = Register(CreateMonitoringGrpcClientActor(CreateGrpcClientSettings(singleConfig.GetConnection()), credentialsProvider).release());
392-
}
393-
MonitoringActorId = Register(CreateDatabaseMonitoringActor(clientActor, globalLoadConfig, Counters).release());
395+
if (!globalLoadConfig.GetEnable() || !IsValidLoadControlConfig(globalLoadConfig)) {
396+
return;
397+
}
398+
TActorId clientActor;
399+
auto monitoringEndpoint = globalLoadConfig.GetMonitoringEndpoint();
400+
const auto& databaseConnection = globalLoadConfig.GetDatabaseConnection();
401+
auto credentialsProvider = CredentialsProviderFactory(GetYdbCredentialSettings(databaseConnection))->CreateProvider();
402+
if (monitoringEndpoint) {
403+
clientActor = Register(CreateMonitoringRestClientActor(monitoringEndpoint, databaseConnection.GetDatabase(), credentialsProvider).release());
404+
} else {
405+
clientActor = Register(CreateMonitoringGrpcClientActor(CreateGrpcClientSettings(databaseConnection), credentialsProvider).release());
394406
}
407+
MonitoringActorId = Register(CreateDatabaseMonitoringActor(clientActor, globalLoadConfig, Counters).release());
395408
}
396409

397410
void CreateCmsClientActors(const NConfig::TYdbComputeControlPlane::TCms& cmsConfig, const TString& databasesCacheReloadPeriod) {
@@ -405,14 +418,15 @@ class TComputeDatabaseControlPlaneServiceActor : public NActors::TActorBootstrap
405418
const NConfig::TLoadControlConfig& loadConfig = config.GetLoadControlConfig().GetEnable()
406419
? config.GetLoadControlConfig()
407420
: globalLoadConfig;
408-
if (loadConfig.GetEnable()) {
421+
if (loadConfig.GetEnable() && IsValidLoadControlConfig(loadConfig)) {
409422
TActorId clientActor;
410423
auto monitoringEndpoint = loadConfig.GetMonitoringEndpoint();
411-
auto credentialsProvider = CredentialsProviderFactory(GetYdbCredentialSettings(config.GetControlPlaneConnection()))->CreateProvider();
424+
const auto& databaseConnection = loadConfig.GetDatabaseConnection();
425+
auto credentialsProvider = CredentialsProviderFactory(GetYdbCredentialSettings(databaseConnection))->CreateProvider();
412426
if (monitoringEndpoint) {
413-
clientActor = Register(CreateMonitoringRestClientActor(monitoringEndpoint, config.GetControlPlaneConnection().GetDatabase(), credentialsProvider).release());
427+
clientActor = Register(CreateMonitoringRestClientActor(monitoringEndpoint, databaseConnection.GetDatabase(), credentialsProvider).release());
414428
} else {
415-
clientActor = Register(CreateMonitoringGrpcClientActor(CreateGrpcClientSettings(config), credentialsProvider).release());
429+
clientActor = Register(CreateMonitoringGrpcClientActor(CreateGrpcClientSettings(databaseConnection), credentialsProvider).release());
416430
}
417431
databaseMonitoringActor = Register(CreateDatabaseMonitoringActor(clientActor, loadConfig, databaseCounters).release());
418432
}
@@ -429,14 +443,15 @@ class TComputeDatabaseControlPlaneServiceActor : public NActors::TActorBootstrap
429443
const NConfig::TLoadControlConfig& loadConfig = config.GetLoadControlConfig().GetEnable()
430444
? config.GetLoadControlConfig()
431445
: globalLoadConfig;
432-
if (loadConfig.GetEnable()) {
446+
if (loadConfig.GetEnable() && IsValidLoadControlConfig(loadConfig)) {
433447
TActorId clientActor;
434448
auto monitoringEndpoint = loadConfig.GetMonitoringEndpoint();
435-
auto credentialsProvider = CredentialsProviderFactory(GetYdbCredentialSettings(config.GetControlPlaneConnection()))->CreateProvider();
449+
const auto& databaseConnection = loadConfig.GetDatabaseConnection();
450+
auto credentialsProvider = CredentialsProviderFactory(GetYdbCredentialSettings(databaseConnection))->CreateProvider();
436451
if (monitoringEndpoint) {
437-
clientActor = Register(CreateMonitoringRestClientActor(monitoringEndpoint, config.GetControlPlaneConnection().GetDatabase(), credentialsProvider).release());
452+
clientActor = Register(CreateMonitoringRestClientActor(monitoringEndpoint, databaseConnection.GetDatabase(), credentialsProvider).release());
438453
} else {
439-
clientActor = Register(CreateMonitoringGrpcClientActor(CreateGrpcClientSettings(config), credentialsProvider).release());
454+
clientActor = Register(CreateMonitoringGrpcClientActor(CreateGrpcClientSettings(databaseConnection), credentialsProvider).release());
440455
}
441456
databaseMonitoringActor = Register(CreateDatabaseMonitoringActor(clientActor, loadConfig, databaseCounters).release());
442457
}

ydb/core/fq/libs/compute/ydb/control_plane/ya.make

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,24 @@ SRCS(
1212

1313
PEERDIR(
1414
library/cpp/json
15-
ydb/library/actors/core
16-
ydb/library/actors/protos
17-
ydb/library/grpc/actor_client
1815
ydb/core/fq/libs/compute/ydb/synchronization_service
1916
ydb/core/fq/libs/control_plane_storage/proto
2017
ydb/core/fq/libs/quota_manager/proto
2118
ydb/core/kqp/workload_service/common
2219
ydb/core/protos
20+
ydb/library/actors/core
21+
ydb/library/actors/protos
2322
ydb/library/db_pool/protos
23+
ydb/library/grpc/actor_client
2424
ydb/library/yql/public/issue
2525
ydb/library/yql/utils
2626
ydb/library/yql/utils/actors
2727
ydb/public/api/grpc
2828
ydb/public/api/grpc/draft
2929
ydb/public/lib/operation_id/protos
30+
ydb/public/sdk/cpp/client/resources
31+
ydb/public/sdk/cpp/client/ydb_operation
32+
ydb/public/sdk/cpp/client/ydb_query
3033
)
3134

3235
YQL_LAST_ABI_VERSION()

ydb/core/fq/libs/config/protos/compute.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ message TLoadControlConfig {
2727
bool Strict = 7; // default false, whether to deny execution in load level unavailable
2828
uint32 CpuNumber = 8;
2929
string MonitoringEndpoint = 9; // if defined, will be used as REST API instead of default GRPC
30+
TYdbStorageConfig DatabaseConnection = 10;
3031
}
3132

3233
message TWorkloadManagerConfig {

ydb/library/grpc/actor_client/grpc_service_client.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ class TGrpcServiceClient {
2222
using TServiceConnection = NYdbGrpc::TServiceConnection<TGrpcService>;
2323

2424
NYdbGrpc::TGRpcClientConfig Config;
25+
std::unordered_map<TString, TString> Headers;
2526
NYdbGrpc::TGRpcClientLow Client;
2627
std::unique_ptr<TServiceConnection> Connection;
2728

@@ -93,6 +94,9 @@ class TGrpcServiceClient {
9394
if (requestId) {
9495
meta.Aux.push_back({"x-request-id", requestId});
9596
}
97+
for (auto [k ,v]: Headers) {
98+
meta.Aux.push_back({k, v});
99+
}
96100

97101
NYdbGrpc::TResponseCallback<TResponseType> callback =
98102
[actorSystem = NActors::TActivationContext::ActorSystem(), prefix = Prefix(requestId), request = ev](NYdbGrpc::TGrpcStatus&& status, TResponseType&& response) -> void {
@@ -129,6 +133,7 @@ class TGrpcServiceClient {
129133

130134
TGrpcServiceClient(const NGrpcActorClient::TGrpcClientSettings& settings)
131135
: Config(InitGrpcConfig(settings))
136+
, Headers(settings.Headers)
132137
{}
133138
};
134139

ydb/library/grpc/actor_client/grpc_service_settings.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#pragma once
22
#include <util/generic/string.h>
33
#include <util/system/types.h>
4+
#include <unordered_map>
45

56
namespace NGrpcActorClient {
67

@@ -12,6 +13,7 @@ struct TGrpcClientSettings {
1213
ui32 GrpcKeepAlivePingInterval = 5000;
1314
bool EnableSsl = false;
1415
ui64 RequestTimeoutMs = 10000; // 10 seconds
16+
std::unordered_map<TString, TString> Headers;
1517
};
1618

1719
} // namespace NGrpcActorClient

0 commit comments

Comments
 (0)