Skip to content

Commit af8fa08

Browse files
authored
Merge b359a87 into bd6396c
2 parents bd6396c + b359a87 commit af8fa08

File tree

9 files changed

+4385
-984
lines changed

9 files changed

+4385
-984
lines changed

.github/config/muted_ya.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@ ydb/core/tx/schemeshard/ut_pq_reboots TPqGroupTestReboots.AlterWithReboots-PQCon
8989
ydb/core/tx/schemeshard/ut_pq_reboots TPqGroupTestReboots.CreateAlter-PQConfigTransactionsAtSchemeShard-true
9090
ydb/core/tx/schemeshard/ut_pq_reboots TPqGroupTestReboots.CreateAlterDropPqGroupWithReboots-PQConfigTransactionsAtSchemeShard-true
9191
ydb/core/tx/tiering/ut ColumnShardTiers.TTLUsage
92-
ydb/core/viewer/tests test.py.test_viewer_healthcheck
9392
ydb/core/viewer/ut Viewer.TabletMerging
9493
ydb/core/viewer/ut Viewer.TabletMergingPacked
9594
ydb/library/actors/http/ut sole chunk chunk

ydb/core/protos/node_whiteboard.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ message TEvTabletStateRequest {
6969
optional string Format = 5; // it could be "packed5"
7070
optional string GroupBy = 20; // it's either empty or "Type,State" for now
7171
repeated fixed64 FilterTabletId = 22;
72+
optional NKikimrSubDomains.TDomainKey FilterTenantId = 23;
7273
}
7374

