Skip to content

Commit 4036f48

Browse files
authored
Merge viewer fixes Jun 23th (#20053)
2 parents 5bf1ff7 + 0b13f42 commit 4036f48

27 files changed

+3551
-1765
lines changed

ydb/core/driver_lib/run/run.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1829,6 +1829,17 @@ void TKikimrRunner::KikimrStart() {
18291829
endpoint += Sprintf(":%d", server.second->GetPort());
18301830
ActorSystem->Send(NNodeWhiteboard::MakeNodeWhiteboardServiceId(ActorSystem->NodeId),
18311831
new NNodeWhiteboard::TEvWhiteboard::TEvSystemStateAddEndpoint(server.first, endpoint));
1832+
if (ProcessMemoryInfoProvider) {
1833+
auto memInfo = ProcessMemoryInfoProvider->Get();
1834+
NKikimrWhiteboard::TSystemStateInfo systemStateInfo;
1835+
if (memInfo.CGroupLimit) {
1836+
systemStateInfo.SetMemoryLimit(*memInfo.CGroupLimit);
1837+
} else if (memInfo.MemTotal) {
1838+
systemStateInfo.SetMemoryLimit(*memInfo.MemTotal);
1839+
}
1840+
ActorSystem->Send(NNodeWhiteboard::MakeNodeWhiteboardServiceId(ActorSystem->NodeId),
1841+
new NNodeWhiteboard::TEvWhiteboard::TEvSystemStateUpdate(systemStateInfo));
1842+
}
18321843
}
18331844
}
18341845

ydb/core/grpc_services/db_metadata_cache.h

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class TDatabaseMetadataCache : public TActorBootstrapped<TDatabaseMetadataCache>
4444
ui32 ActiveNode;
4545
std::optional<Ydb::Monitoring::SelfCheckResult> Result;
4646
TInstant LastResultUpdate;
47-
std::vector<TActorId> Clients;
47+
std::vector<NHealthCheck::TEvSelfCheckRequestProto::TPtr> Requests;
4848
TBoardInfoEntries BoardInfo;
4949
TActorId PublishActor;
5050
TActorId SubscribeActor;
@@ -66,10 +66,10 @@ class TDatabaseMetadataCache : public TActorBootstrapped<TDatabaseMetadataCache>
6666
Counters->GetCounter(HEALTHCHECK_REQUESTS_MADE_COUNTER, true)->Inc();
6767
}
6868

