@@ -151,7 +151,6 @@ class TStorageGroups : public TViewerPipeClient {
151
151
std::unordered_set<TGroupId> FilterGroupIds;
152
152
std::unordered_set<TNodeId> FilterNodeIds;
153
153
std::unordered_set<ui32> FilterPDiskIds;
154
- std::vector<TNodeId> SubscriptionNodeIds;
155
154
156
155
enum class EWith {
157
156
Everything,
@@ -894,22 +893,6 @@ class TStorageGroups : public TViewerPipeClient {
894
893
Schedule (TDuration::MilliSeconds (Timeout), new TEvents::TEvWakeup (TimeoutFinal)); // timeout for the rest
895
894
}
896
895
897
- void PassAway () override {
898
- std::vector<bool > passedNodes;
899
- for (const TNodeId nodeId : SubscriptionNodeIds) {
900
- if (passedNodes.size () <= nodeId) {
901
- passedNodes.resize (nodeId + 1 );
902
- } else {
903
- if (passedNodes[nodeId]) {
904
- continue ;
905
- }
906
- }
907
- Send (TActivationContext::InterconnectProxy (nodeId), new TEvents::TEvUnsubscribe ());
908
- passedNodes[nodeId] = true ;
909
- }
910
- TBase::PassAway ();
911
- }
912
-
913
896
void ApplyFilter () {
914
897
// database pre-filter, affects TotalGroups count
915
898
if (!DatabaseStoragePools.empty ()) {
@@ -1042,20 +1025,29 @@ class TStorageGroups : public TViewerPipeClient {
1042
1025
With = EWith::Everything;
1043
1026
GroupsByGroupId.clear ();
1044
1027
}
1045
- if (!Filter.empty () && FieldsAvailable.test (+EGroupFields::PoolName) && FieldsAvailable.test (+EGroupFields::GroupId)) {
1046
- TVector<TString> filterWords = SplitString (Filter, " " );
1047
- TGroupView groupView;
1048
- for (TGroup* group : GroupView) {
1049
- for (const TString& word : filterWords) {
1050
- if (group->PoolName .Contains (word) || ::ToString (group->GroupId ).Contains (word)) {
1051
- groupView.push_back (group);
1052
- break ;
1028
+ if (!Filter.empty ()) {
1029
+ bool allFieldsPresent =
1030
+ (!FieldsRequired.test (+EGroupFields::GroupId) || FieldsAvailable.test (+EGroupFields::GroupId)) &&
1031
+ (!FieldsRequired.test (+EGroupFields::PoolName) || FieldsAvailable.test (+EGroupFields::PoolName));
1032
+ if (allFieldsPresent) {
1033
+ TVector<TString> filterWords = SplitString (Filter, " " );
1034
+ TGroupView groupView;
1035
+ for (TGroup* group : GroupView) {
1036
+ for (const TString& word : filterWords) {
1037
+ if (FieldsRequired.test (+EGroupFields::GroupId) && ::ToString (group->GroupId ).Contains (word)) {
1038
+ groupView.push_back (group);
1039
+ break ;
1040
+ }
1041
+ if (FieldsRequired.test (+EGroupFields::PoolName) && group->PoolName .Contains (word)) {
1042
+ groupView.push_back (group);
1043
+ break ;
1044
+ }
1053
1045
}
1054
1046
}
1047
+ GroupView.swap (groupView);
1048
+ Filter.clear ();
1049
+ GroupsByGroupId.clear ();
1055
1050
}
1056
- GroupView.swap (groupView);
1057
- Filter.clear ();
1058
- GroupsByGroupId.clear ();
1059
1051
}
1060
1052
if (!FilterGroup.empty () && FieldsAvailable.test (+FilterGroupBy)) {
1061
1053
TGroupView groupView;
@@ -1220,6 +1212,7 @@ class TStorageGroups : public TViewerPipeClient {
1220
1212
bool CollectedHiveData = false ;
1221
1213
1222
1214
void CollectHiveData () {
1215
+ static TPathId badPathId (0 , 0 );
1223
1216
if (!CollectedHiveData) {
1224
1217
if (!GroupView.empty ()) {
1225
1218
ui64 hiveId = AppData ()->DomainsInfo ->GetHive ();
@@ -1232,6 +1225,9 @@ class TStorageGroups : public TViewerPipeClient {
1232
1225
}
1233
1226
for (const TGroup* group : GroupView) {
1234
1227
TPathId pathId (group->SchemeShardId , group->PathId );
1228
+ if (pathId == badPathId) {
1229
+ pathId = {AppData ()->DomainsInfo ->Domain ->SchemeRoot , 1 };
1230
+ }
1235
1231
if (NavigateKeySetResult.count (pathId) == 0 ) {
1236
1232
ui64 cookie = NavigateKeySetResult.size ();
1237
1233
NavigateKeySetResult.emplace (pathId, MakeRequestSchemeCacheNavigate (pathId, cookie));
@@ -1840,12 +1836,7 @@ class TStorageGroups : public TViewerPipeClient {
1840
1836
return ;
1841
1837
}
1842
1838
if (BSGroupStateResponse.count (nodeId) == 0 ) {
1843
- TActorId whiteboardServiceId = MakeNodeWhiteboardServiceId (nodeId);
1844
- BSGroupStateResponse.emplace (nodeId, MakeRequest<TEvWhiteboard::TEvBSGroupStateResponse>(whiteboardServiceId,
1845
- new TEvWhiteboard::TEvBSGroupStateRequest (),
1846
- IEventHandle::FlagTrackDelivery | IEventHandle::FlagSubscribeOnSession,
1847
- nodeId));
1848
- SubscriptionNodeIds.push_back (nodeId);
1839
+ BSGroupStateResponse.emplace (nodeId, MakeWhiteboardRequest (nodeId, new TEvWhiteboard::TEvBSGroupStateRequest ()));
1849
1840
++BSGroupStateRequestsInFlight;
1850
1841
}
1851
1842
}
@@ -1854,22 +1845,13 @@ class TStorageGroups : public TViewerPipeClient {
1854
1845
if (nodeId == 0 ) {
1855
1846
return ;
1856
1847
}
1857
- TActorId whiteboardServiceId = MakeNodeWhiteboardServiceId (nodeId);
1858
1848
if (VDiskStateResponse.count (nodeId) == 0 ) {
1859
- VDiskStateResponse.emplace (nodeId, MakeRequest<TEvWhiteboard::TEvVDiskStateResponse>(whiteboardServiceId,
1860
- new TEvWhiteboard::TEvVDiskStateRequest (),
1861
- IEventHandle::FlagTrackDelivery | IEventHandle::FlagSubscribeOnSession,
1862
- nodeId));
1849
+ VDiskStateResponse.emplace (nodeId, MakeWhiteboardRequest (nodeId, new TEvWhiteboard::TEvVDiskStateRequest ()));
1863
1850
++VDiskStateRequestsInFlight;
1864
- SubscriptionNodeIds.push_back (nodeId);
1865
1851
}
1866
1852
if (PDiskStateResponse.count (nodeId) == 0 ) {
1867
- PDiskStateResponse.emplace (nodeId, MakeRequest<TEvWhiteboard::TEvPDiskStateResponse>(whiteboardServiceId,
1868
- new TEvWhiteboard::TEvPDiskStateRequest (),
1869
- IEventHandle::FlagTrackDelivery | IEventHandle::FlagSubscribeOnSession,
1870
- nodeId));
1853
+ PDiskStateResponse.emplace (nodeId, MakeWhiteboardRequest (nodeId, new TEvWhiteboard::TEvPDiskStateRequest ()));
1871
1854
++PDiskStateRequestsInFlight;
1872
- SubscriptionNodeIds.push_back (nodeId);
1873
1855
}
1874
1856
}
1875
1857
0 commit comments