From f5a08b5a97a38c50906621de99bfa2f5b75077b1 Mon Sep 17 00:00:00 2001 From: Andrey Molotkov Date: Fri, 8 Nov 2024 18:32:03 +0300 Subject: [PATCH] ticket parser: Add priority to access service requests (#11278) --- ydb/core/security/ticket_parser_impl.h | 8 ++++++++ ydb/library/grpc/actor_client/grpc_service_client.h | 3 +++ ydb/library/ncloud/api/events.h | 1 + ydb/library/ycloud/api/events.h | 1 + 4 files changed, 13 insertions(+) diff --git a/ydb/core/security/ticket_parser_impl.h b/ydb/core/security/ticket_parser_impl.h index 4d797f25a8e7..bcfc1118d911 100644 --- a/ydb/core/security/ticket_parser_impl.h +++ b/ydb/core/security/ticket_parser_impl.h @@ -141,6 +141,7 @@ class TTicketParserImpl : public TActorBootstrapped { TStackVec AdditionalSIDs; bool RefreshRetryableErrorImmediately = false; TExternalAuthInfo ExternalAuthInfo; + bool IsLowAccessServiceRequestPriority = false; TTokenRecordBase(const TStringBuf ticket) : Ticket(ticket) @@ -394,6 +395,11 @@ class TTicketParserImpl : public TActorBootstrapped { } } + if (record.IsLowAccessServiceRequestPriority) { + auto& headers = request->Headers; + headers["x-ya-priority"] = "low"; + } + return request; } @@ -1704,6 +1710,7 @@ class TTicketParserImpl : public TActorBootstrapped { CounterTicketsBuildTime->Collect((now - record.InitTime).MilliSeconds()); BLOG_D("Ticket " << record.GetMaskedTicket() << " (" << record.PeerName << ") has now valid token of " << record.Subject); + record.IsLowAccessServiceRequestPriority = true; RefreshQueue.push({.Key = key, .RefreshTime = record.RefreshTime}); } @@ -1732,6 +1739,7 @@ class TTicketParserImpl : public TActorBootstrapped { << record.PeerName << ") has now permanent error message '" << error.Message << "'"); } CounterTicketsErrors->Inc(); + record.IsLowAccessServiceRequestPriority = true; RefreshQueue.push({.Key = key, .RefreshTime = record.RefreshTime}); } diff --git a/ydb/library/grpc/actor_client/grpc_service_client.h b/ydb/library/grpc/actor_client/grpc_service_client.h index e51d1483f4c5..62ebe7a22652 100644 --- a/ydb/library/grpc/actor_client/grpc_service_client.h +++ b/ydb/library/grpc/actor_client/grpc_service_client.h @@ -95,6 +95,9 @@ class TGrpcServiceClient { if (requestId) { meta.Aux.push_back({"x-request-id", requestId}); } + for (const auto& [k, v] : ev->Get()->Headers) { + meta.Aux.push_back({k, v}); + } NYdbGrpc::TResponseCallback callback = [actorSystem = NActors::TActivationContext::ActorSystem(), prefix = Prefix(requestId), request = ev](NYdbGrpc::TGrpcStatus&& status, TResponseType&& response) -> void { diff --git a/ydb/library/ncloud/api/events.h b/ydb/library/ncloud/api/events.h index a3a5e68d131a..dd9e71e50045 100644 --- a/ydb/library/ncloud/api/events.h +++ b/ydb/library/ncloud/api/events.h @@ -11,6 +11,7 @@ struct TEvGrpcProtoRequest : NActors::TEventLocal { TProtoMessage Request; TString Token; TString RequestId; + std::unordered_map Headers; }; template diff --git a/ydb/library/ycloud/api/events.h b/ydb/library/ycloud/api/events.h index a69ad5f6a348..5b4c438c2d8f 100644 --- a/ydb/library/ycloud/api/events.h +++ b/ydb/library/ycloud/api/events.h @@ -12,6 +12,7 @@ struct TEvGrpcProtoRequest : NActors::TEventLocal { TProtoMessage Request; TString Token; TString RequestId; + std::unordered_map Headers; }; template