22#include " private_events.h"
33#include " secret_resolver.h"
44
5+ #include < ydb/core/kqp/common/events/script_executions.h>
6+ #include < ydb/core/kqp/federated_query/kqp_federated_query_actors.h>
57#include < ydb/core/tx/scheme_cache/scheme_cache.h>
68#include < ydb/library/actors/core/actor_bootstrapped.h>
79#include < ydb/library/actors/core/hfunc.h>
1012#include < ydb/services/metadata/secret/snapshot.h>
1113#include < ydb/services/metadata/service.h>
1214
15+ #include < util/generic/ptr.h>
16+
1317namespace NKikimr ::NReplication::NController {
1418
1519class TSecretResolver : public TActorBootstrapped <TSecretResolver> {
@@ -40,8 +44,20 @@ class TSecretResolver: public TActorBootstrapped<TSecretResolver> {
4044 }
4145
4246 SecretId = NMetadata::NSecret::TSecretId (entry.SecurityObject ->GetOwnerSID (), SecretName);
43- Send (NMetadata::NProvider::MakeServiceId (SelfId ().NodeId ()),
44- new NMetadata::NProvider::TEvAskSnapshot (SnapshotFetcher ()));
47+ if (NKqp::UseSchemaSecrets (AppData ()->FeatureFlags , SecretId.GetSecretId ())) {
48+ const TVector<TString> secretNames{SecretId.GetSecretId ()};
49+ auto userToken = MakeIntrusiveConst<NACLib::TUserToken>(entry.SecurityObject ->GetOwnerSID (), TVector<TString>());
50+ const auto actorSystem = ActorContext ().ActorSystem ();
51+ const auto replyActorId = SelfId ();
52+ auto future = NKqp::DescribeSecret (secretNames, userToken, Database, actorSystem);
53+ future.Subscribe ([actorSystem, replyActorId](const NThreading::TFuture<NKqp::TEvDescribeSecretsResponse::TDescription>& result) {
54+ actorSystem->Send (replyActorId, new NKqp::TEvDescribeSecretsResponse (result.GetValue ()));
55+ });
56+ return ;
57+ } else {
58+ Send (NMetadata::NProvider::MakeServiceId (SelfId ().NodeId ()),
59+ new NMetadata::NProvider::TEvAskSnapshot (SnapshotFetcher ()));
60+ }
4561 }
4662
4763 void Handle (NMetadata::NProvider::TEvRefreshSubscriberData::TPtr& ev) {
@@ -55,6 +71,15 @@ class TSecretResolver: public TActorBootstrapped<TSecretResolver> {
5571 Reply (secretValue.DetachResult ());
5672 }
5773
74+ void Handle (NKqp::TEvDescribeSecretsResponse::TPtr& ev) {
75+ if (ev->Get ()->Description .Status != Ydb::StatusIds::SUCCESS) {
76+ return Reply (false , ev->Get ()->Description .Issues .ToOneLineString ());
77+ }
78+
79+ Y_ENSURE (ev->Get ()->Description .SecretValues .size () == 1 );
80+ Reply (ev->Get ()->Description .SecretValues [0 ]);
81+ }
82+
5883 template <typename ... Args>
5984 void Reply (Args&&... args) {
6085 Send (Parent, new TEvPrivate::TEvResolveSecretResult (ReplicationId, std::forward<Args>(args)...), 0 , Cookie);
@@ -66,12 +91,13 @@ class TSecretResolver: public TActorBootstrapped<TSecretResolver> {
6691 return NKikimrServices::TActivity::REPLICATION_CONTROLLER_SECRET_RESOLVER;
6792 }
6893
69- explicit TSecretResolver (const TActorId& parent, ui64 rid, const TPathId& pathId, const TString& secretName, const ui64 cookie)
94+ explicit TSecretResolver (const TActorId& parent, ui64 rid, const TPathId& pathId, const TString& secretName, const ui64 cookie, const TString& database )
7095 : Parent(parent)
7196 , ReplicationId(rid)
7297 , PathId(pathId)
7398 , SecretName(secretName)
7499 , Cookie(cookie)
100+ , Database(database)
75101 , LogPrefix(" SecretResolver" , ReplicationId)
76102 {
77103 }
@@ -97,6 +123,7 @@ class TSecretResolver: public TActorBootstrapped<TSecretResolver> {
97123 switch (ev->GetTypeRewrite ()) {
98124 hFunc (TEvTxProxySchemeCache::TEvNavigateKeySetResult, Handle);
99125 hFunc (NMetadata::NProvider::TEvRefreshSubscriberData, Handle);
126+ hFunc (NKqp::TEvDescribeSecretsResponse, Handle);
100127 sFunc (TEvents::TEvWakeup, Bootstrap);
101128 sFunc (TEvents::TEvPoison, PassAway);
102129 }
@@ -108,15 +135,16 @@ class TSecretResolver: public TActorBootstrapped<TSecretResolver> {
108135 const TPathId PathId;
109136 const TString SecretName;
110137 const ui64 Cookie;
138+ const TString Database;
111139 const TActorLogPrefix LogPrefix;
112140
113141 static constexpr auto RetryInterval = TDuration::Seconds(1 );
114142 NMetadata::NSecret::TSecretId SecretId;
115143
116144}; // TSecretResolver
117145
118- IActor* CreateSecretResolver (const TActorId& parent, ui64 rid, const TPathId& pathId, const TString& secretName, const ui64 cookie) {
119- return new TSecretResolver (parent, rid, pathId, secretName, cookie);
146+ IActor* CreateSecretResolver (const TActorId& parent, ui64 rid, const TPathId& pathId, const TString& secretName, const ui64 cookie, const TString& database ) {
147+ return new TSecretResolver (parent, rid, pathId, secretName, cookie, database );
120148}
121149
122150}
0 commit comments