From dda2bc2a88756e6625880ed5edc1effdfb4db643 Mon Sep 17 00:00:00 2001 From: Andrei Rykov Date: Fri, 29 Nov 2024 11:07:02 +0100 Subject: [PATCH] Viewer returns Failed to resolve database (#11841) Co-authored-by: AlexSm Co-authored-by: Raubzeug --- ydb/core/viewer/json_pipe_req.cpp | 24 ++++++++++++++++-------- ydb/core/viewer/viewer_tabletinfo.h | 23 ++++++++++------------- 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/ydb/core/viewer/json_pipe_req.cpp b/ydb/core/viewer/json_pipe_req.cpp index 8d8d6f95cb43..336a7faec222 100644 --- a/ydb/core/viewer/json_pipe_req.cpp +++ b/ydb/core/viewer/json_pipe_req.cpp @@ -573,6 +573,9 @@ TViewerPipeClient::TRequestResponse request(new TEvTxUserProxy::TEvNavigate()); request->Record.MutableDescribePath()->SetPath(path); + if (!Event->Get()->UserToken.empty()) { + request->Record.SetUserToken(Event->Get()->UserToken); + } SendRequest(MakeTxProxyID(), request.Release()); } @@ -763,13 +766,15 @@ void TViewerPipeClient::HandleResolveResource(TEvTxProxySchemeCache::TEvNavigate SharedDatabase = CanonizePath(entry.Path); if (SharedDatabase == AppData()->TenantName) { Direct = true; - return Bootstrap(); // retry bootstrap without redirect this time + Bootstrap(); // retry bootstrap without redirect this time + } else { + DatabaseBoardInfoResponse = MakeRequestStateStorageEndpointsLookup(SharedDatabase); } - DatabaseBoardInfoResponse = MakeRequestStateStorageEndpointsLookup(SharedDatabase); } else { - ReplyAndPassAway(GetHTTPBADREQUEST("text/plain", "Failed to resolve database - shared database not found")); + return ReplyAndPassAway(GetHTTPBADREQUEST("text/plain", "Failed to resolve database - shared database not found")); } } + RequestDone(); } void TViewerPipeClient::HandleResolveDatabase(TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr& ev) { @@ -780,24 +785,27 @@ void TViewerPipeClient::HandleResolveDatabase(TEvTxProxySchemeCache::TEvNavigate if (entry.DomainInfo && entry.DomainInfo->ResourcesDomainKey && entry.DomainInfo->DomainKey != entry.DomainInfo->ResourcesDomainKey) { ResourceNavigateResponse = MakeRequestSchemeCacheNavigate(TPathId(entry.DomainInfo->ResourcesDomainKey)); Become(&TViewerPipeClient::StateResolveResource); - return; + } else { + DatabaseBoardInfoResponse = MakeRequestStateStorageEndpointsLookup(CanonizePath(entry.Path)); } - DatabaseBoardInfoResponse = MakeRequestStateStorageEndpointsLookup(CanonizePath(entry.Path)); } else { - ReplyAndPassAway(GetHTTPBADREQUEST("text/plain", "Failed to resolve database - not found")); + return ReplyAndPassAway(GetHTTPBADREQUEST("text/plain", "Failed to resolve database - not found")); } } + RequestDone(); } void TViewerPipeClient::HandleResolve(TEvStateStorage::TEvBoardInfo::TPtr& ev) { if (DatabaseBoardInfoResponse) { DatabaseBoardInfoResponse->Set(std::move(ev)); if (DatabaseBoardInfoResponse->IsOk()) { - ReplyAndPassAway(MakeForward(GetNodesFromBoardReply(DatabaseBoardInfoResponse->GetRef()))); + return ReplyAndPassAway(MakeForward(GetNodesFromBoardReply(DatabaseBoardInfoResponse->GetRef()))); } else { - ReplyAndPassAway(GetHTTPBADREQUEST("text/plain", "Failed to resolve database - no nodes found")); + Direct = true; + Bootstrap(); // retry bootstrap without redirect this time } } + RequestDone(); } void TViewerPipeClient::HandleTimeout() { diff --git a/ydb/core/viewer/viewer_tabletinfo.h b/ydb/core/viewer/viewer_tabletinfo.h index 884e09e04915..2c6719bc643e 100644 --- a/ydb/core/viewer/viewer_tabletinfo.h +++ b/ydb/core/viewer/viewer_tabletinfo.h @@ -88,8 +88,11 @@ class TJsonTabletInfo : public TJsonWhiteboardRequestGet()->Request.GetParams()); TBase::RequestSettings.Timeout = FromStringWithDefault(params.Get("timeout"), 10000); - if (Database) { - RegisterWithSameMailbox(CreateBoardLookupActor(MakeEndpointsBoardPath(Database), TBase::SelfId(), EBoardLookupMode::Second)); + + if (DatabaseBoardInfoResponse && DatabaseBoardInfoResponse->IsOk()) { + TBase::RequestSettings.FilterNodeIds = TBase::GetNodesFromBoardReply(DatabaseBoardInfoResponse->GetRef()); + } else if (Database) { + RequestStateStorageEndpointsLookup(Database); Become(&TThis::StateRequestedLookup, TDuration::MilliSeconds(TBase::RequestSettings.Timeout), new TEvents::TEvWakeup()); return; } @@ -103,13 +106,7 @@ class TJsonTabletInfo : public TJsonWhiteboardRequest(params.Get("timeout"), 10000); IsBase64Encode = FromStringWithDefault(params.Get("base64"), IsBase64Encode); - THolder request(new TEvTxUserProxy::TEvNavigate()); - if (!Event->Get()->UserToken.empty()) { - request->Record.SetUserToken(Event->Get()->UserToken); - } - NKikimrSchemeOp::TDescribePath* record = request->Record.MutableDescribePath(); - record->SetPath(params.Get("path")); - TBase::Send(MakeTxProxyID(), request.Release()); + RequestTxProxyDescribe(params.Get("path")); Become(&TThis::StateRequestedDescribe, TDuration::MilliSeconds(TBase::RequestSettings.Timeout), new TEvents::TEvWakeup()); } else { TBase::Bootstrap(); @@ -134,6 +131,7 @@ class TJsonTabletInfo : public TJsonWhiteboardRequestRecord.AddFilterTabletId(tablet.first); } } + RequestDone(); } virtual void FilterResponse(NKikimrWhiteboard::TEvTabletStateResponse& response) override {