Browse Source

fix error code of initialization of read (#7759)

Nikolay Shestakov 7 months ago
parent
commit
d356543072

+ 19 - 0
ydb/services/persqueue_v1/actors/persqueue_utils.cpp

@@ -154,4 +154,23 @@ void FillIssue(Ydb::Issue::IssueMessage* issue, const Ydb::PersQueue::ErrorCode:
     issue->set_issue_code(errorCode);
 }
 
+Ydb::PersQueue::ErrorCode::ErrorCode ConvertNavigateStatus(NSchemeCache::TSchemeCacheNavigate::EStatus status) {
+    switch(status) {
+        case NSchemeCache::TSchemeCacheNavigate::EStatus::Ok:
+            return Ydb::PersQueue::ErrorCode::OK;
+        case NSchemeCache::TSchemeCacheNavigate::EStatus::Unknown:
+        case NSchemeCache::TSchemeCacheNavigate::EStatus::LookupError:
+        case NSchemeCache::TSchemeCacheNavigate::EStatus::RedirectLookupError:
+            return Ydb::PersQueue::ErrorCode::ERROR;
+        case NSchemeCache::TSchemeCacheNavigate::EStatus::RootUnknown:
+        case NSchemeCache::TSchemeCacheNavigate::EStatus::PathErrorUnknown:
+        case NSchemeCache::TSchemeCacheNavigate::EStatus::PathNotTable:
+        case NSchemeCache::TSchemeCacheNavigate::EStatus::PathNotPath:
+        case NSchemeCache::TSchemeCacheNavigate::EStatus::TableCreationNotComplete:
+            return Ydb::PersQueue::ErrorCode::UNKNOWN_TOPIC;
+        case NSchemeCache::TSchemeCacheNavigate::EStatus::AccessDenied:
+            return Ydb::PersQueue::ErrorCode::ACCESS_DENIED;
+    }
+}
+
 } // namespace NKikimr::NGRpcProxy::V1

+ 2 - 0
ydb/services/persqueue_v1/actors/persqueue_utils.h

@@ -97,4 +97,6 @@ static inline TVector<TEvTicketParser::TEvAuthorizeTicket::TEntry>  GetTicketPar
     return {};
 }
 
+Ydb::PersQueue::ErrorCode::ErrorCode ConvertNavigateStatus(NSchemeCache::TSchemeCacheNavigate::EStatus status);
+
 } //namespace NKikimr::NGRpcProxy::V1

+ 3 - 1
ydb/services/persqueue_v1/actors/read_init_auth_actor.cpp

@@ -231,7 +231,9 @@ void TReadInitAndAuthActor::HandleClientSchemeCacheResponse(
     auto path = "/" + JoinPath(entry.Path); // ToDo [migration] - through converter ?
     if (navigate->ErrorCount > 0) {
         const NSchemeCache::TSchemeCacheNavigate::EStatus status = navigate->ResultSet.front().Status;
-        CloseSession(TStringBuilder() << "Failed to read ACL for '" << path << "' Scheme cache error : " << status, PersQueue::ErrorCode::UNKNOWN_TOPIC, ctx);
+        PersQueue::ErrorCode::ErrorCode errorCode = ConvertNavigateStatus(status);
+
+        CloseSession(TStringBuilder() << "Failed to read ACL for '" << path << "' Scheme cache error : " << status,  errorCode, ctx);
         return;
     }