69-
void Reply(TActorId client) {
69+
void Reply(NHealthCheck::TEvSelfCheckRequestProto::TPtr& request) {
7070
auto response = std::make_unique<NHealthCheck::TEvSelfCheckResultProto>();
7171
response->Record = *Result;
72-
Send(client, response.release());
72+
Send(request->Sender, response.release(), 0, request->Cookie);
7373
Counters->GetCounter(HEALTHCHECK_REQUESTS_ANSWERED_COUNTER, true)->Inc();
7474
}
7575

@@ -125,22 +125,22 @@ class TDatabaseMetadataCache : public TActorBootstrapped<TDatabaseMetadataCache>
125125
RequestInProgress = false;
126126
Result = ev->Get()->Result;
127127
LastResultUpdate = TActivationContext::Now();
128-
for (const auto& client : Clients) {
129-
Reply(client);
128+
for (auto& request : Requests) {
129+
Reply(request);
130130
}
131-
Clients.clear();
131+
Requests.clear();
132132
}
133133

134134
void Handle(NHealthCheck::TEvSelfCheckRequestProto::TPtr& ev) {
135135
LOG_DEBUG_S(TActivationContext::AsActorContext(), NKikimrServices::DB_METADATA_CACHE, "Got request");
136136
TInstant now = TActivationContext::Now();
137137
if (Result && now - LastResultUpdate <= 2 * RefreshPeriod) {
138138
LOG_DEBUG_S(TActivationContext::AsActorContext(), NKikimrServices::DB_METADATA_CACHE, "Replying now");
139-
Reply(ev->Sender);
139+
Reply(ev);
140140
} else {
141141
LOG_DEBUG_S(TActivationContext::AsActorContext(), NKikimrServices::DB_METADATA_CACHE, "Answer not ready, waiting");
142142
SendRequest();
143-
Clients.push_back(ev->Sender);
143+
Requests.emplace_back(std::move(ev));
144144
}
145145
}
146146

ydb/core/kqp/opt/kqp_query_plan.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ class TxPlanSerializer {
347347

348348
for (const auto& [key, value] : planNode.NodeInfo) {
349349
writer.WriteKey(key);
350-
writer.WriteJsonValue(&value, true);
350+
writer.WriteJsonValue(&value, true, PREC_NDIGITS, 17);
351351
}
352352

353353
if (!planNode.Operators.empty()) {
@@ -358,7 +358,7 @@ class TxPlanSerializer {
358358
writer.BeginObject();
359359
for (const auto& [key, value] : op.Properties) {
360360
writer.WriteKey(key);
361-
writer.WriteJsonValue(&value, true);
361+
writer.WriteJsonValue(&value, true, PREC_NDIGITS, 17);
362362
}
363363

364364
writer.WriteKey("Inputs");
@@ -2617,7 +2617,7 @@ TString SerializeTxPlans(const TVector<const TString>& txPlans, TIntrusivePtr<NO
26172617
NJson::ReadJsonTree(commonPlanInfo, &commonPlanJson, true);
26182618

26192619
writer.WriteKey("tables");
2620-
writer.WriteJsonValue(&commonPlanJson);
2620+
writer.WriteJsonValue(&commonPlanJson, false, PREC_NDIGITS, 17);
26212621
}
26222622

26232623
writer.WriteKey("Plan");
@@ -2630,7 +2630,7 @@ TString SerializeTxPlans(const TVector<const TString>& txPlans, TIntrusivePtr<NO
26302630
NJson::ReadJsonTree(queryStats, &queryStatsJson, true);
26312631

26322632
writer.WriteKey("Stats");
2633-
writer.WriteJsonValue(&queryStatsJson);
2633+
writer.WriteJsonValue(&queryStatsJson, false, PREC_NDIGITS, 17);
26342634
}
26352635

26362636
writer.WriteKey("Plans");
@@ -2653,7 +2653,7 @@ TString SerializeTxPlans(const TVector<const TString>& txPlans, TIntrusivePtr<NO
26532653

26542654
for (auto& subplan : txPlanJson.GetMapSafe().at("Plans").GetArraySafe()) {
26552655
ModifyPlan(subplan, removeStageGuid);
2656-
writer.WriteJsonValue(&subplan, true);
2656+
writer.WriteJsonValue(&subplan, true, PREC_NDIGITS, 17);
26572657
}
26582658
}
26592659

@@ -3175,7 +3175,7 @@ TString AddExecStatsToTxPlan(const TString& txPlanJson, const NYql::NDqProto::TD
31753175
ModifyPlan(root, addStatsToPlanNode);
31763176

31773177
NJsonWriter::TBuf txWriter;
3178-
txWriter.WriteJsonValue(&root, true);
3178+
txWriter.WriteJsonValue(&root, true, PREC_NDIGITS, 17);
31793179
auto resultPlan = txWriter.Str();
31803180
return AddSimplifiedPlan(resultPlan, optCtx, true);
31813181
}
@@ -3243,14 +3243,14 @@ TString SerializeScriptPlan(const TVector<const TString>& queryPlans) {
32433243
writer.BeginObject();
32443244
if (auto tableAccesses = planMap.FindPtr("tables")) {
32453245
writer.WriteKey("tables");
3246-
writer.WriteJsonValue(tableAccesses);
3246+
writer.WriteJsonValue(tableAccesses, false, PREC_NDIGITS, 17);
32473247
}
32483248
if (auto dqPlan = planMap.FindPtr("Plan")) {
32493249
writer.WriteKey("Plan");
3250-
writer.WriteJsonValue(dqPlan);
3250+
writer.WriteJsonValue(dqPlan, false, PREC_NDIGITS, 17);
32513251
writer.WriteKey("SimplifiedPlan");
32523252
auto simplifiedPlan = SimplifyQueryPlan(*dqPlan);
3253-
writer.WriteJsonValue(&simplifiedPlan);
3253+
writer.WriteJsonValue(&simplifiedPlan, false, PREC_NDIGITS, 17);
32543254
}
32553255
writer.EndObject();
32563256
}

ydb/core/kqp/proxy_service/kqp_script_executions.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2280,7 +2280,7 @@ class TSaveScriptExternalEffectActor : public TQueryBase {
22802280
}
22812281

22822282
NJsonWriter::TBuf serializedSinks;
2283-
serializedSinks.WriteJsonValue(&value);
2283+
serializedSinks.WriteJsonValue(&value, false, PREC_NDIGITS, 17);
22842284

22852285
return serializedSinks.Str();
22862286
}
@@ -2296,7 +2296,7 @@ class TSaveScriptExternalEffectActor : public TQueryBase {
22962296
}
22972297

22982298
NJsonWriter::TBuf serializedSecretNames;
2299-
serializedSecretNames.WriteJsonValue(&value);
2299+
serializedSecretNames.WriteJsonValue(&value, false, PREC_NDIGITS, 17);
23002300

23012301
return serializedSecretNames.Str();
23022302
}
@@ -2515,7 +2515,14 @@ class TSaveScriptFinalStatusActor : public TQueryBase {
25152515
Ydb::TableStats::QueryStats queryStats;
25162516
NGRpcService::FillQueryStats(queryStats, *Request.QueryStats);
25172517
NProtobufJson::Proto2Json(queryStats, statsJson, NProtobufJson::TProto2JsonConfig());
2518-
serializedStats = NJson::WriteJson(statsJson);
2518+
TStringStream statsStream;
2519+
NJson::WriteJson(&statsStream, &statsJson, {
2520+
.DoubleNDigits = 17,
2521+
.FloatToStringMode = PREC_NDIGITS,
2522+
.ValidateUtf8 = false,
2523+
.WriteNanAsString = true,
2524+
});
2525+
serializedStats = statsStream.Str();
25192526
}
25202527

25212528
std::optional<TString> ast;

ydb/core/tablet/node_whiteboard.cpp

Lines changed: 32 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -706,11 +706,6 @@ class TNodeWhiteboardService : public TActorBootstrapped<TNodeWhiteboardService>
706706
} else {
707707
SystemStateInfo.ClearMemoryUsed();
708708
}
709-
if (memoryStats.HasHardLimit()) {
710-
SystemStateInfo.SetMemoryLimit(memoryStats.GetHardLimit());
711-
} else {
712-
SystemStateInfo.ClearMemoryLimit();
713-
}
714709
if (memoryStats.HasAllocatedMemory()) {
715710
SystemStateInfo.SetMemoryUsedInAlloc(memoryStats.GetAllocatedMemory());
716711
} else {
@@ -772,72 +767,59 @@ class TNodeWhiteboardService : public TActorBootstrapped<TNodeWhiteboardService>
772767
}
773768
}
774769

