Skip to content

Commit 8722e4e

Browse files
authored
Merge 29e9e7c into 7ff1c86
2 parents 7ff1c86 + 29e9e7c commit 8722e4e

10 files changed

+222
-82
lines changed

ydb/core/viewer/json/json.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -492,9 +492,7 @@ void TProtoToJson::ProtoToJsonSchema(IOutputStream& to, const TJsonSettings& jso
492492
to << "{\"type\":\"array\",\"items\":";
493493
}
494494
if (fieldDescriptor->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) {
495-
if (fieldDescriptor->message_type()->full_name() == google::protobuf::Timestamp::descriptor()->full_name()) {
496-
to << "{\"type\":\"string\",\"format\":\"date-time\"}";
497-
} else if (fieldDescriptor->message_type()->full_name() == google::protobuf::Duration::descriptor()->full_name()) {
495+
if (fieldDescriptor->message_type()->full_name() == google::protobuf::Duration::descriptor()->full_name()) {
498496
to << "{\"type\":\"string\", \"example\":\"3600s\"}";
499497
} else if (fieldDescriptor->message_type()->full_name() == google::protobuf::BoolValue::descriptor()->full_name()) {
500498
to << "{\"type\":\"boolean\"}";

ydb/core/viewer/json_handlers_viewer.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ void InitViewerWhoAmIJsonHandler(TJsonHandlers& handlers) {
227227
}
228228

229229
void InitViewerQueryJsonHandler(TJsonHandlers& handlers) {
230-
handlers.AddHandler("/viewer/query", new TJsonHandler<TJsonQuery>(TJsonQuery::GetSwagger()), 3);
230+
handlers.AddHandler("/viewer/query", new TJsonHandler<TJsonQuery>(TJsonQuery::GetSwagger()), 4);
231231
}
232232

233233
void InitViewerNetInfoJsonHandler(TJsonHandlers& handlers) {
@@ -243,7 +243,7 @@ void InitViewerHealthCheckJsonHandler(TJsonHandlers& handlers) {
243243
}
244244

245245
void InitViewerNodesJsonHandler(TJsonHandlers& handlers) {
246-
handlers.AddHandler("/viewer/nodes", new TJsonHandler<TJsonNodes>(TJsonNodes::GetSwagger()), 9);
246+
handlers.AddHandler("/viewer/nodes", new TJsonHandler<TJsonNodes>(TJsonNodes::GetSwagger()), 10);
247247
}
248248

249249
void InitViewerACLJsonHandler(TJsonHandlers &jsonHandlers) {

ydb/core/viewer/json_local_rpc.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,10 +128,9 @@ class TJsonLocalRpc : public TViewerPipeClient {
128128
ReplyAndPassAway(GetHTTPBADREQUEST("text/plain", e.what()));
129129
return false;
130130
}
131-
} else {
132-
const auto& params(Event->Get()->Request.GetParams());
133-
Params2Proto(params, request);
134131
}
132+
const auto& params(Event->Get()->Request.GetParams());
133+
Params2Proto(params, request);
135134
if (!ValidateRequest(request)) {
136135
return false;
137136
}

ydb/core/viewer/json_pipe_req.cpp

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include "json_pipe_req.h"
2+
#include <library/cpp/json/json_reader.h>
23
#include <library/cpp/json/json_writer.h>
34

45
namespace NKikimr::NViewer {
@@ -25,7 +26,28 @@ TViewerPipeClient::TViewerPipeClient(IViewer* viewer, NMon::TEvHttpInfo::TPtr& e
2526
: Viewer(viewer)
2627
, Event(ev)
2728
{
28-
InitConfig(Event->Get()->Request.GetParams());
29+
TCgiParameters params = Event->Get()->Request.GetParams();
30+
if (Event->Get()->Request.GetHeader("Content-Type") == "application/json") {
31+
NJson::TJsonValue jsonData;
32+
if (NJson::ReadJsonTree(Event->Get()->Request.GetPostContent(), &jsonData)) {
33+
if (jsonData.IsMap()) {
34+
for (const auto& [key, value] : jsonData.GetMap()) {
35+
switch (value.GetType()) {
36+
case NJson::EJsonValueType::JSON_STRING:
37+
case NJson::EJsonValueType::JSON_INTEGER:
38+
case NJson::EJsonValueType::JSON_UINTEGER:
39+
case NJson::EJsonValueType::JSON_DOUBLE:
40+
case NJson::EJsonValueType::JSON_BOOLEAN:
41+
params.InsertUnescaped(key, value.GetStringRobust());
42+
break;
43+
default:
44+
break;
45+
}
46+
}
47+
}
48+
}
49+
}
50+
InitConfig(params);
2951
NWilson::TTraceId traceId;
3052
TStringBuf traceparent = Event->Get()->Request.GetHeader("traceparent");
3153
if (traceparent) {
@@ -645,10 +667,20 @@ TRequestState TViewerPipeClient::GetRequest() const {
645667
}
646668

647669
void TViewerPipeClient::ReplyAndPassAway(TString data, const TString& error) {
670+
TString message = error;
648671
Send(Event->Sender, new NMon::TEvHttpInfoRes(data, 0, NMon::IEvHttpInfoRes::EContentType::Custom));
672+
if (message.empty()) {
673+
TStringBuf dataParser(data);
674+
if (dataParser.NextTok(' ') == "HTTP/1.1") {
675+
TStringBuf code = dataParser.NextTok(' ');
676+
if (code.size() == 3 && code[0] != '2') {
677+
message = dataParser.NextTok('\n');
678+
}
679+
}
680+
}
649681
if (Span) {
650-
if (error) {
651-
Span.EndError(error);
682+
if (message) {
683+
Span.EndError(message);
652684
} else {
653685
Span.EndOk();
654686
}

ydb/core/viewer/storage_groups.h

Lines changed: 27 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,6 @@ class TStorageGroups : public TViewerPipeClient {
151151
std::unordered_set<TGroupId> FilterGroupIds;
152152
std::unordered_set<TNodeId> FilterNodeIds;
153153
std::unordered_set<ui32> FilterPDiskIds;
154-
std::vector<TNodeId> SubscriptionNodeIds;
155154

156155
enum class EWith {
157156
Everything,
@@ -894,22 +893,6 @@ class TStorageGroups : public TViewerPipeClient {
894893
Schedule(TDuration::MilliSeconds(Timeout), new TEvents::TEvWakeup(TimeoutFinal)); // timeout for the rest
895894
}
896895

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-
913896
void ApplyFilter() {
914897
// database pre-filter, affects TotalGroups count
915898
if (!DatabaseStoragePools.empty()) {
@@ -1042,20 +1025,29 @@ class TStorageGroups : public TViewerPipeClient {
10421025
With = EWith::Everything;
10431026
GroupsByGroupId.clear();
10441027
}
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+
}
10531045
}
10541046
}
1047+
GroupView.swap(groupView);
1048+
Filter.clear();
1049+
GroupsByGroupId.clear();
10551050
}
1056-
GroupView.swap(groupView);
1057-
Filter.clear();
1058-
GroupsByGroupId.clear();
10591051
}
10601052
if (!FilterGroup.empty() && FieldsAvailable.test(+FilterGroupBy)) {
10611053
TGroupView groupView;
@@ -1220,6 +1212,7 @@ class TStorageGroups : public TViewerPipeClient {
12201212
bool CollectedHiveData = false;
12211213

12221214
void CollectHiveData() {
1215+
static TPathId badPathId(0, 0);
12231216
if (!CollectedHiveData) {
12241217
if (!GroupView.empty()) {
12251218
ui64 hiveId = AppData()->DomainsInfo->GetHive();
@@ -1232,6 +1225,9 @@ class TStorageGroups : public TViewerPipeClient {
12321225
}
12331226
for (const TGroup* group : GroupView) {
12341227
TPathId pathId(group->SchemeShardId, group->PathId);
1228+
if (pathId == badPathId) {
1229+
pathId = {AppData()->DomainsInfo->Domain->SchemeRoot, 1};
1230+
}
12351231
if (NavigateKeySetResult.count(pathId) == 0) {
12361232
ui64 cookie = NavigateKeySetResult.size();
12371233
NavigateKeySetResult.emplace(pathId, MakeRequestSchemeCacheNavigate(pathId, cookie));
@@ -1840,12 +1836,7 @@ class TStorageGroups : public TViewerPipeClient {
18401836
return;
18411837
}
18421838
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()));
18491840
++BSGroupStateRequestsInFlight;
18501841
}
18511842
}
@@ -1854,22 +1845,13 @@ class TStorageGroups : public TViewerPipeClient {
18541845
if (nodeId == 0) {
18551846
return;
18561847
}
1857-
TActorId whiteboardServiceId = MakeNodeWhiteboardServiceId(nodeId);
18581848
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()));
18631850
++VDiskStateRequestsInFlight;
1864-
SubscriptionNodeIds.push_back(nodeId);
18651851
}
18661852
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()));
18711854
++PDiskStateRequestsInFlight;
1872-
SubscriptionNodeIds.push_back(nodeId);
18731855
}
18741856
}
18751857

ydb/core/viewer/viewer_autocomplete.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,6 @@ class TJsonAutocomplete : public TViewerPipeClient {
138138
TRequestResponse<TEvTxProxySchemeCache::TEvNavigateKeySetResult> MakeRequestSchemeCacheNavigate() {
139139
auto request = std::make_unique<NSchemeCache::TSchemeCacheNavigate>();
140140
for (const TString& path : Paths) {
141-
Cerr << "Looking into " << path << Endl;
142141
NSchemeCache::TSchemeCacheNavigate::TEntry entry;
143142
entry.Operation = NSchemeCache::TSchemeCacheNavigate::OpList;
144143
entry.SyncVersion = false;

0 commit comments

Comments
 (0)