@@ -128,52 +128,44 @@ namespace NKikimr::NGRpcProxy::V1 {
128128 return false ;
129129 };
130130
131-
132131 void SendDescribeProposeRequest (const NActors::TActorContext& ctx, bool showPrivate) {
133132 auto navigateRequest = std::make_unique<NSchemeCache::TSchemeCacheNavigate>();
134- navigateRequest->DatabaseName = CanonizePath (Database);
135-
136- NSchemeCache::TSchemeCacheNavigate::TEntry entry;
137- if (CheckAccessWithUpdateRowPermission) {
138- entry.Access = NACLib::EAccessRights::UpdateRow;
139- }
140- entry.Path = NKikimr::SplitPath (GetTopicPath ());
141- entry.SyncVersion = true ;
142- entry.ShowPrivatePath = showPrivate;
143- entry.Operation = NSchemeCache::TSchemeCacheNavigate::OpList;
144- navigateRequest->ResultSet .emplace_back (entry);
145-
146133 if (!SetRequestToken (navigateRequest.get ())) {
147134 AddIssue (FillIssue (" Unauthenticated access is forbidden, please provide credentials" ,
148135 Ydb::PersQueue::ErrorCode::ACCESS_DENIED));
149136 return RespondWithCode (Ydb::StatusIds::UNAUTHORIZED);
150137 }
138+
139+ navigateRequest->DatabaseName = CanonizePath (Database);
140+ navigateRequest->ResultSet .emplace_back (NSchemeCache::TSchemeCacheNavigate::TEntry{
141+ .Path = NKikimr::SplitPath (GetTopicPath ()),
142+ .Access = CheckAccessWithUpdateRowPermission ? NACLib::UpdateRow : NACLib::DescribeSchema,
143+ .Operation = NSchemeCache::TSchemeCacheNavigate::OpList,
144+ .ShowPrivatePath = showPrivate,
145+ .SyncVersion = true ,
146+ });
151147 if (!IsDead) {
152148 ctx.Send (MakeSchemeCacheID (), new TEvTxProxySchemeCache::TEvNavigateKeySet (navigateRequest.release ()));
153149 }
154150 }
155151
156152 bool ReplyIfNotTopic (TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr& ev) {
157- const NSchemeCache::TSchemeCacheNavigate* result = ev->Get ()->Request .Get ();
158- Y_ABORT_UNLESS (result->ResultSet .size () == 1 );
159- const auto & response = result->ResultSet .front ();
160- const TString path = JoinPath (response.Path );
161-
162- if (ev->Get ()->Request .Get ()->ResultSet .size () != 1 ||
163- ev->Get ()->Request .Get ()->ResultSet .begin ()->Kind !=
164- NSchemeCache::TSchemeCacheNavigate::KindTopic) {
165- AddIssue (FillIssue (TStringBuilder () << " path '" << path << " ' is not a topic" ,
166- Ydb::PersQueue::ErrorCode::VALIDATION_ERROR));
167- RespondWithCode (Ydb::StatusIds::SCHEME_ERROR);
168- return true ;
153+ auto const & entries = ev->Get ()->Request .Get ()->ResultSet ;
154+ Y_ABORT_UNLESS (entries.size () == 1 );
155+ auto const & entry = entries.front ();
156+ if (entry.Kind == NSchemeCache::TSchemeCacheNavigate::KindTopic) {
157+ return false ;
169158 }
170- return false ;
159+ AddIssue (FillIssue (TStringBuilder () << " path '" << JoinPath (entry.Path ) << " ' is not a topic" ,
160+ Ydb::PersQueue::ErrorCode::VALIDATION_ERROR));
161+ RespondWithCode (Ydb::StatusIds::SCHEME_ERROR);
162+ return true ;
171163 }
172164
173165 void Handle (TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr& ev) {
174- const NSchemeCache::TSchemeCacheNavigate* result = ev->Get ()->Request .Get ();
175- Y_ABORT_UNLESS (result-> ResultSet .size () == 1 );
176- const auto & response = result-> ResultSet .front ();
166+ auto const & entries = ev->Get ()->Request .Get ()-> ResultSet ;
167+ Y_ABORT_UNLESS (entries .size () == 1 );
168+ const auto & response = entries .front ();
177169 const TString path = JoinPath (response.Path );
178170
179171 switch (response.Status ) {
@@ -248,7 +240,6 @@ namespace NKikimr::NGRpcProxy::V1 {
248240 }
249241 }
250242
251-
252243 void StateWork (TAutoPtr<IEventHandle>& ev) {
253244 switch (ev->GetTypeRewrite ()) {
254245 hFunc (TEvTxProxySchemeCache::TEvNavigateKeySetResult, Handle);
@@ -343,13 +334,13 @@ namespace NKikimr::NGRpcProxy::V1 {
343334 }
344335
345336 bool SetRequestToken (NSchemeCache::TSchemeCacheNavigate* request) const override {
346- if (this ->Request_ ->GetSerializedToken ().empty ()) {
347- return !(AppData ()->PQConfig .GetRequireCredentialsInNewProtocol ());
348- } else {
349- request->UserToken = new NACLib::TUserToken (this ->Request_ ->GetSerializedToken ());
337+ if (auto const & token = this ->Request_ ->GetSerializedToken ()) {
338+ request->UserToken = new NACLib::TUserToken (token);
350339 return true ;
351340 }
341+ return !(AppData ()->PQConfig .GetRequireCredentialsInNewProtocol ());
352342 }
343+
353344 bool ProcessCdc (const NSchemeCache::TSchemeCacheNavigate::TEntry& response) override {
354345 if constexpr (THasCdcStreamCompatibility<TDerived>::Value) {
355346 if (static_cast <TDerived*>(this )->IsCdcStreamCompatible ()) {
0 commit comments