775-
void UpdateSystemState(const TActorContext &ctx) {
770+
void UpdateSystemState() {
776771
NKikimrWhiteboard::EFlag eFlag = NKikimrWhiteboard::EFlag::Green;
777-
NKikimrWhiteboard::EFlag pDiskFlag = NKikimrWhiteboard::EFlag::Green;
778-
ui32 yellowFlags = 0;
772+
ui32 badDisks = 0;
779773
double maxDiskUsage = 0;
780774
for (const auto& pr : PDiskStateInfo) {
781-
if (!pr.second.HasState()) {
782-
pDiskFlag = std::max(pDiskFlag, NKikimrWhiteboard::EFlag::Yellow);
783-
++yellowFlags;
784-
} else {
775+
if (pr.second.HasState()) {
785776
switch (pr.second.GetState()) {
786777
case NKikimrBlobStorage::TPDiskState::InitialFormatReadError:
787778
case NKikimrBlobStorage::TPDiskState::InitialSysLogReadError:
788779
case NKikimrBlobStorage::TPDiskState::InitialSysLogParseError:
789780
case NKikimrBlobStorage::TPDiskState::InitialCommonLogReadError:
790781
case NKikimrBlobStorage::TPDiskState::InitialCommonLogParseError:
791782
case NKikimrBlobStorage::TPDiskState::CommonLoggerInitError:
792-
pDiskFlag = std::max(pDiskFlag, NKikimrWhiteboard::EFlag::Red);
793-
break;
794783
case NKikimrBlobStorage::TPDiskState::OpenFileError:
795-
pDiskFlag = std::max(pDiskFlag, NKikimrWhiteboard::EFlag::Yellow);
796-
++yellowFlags;
784+
eFlag = std::max(eFlag, NKikimrWhiteboard::EFlag::Yellow);
785+
++badDisks;
797786
break;
798787
default:
799788
break;
800789
}
801790
}
802791
if (pr.second.HasAvailableSize() && pr.second.GetTotalSize() != 0) {
803792
double avail = (double)pr.second.GetAvailableSize() / pr.second.GetTotalSize();
804-
if (avail <= 0.06) {
805-
pDiskFlag = std::max(pDiskFlag, NKikimrWhiteboard::EFlag::Red);
793+
if (avail <= 0.04) {
794+
eFlag = std::max(eFlag, NKikimrWhiteboard::EFlag::Orange);
806795
} else if (avail <= 0.08) {
807-
pDiskFlag = std::max(pDiskFlag, NKikimrWhiteboard::EFlag::Orange);
808-
} else if (avail <= 0.15) {
809-
pDiskFlag = std::max(pDiskFlag, NKikimrWhiteboard::EFlag::Yellow);
810-
++yellowFlags;
796+
eFlag = std::max(eFlag, NKikimrWhiteboard::EFlag::Yellow);
811797
}
812798
maxDiskUsage = std::max(maxDiskUsage, 1.0 - avail);
813799
}
814800
}
815801
if (PDiskStateInfo.size() > 0) {
816802
SystemStateInfo.SetMaxDiskUsage(maxDiskUsage);
817803
}
818-
if (pDiskFlag == NKikimrWhiteboard::EFlag::Yellow) {
819-
switch (yellowFlags) {
820-
case 1:
821-
break;
822-
case 2:
823-
pDiskFlag = NKikimrWhiteboard::EFlag::Orange;
824-
break;
825-
case 3:
826-
pDiskFlag = NKikimrWhiteboard::EFlag::Red;
827-
break;
828-
}
804+
if (eFlag == NKikimrWhiteboard::EFlag::Yellow && badDisks > 1) {
805+
eFlag = NKikimrWhiteboard::EFlag::Orange;
829806
}
830-
eFlag = std::max(eFlag, pDiskFlag);
831807
for (const auto& pr : VDiskStateInfo) {
832808
eFlag = std::max(eFlag, pr.second.GetDiskSpace());
833-
eFlag = std::max(eFlag, pr.second.GetSatisfactionRank().GetFreshRank().GetFlag());
834-
eFlag = std::max(eFlag, pr.second.GetSatisfactionRank().GetLevelRank().GetFlag());
835-
}
836-
if (SystemStateInfo.HasMessageBusState()) {
837-
eFlag = std::max(eFlag, SystemStateInfo.GetMessageBusState());
809+
if (pr.second.GetDiskSpace() >= NKikimrWhiteboard::EFlag::Red) {
810+
eFlag = std::max(eFlag, NKikimrWhiteboard::EFlag::Orange);
811+
} else if (pr.second.GetDiskSpace() > NKikimrWhiteboard::EFlag::Green) {
812+
eFlag = std::max(eFlag, NKikimrWhiteboard::EFlag::Yellow);
813+
}
814+
if (pr.second.GetSatisfactionRank().GetFreshRank().GetFlag() > NKikimrWhiteboard::EFlag::Green) {
815+
eFlag = std::max(eFlag, NKikimrWhiteboard::EFlag::Yellow);
816+
}
817+
if (pr.second.GetSatisfactionRank().GetLevelRank().GetFlag() > NKikimrWhiteboard::EFlag::Green) {
818+
eFlag = std::max(eFlag, NKikimrWhiteboard::EFlag::Yellow);
819+
}
838820
}
839821
if (SystemStateInfo.HasGRpcState()) {
840-
eFlag = std::max(eFlag, SystemStateInfo.GetGRpcState());
822+
eFlag = std::max(eFlag, std::max(SystemStateInfo.GetGRpcState(), NKikimrWhiteboard::EFlag::Orange));
841823
}
842824
for (const auto& stats : SystemStateInfo.GetPoolStats()) {
843825
double usage = stats.GetUsage();
@@ -851,11 +833,18 @@ class TNodeWhiteboardService : public TActorBootstrapped<TNodeWhiteboardService>
851833
} else {
852834
flag = NKikimrWhiteboard::EFlag::Green;
853835
}
854-
eFlag = Max(eFlag, flag);
836+
if (stats.GetName() == "User") {
837+
flag = std::min(flag, NKikimrWhiteboard::EFlag::Orange);
838+
} else if (stats.GetName() == "IO") {
839+
flag = std::min(flag, NKikimrWhiteboard::EFlag::Yellow);
840+
} else if (stats.GetName() == "Batch") {
841+
flag = std::min(flag, NKikimrWhiteboard::EFlag::Green);
842+
}
843+
eFlag = std::max(eFlag, flag);
855844
}
856845
if (!SystemStateInfo.HasSystemState() || SystemStateInfo.GetSystemState() != eFlag) {
857846
SystemStateInfo.SetSystemState(eFlag);
858-
SystemStateInfo.SetChangeTime(ctx.Now().MilliSeconds());
847+
SystemStateInfo.SetChangeTime(TActivationContext::Now().MilliSeconds());
859848
}
860849
}
861850

@@ -1163,7 +1152,7 @@ class TNodeWhiteboardService : public TActorBootstrapped<TNodeWhiteboardService>
11631152
threadInfo->MutableStates()->emplace(state.first, state.second);
11641153
}
11651154
}
1166-
UpdateSystemState(ctx);
1155+
UpdateSystemState();
11671156
ctx.Schedule(UPDATE_PERIOD, new TEvPrivate::TEvUpdateRuntimeStats());
11681157
}
11691158