7475
message TEvTabletStateResponse {

ydb/core/tablet/node_whiteboard.cpp

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -839,24 +839,32 @@ class TNodeWhiteboardService : public TActorBootstrapped<TNodeWhiteboardService>
839839
void Handle(TEvWhiteboard::TEvTabletStateRequest::TPtr &ev, const TActorContext &ctx) {
840840
auto now = TMonotonic::Now();
841841
const auto& request = ev->Get()->Record;
842+
auto matchesFilter = [
843+
changedSince = request.has_changedsince() ? request.changedsince() : 0,
844+
filterTenantId = request.has_filtertenantid() ? NKikimr::TSubDomainKey(request.filtertenantid()) : NKikimr::TSubDomainKey()
845+
](const NKikimrWhiteboard::TTabletStateInfo& tabletStateInfo) {
846+
return tabletStateInfo.changetime() >= changedSince
847+
&& (!filterTenantId || filterTenantId == NKikimr::TSubDomainKey(tabletStateInfo.tenantid()));
848+
};
842849
std::unique_ptr<TEvWhiteboard::TEvTabletStateResponse> response = std::make_unique<TEvWhiteboard::TEvTabletStateResponse>();
843850
auto& record = response->Record;
844851
if (request.format() == "packed5") {
845852
TEvWhiteboard::TEvTabletStateResponsePacked5* ptr = response->AllocatePackedResponse(TabletStateInfo.size());
846853
for (const auto& [tabletId, tabletInfo] : TabletStateInfo) {
847-
ptr->TabletId = tabletInfo.tabletid();
848-
ptr->FollowerId = tabletInfo.followerid();
849-
ptr->Generation = tabletInfo.generation();
850-
ptr->Type = tabletInfo.type();
851-
ptr->State = tabletInfo.state();
852-
++ptr;
854+
if (matchesFilter(tabletInfo)) {
855+
ptr->TabletId = tabletInfo.tabletid();
856+
ptr->FollowerId = tabletInfo.followerid();
857+
ptr->Generation = tabletInfo.generation();
858+
ptr->Type = tabletInfo.type();
859+
ptr->State = tabletInfo.state();
860+
++ptr;
861+
}
853862
}
854863
} else {
855864
if (request.groupby().empty()) {
856-
ui64 changedSince = request.has_changedsince() ? request.changedsince() : 0;
857865
if (request.filtertabletid_size() == 0) {
858866
for (const auto& pr : TabletStateInfo) {
859-
if (pr.second.changetime() >= changedSince) {
867+
if (matchesFilter(pr.second)) {
860868
NKikimrWhiteboard::TTabletStateInfo& tabletStateInfo = *record.add_tabletstateinfo();
861869
Copy(tabletStateInfo, pr.second, request);
862870
}
@@ -865,7 +873,7 @@ class TNodeWhiteboardService : public TActorBootstrapped<TNodeWhiteboardService>
865873
for (auto tabletId : request.filtertabletid()) {
866874
auto it = TabletStateInfo.find({tabletId, 0});
867875
if (it != TabletStateInfo.end()) {
868-
if (it->second.changetime() >= changedSince) {
876+
if (matchesFilter(it->second)) {
869877
NKikimrWhiteboard::TTabletStateInfo& tabletStateInfo = *record.add_tabletstateinfo();
870878
Copy(tabletStateInfo, it->second, request);
871879
}
@@ -876,6 +884,9 @@ class TNodeWhiteboardService : public TActorBootstrapped<TNodeWhiteboardService>
876884
std::unordered_map<std::pair<NKikimrTabletBase::TTabletTypes::EType,
877885
NKikimrWhiteboard::TTabletStateInfo::ETabletState>, NKikimrWhiteboard::TTabletStateInfo> stateGroupBy;
878886
for (const auto& [id, stateInfo] : TabletStateInfo) {
887+
if (!matchesFilter(stateInfo)) {
888+
continue;
889+
}
879890
NKikimrWhiteboard::TTabletStateInfo& state = stateGroupBy[{stateInfo.type(), stateInfo.state()}];
880891
auto count = state.count();
881892
if (count == 0) {

ydb/core/viewer/json_pipe_req.cpp

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -825,13 +825,9 @@ void TViewerPipeClient::HandleResolveResource(TEvTxProxySchemeCache::TEvNavigate
825825
if (ResourceNavigateResponse->IsOk()) {
826826
TSchemeCacheNavigate::TEntry& entry(ResourceNavigateResponse->Get()->Request->ResultSet.front());
827827
SharedDatabase = CanonizePath(entry.Path);
828-
if (SharedDatabase == AppData()->TenantName) {
829-
Direct = true;
830-
Bootstrap(); // retry bootstrap without redirect this time
831-
} else {
832-
DatabaseBoardInfoResponse = MakeRequestStateStorageEndpointsLookup(SharedDatabase);
833-
--Requests; // don't count this request
834-
}
828+
Direct |= (SharedDatabase == AppData()->TenantName);
829+
DatabaseBoardInfoResponse = MakeRequestStateStorageEndpointsLookup(SharedDatabase);
830+
--Requests; // don't count this request
835831
} else {
836832
AddEvent("Failed to resolve database - shared database not found");
837833
Direct = true;
@@ -850,7 +846,8 @@ void TViewerPipeClient::HandleResolveDatabase(TEvTxProxySchemeCache::TEvNavigate
850846
--Requests; // don't count this request
851847
Become(&TViewerPipeClient::StateResolveResource);
852848
} else {
853-
DatabaseBoardInfoResponse = MakeRequestStateStorageEndpointsLookup(CanonizePath(entry.Path));
849+
Database = CanonizePath(entry.Path);
850+
DatabaseBoardInfoResponse = MakeRequestStateStorageEndpointsLookup(Database);
854851
--Requests; // don't count this request
855852
}
856853
} else {
@@ -865,7 +862,11 @@ void TViewerPipeClient::HandleResolve(TEvStateStorage::TEvBoardInfo::TPtr& ev) {
865862
if (DatabaseBoardInfoResponse) {
866863
DatabaseBoardInfoResponse->Set(std::move(ev));
867864
if (DatabaseBoardInfoResponse->IsOk()) {
868-
return ReplyAndPassAway(MakeForward(GetNodesFromBoardReply(DatabaseBoardInfoResponse->GetRef())));
865+
if (Direct) {
866+
Bootstrap(); // retry bootstrap without redirect this time
867+
} else {
868+
ReplyAndPassAway(MakeForward(GetNodesFromBoardReply(DatabaseBoardInfoResponse->GetRef())));
869+
}
869870
} else {
870871
AddEvent("Failed to resolve database nodes");
871872
Direct = true;
@@ -902,10 +903,11 @@ void TViewerPipeClient::RedirectToDatabase(const TString& database) {
902903

903904
bool TViewerPipeClient::NeedToRedirect() {
904905
auto request = GetRequest();
905-
if (request) {
906+
if (NeedRedirect && request) {
907+
NeedRedirect = false;
906908
Direct |= !request.GetHeader("X-Forwarded-From-Node").empty(); // we're already forwarding
907909
Direct |= (Database == AppData()->TenantName) || Database.empty(); // we're already on the right node or don't use database filter
908-
if (Database && !Direct) {
910+
if (Database) {
909911
RedirectToDatabase(Database); // to find some dynamic node and redirect query there
910912
return true;
911913
}

ydb/core/viewer/json_pipe_req.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class TViewerPipeClient : public TActorBootstrapped<TViewerPipeClient> {
4242
TString Database;
4343
TString SharedDatabase;
4444
bool Direct = false;
45+
bool NeedRedirect = true;
4546
ui32 Requests = 0;
4647
bool PassedAway = false;
4748
ui32 MaxRequestsInFlight = 200;

0 commit comments

Comments
 (0)