aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandrew-rykov <arykov@ydb.tech>2023-05-31 15:21:16 +0300
committerandrew-rykov <arykov@ydb.tech>2023-05-31 15:21:16 +0300
commit13cbc2881b0b24f10abd4ca06185340a7d332212 (patch)
tree02937eb295806327fc4044337fd055d53842a566
parenta495c64ce9b1f2df1299aa415287a90e61719400 (diff)
downloadydb-13cbc2881b0b24f10abd4ca06185340a7d332212.tar.gz
make cluster handler faster feature
-rw-r--r--ydb/core/viewer/json_cluster.h53
1 files changed, 50 insertions, 3 deletions
diff --git a/ydb/core/viewer/json_cluster.h b/ydb/core/viewer/json_cluster.h
index 0bef71d6b53..e85ed63ba19 100644
--- a/ydb/core/viewer/json_cluster.h
+++ b/ydb/core/viewer/json_cluster.h
@@ -80,9 +80,52 @@ public:
++Requested;
ctx.Send(whiteboardServiceId, new TEvWhiteboard::TEvBSGroupStateRequest(), IEventHandle::FlagTrackDelivery | IEventHandle::FlagSubscribeOnSession, nodeId);
++Requested;
- if (Tablets) {
- ctx.Send(whiteboardServiceId, new TEvWhiteboard::TEvTabletStateRequest(), IEventHandle::FlagTrackDelivery | IEventHandle::FlagSubscribeOnSession, nodeId);
- ++Requested;
+ }
+
+ void SendTabletStateRequest(ui32 nodeId, const TActorContext& ctx, THashSet<TTabletId>& filterTablets) {
+ auto request = new TEvWhiteboard::TEvTabletStateRequest();
+ for (TTabletId id: filterTablets) {
+ request->Record.AddFilterTabletId(id);
+ }
+ TActorId whiteboardServiceId = MakeNodeWhiteboardServiceId(nodeId);
+ ctx.Send(whiteboardServiceId, request, IEventHandle::FlagTrackDelivery | IEventHandle::FlagSubscribeOnSession, nodeId);
+ ++Requested;
+ }
+
+ void SendTabletStateRequest(const TActorContext& ctx) {
+ TIntrusivePtr<TDomainsInfo> domains = AppData(ctx)->DomainsInfo;
+ TIntrusivePtr<TDomainsInfo::TDomain> domain = domains->Domains.begin()->second;
+ THashSet<TTabletId> filterTablets;
+ for (TTabletId id : domain->Coordinators) {
+ filterTablets.emplace(id);
+ }
+ for (TTabletId id : domain->Mediators) {
+ filterTablets.emplace(id);
+ }
+ for (TTabletId id : domain->TxAllocators) {
+ filterTablets.emplace(id);
+ }
+ const NKikimrSchemeOp::TPathDescription& pathDescription(DescribeResult->GetRecord().GetPathDescription());
+ if (pathDescription.HasDomainDescription()) {
+ const NKikimrSubDomains::TDomainDescription& domainDescription(pathDescription.GetDomainDescription());
+ for (TTabletId tabletId : domainDescription.GetProcessingParams().GetCoordinators()) {
+ filterTablets.emplace(tabletId);
+ }
+ for (TTabletId tabletId : domainDescription.GetProcessingParams().GetMediators()) {
+ filterTablets.emplace(tabletId);
+ }
+ if (domainDescription.HasDomainKey()) {
+ if (domainDescription.GetDomainKey().HasSchemeShard()) {
+ filterTablets.emplace(domainDescription.GetDomainKey().GetSchemeShard());
+ }
+ }
+ }
+
+ TIntrusivePtr<TDynamicNameserviceConfig> dynamicNameserviceConfig = AppData()->DynamicNameserviceConfig;
+ for (const auto& ni : NodesInfo->Nodes) {
+ if (ni.NodeId <= dynamicNameserviceConfig->MaxStaticNodeId) {
+ SendTabletStateRequest(ni.NodeId, ctx, filterTablets);
+ }
}
}
@@ -206,6 +249,10 @@ public:
void Handle(NSchemeShard::TEvSchemeShard::TEvDescribeSchemeResult::TPtr& ev, const TActorContext &ctx) {
if (ev->Get()->GetRecord().GetStatus() == NKikimrScheme::StatusSuccess) {
DescribeResult = ev->Release();
+
+ if (Tablets) {
+ SendTabletStateRequest(ctx);
+ }
}
RequestDone(ctx);
}