ydb/core/viewer/json_handlers_storage.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
namespace NKikimr::NViewer {
55

66
void InitStorageGroupsJsonHandler(TJsonHandlers& jsonHandlers) {
7-
jsonHandlers.AddHandler("/storage/groups", new TJsonHandler<TStorageGroups>(TStorageGroups::GetSwagger()), 6);
7+
jsonHandlers.AddHandler("/storage/groups", new TJsonHandler<TStorageGroups>(TStorageGroups::GetSwagger()), 7);
88
}
99

1010
void InitStorageJsonHandlers(TJsonHandlers& jsonHandlers) {

ydb/core/viewer/json_handlers_viewer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ void InitViewerHealthCheckJsonHandler(TJsonHandlers& handlers) {
256256
}
257257

258258
void InitViewerNodesJsonHandler(TJsonHandlers& handlers) {
259-
handlers.AddHandler("/viewer/nodes", new TJsonHandler<TJsonNodes>(TJsonNodes::GetSwagger()), 15);
259+
handlers.AddHandler("/viewer/nodes", new TJsonHandler<TJsonNodes>(TJsonNodes::GetSwagger()), 16);
260260
}
261261

262262
void InitViewerACLJsonHandler(TJsonHandlers &jsonHandlers) {

0 commit comments

Comments
 (0)