Skip to content

Commit 885de47

Browse files
authored
Merge critical viewer fixes stable 25-1-2 (#20054)
2 parents 7767675 + b84b02f commit 885de47

File tree

6 files changed

+93
-105
lines changed

6 files changed

+93
-105
lines changed

ydb/core/tablet/node_whiteboard.cpp

Lines changed: 32 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -772,72 +772,59 @@ class TNodeWhiteboardService : public TActorBootstrapped<TNodeWhiteboardService>
772772
}
773773
}
774774

775-
void UpdateSystemState(const TActorContext &ctx) {
775+
void UpdateSystemState() {
776776
NKikimrWhiteboard::EFlag eFlag = NKikimrWhiteboard::EFlag::Green;
777-
NKikimrWhiteboard::EFlag pDiskFlag = NKikimrWhiteboard::EFlag::Green;
778-
ui32 yellowFlags = 0;
777+
ui32 badDisks = 0;
779778
double maxDiskUsage = 0;
780779
for (const auto& pr : PDiskStateInfo) {
781-
if (!pr.second.HasState()) {
782-
pDiskFlag = std::max(pDiskFlag, NKikimrWhiteboard::EFlag::Yellow);
783-
++yellowFlags;
784-
} else {
780+
if (pr.second.HasState()) {
785781
switch (pr.second.GetState()) {
786782
case NKikimrBlobStorage::TPDiskState::InitialFormatReadError:
787783
case NKikimrBlobStorage::TPDiskState::InitialSysLogReadError:
788784
case NKikimrBlobStorage::TPDiskState::InitialSysLogParseError:
789785
case NKikimrBlobStorage::TPDiskState::InitialCommonLogReadError:
790786
case NKikimrBlobStorage::TPDiskState::InitialCommonLogParseError:
791787
case NKikimrBlobStorage::TPDiskState::CommonLoggerInitError:
792-
pDiskFlag = std::max(pDiskFlag, NKikimrWhiteboard::EFlag::Red);
793-
break;
794788
case NKikimrBlobStorage::TPDiskState::OpenFileError:
795-
pDiskFlag = std::max(pDiskFlag, NKikimrWhiteboard::EFlag::Yellow);
796-
++yellowFlags;
789+
eFlag = std::max(eFlag, NKikimrWhiteboard::EFlag::Yellow);
790+
++badDisks;
797791
break;
798792
default:
799793
break;
800794
}
801795
}
802796
if (pr.second.HasAvailableSize() && pr.second.GetTotalSize() != 0) {
803797
double avail = (double)pr.second.GetAvailableSize() / pr.second.GetTotalSize();
804-
if (avail <= 0.06) {
805-
pDiskFlag = std::max(pDiskFlag, NKikimrWhiteboard::EFlag::Red);
798+
if (avail <= 0.04) {
799+
eFlag = std::max(eFlag, NKikimrWhiteboard::EFlag::Orange);
806800
} 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;
801+
eFlag = std::max(eFlag, NKikimrWhiteboard::EFlag::Yellow);
811802
}
812803
maxDiskUsage = std::max(maxDiskUsage, 1.0 - avail);
813804
}
814805
}
815806
if (PDiskStateInfo.size() > 0) {
816807
SystemStateInfo.SetMaxDiskUsage(maxDiskUsage);
817808
}
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-
}
809+
if (eFlag == NKikimrWhiteboard::EFlag::Yellow && badDisks > 1) {
810+
eFlag = NKikimrWhiteboard::EFlag::Orange;
829811
}
830-
eFlag = std::max(eFlag, pDiskFlag);
831812
for (const auto& pr : VDiskStateInfo) {
832813
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());
814+
if (pr.second.GetDiskSpace() >= NKikimrWhiteboard::EFlag::Red) {
815+
eFlag = std::max(eFlag, NKikimrWhiteboard::EFlag::Orange);
816+
} else if (pr.second.GetDiskSpace() > NKikimrWhiteboard::EFlag::Green) {
817+
eFlag = std::max(eFlag, NKikimrWhiteboard::EFlag::Yellow);
818+
}
819+
if (pr.second.GetSatisfactionRank().GetFreshRank().GetFlag() > NKikimrWhiteboard::EFlag::Green) {
820+
eFlag = std::max(eFlag, NKikimrWhiteboard::EFlag::Yellow);
821+
}
822+
if (pr.second.GetSatisfactionRank().GetLevelRank().GetFlag() > NKikimrWhiteboard::EFlag::Green) {
823+
eFlag = std::max(eFlag, NKikimrWhiteboard::EFlag::Yellow);
824+
}
838825
}
839826
if (SystemStateInfo.HasGRpcState()) {
840-
eFlag = std::max(eFlag, SystemStateInfo.GetGRpcState());
827+
eFlag = std::max(eFlag, std::max(SystemStateInfo.GetGRpcState(), NKikimrWhiteboard::EFlag::Orange));
841828
}
842829
for (const auto& stats : SystemStateInfo.GetPoolStats()) {
843830
double usage = stats.GetUsage();
@@ -851,11 +838,18 @@ class TNodeWhiteboardService : public TActorBootstrapped<TNodeWhiteboardService>
851838
} else {
852839
flag = NKikimrWhiteboard::EFlag::Green;
853840
}
854-
eFlag = Max(eFlag, flag);
841+
if (stats.GetName() == "User") {
842+
flag = std::min(flag, NKikimrWhiteboard::EFlag::Orange);
843+
} else if (stats.GetName() == "IO") {
844+
flag = std::min(flag, NKikimrWhiteboard::EFlag::Yellow);
845+
} else if (stats.GetName() == "Batch") {
846+
flag = std::min(flag, NKikimrWhiteboard::EFlag::Green);
847+
}
848+
eFlag = std::max(eFlag, flag);
855849
}
856850
if (!SystemStateInfo.HasSystemState() || SystemStateInfo.GetSystemState() != eFlag) {
857851
SystemStateInfo.SetSystemState(eFlag);
858-
SystemStateInfo.SetChangeTime(ctx.Now().MilliSeconds());
852+
SystemStateInfo.SetChangeTime(TActivationContext::Now().MilliSeconds());
859853
}
860854
}
861855

@@ -1163,7 +1157,7 @@ class TNodeWhiteboardService : public TActorBootstrapped<TNodeWhiteboardService>
11631157
threadInfo->MutableStates()->emplace(state.first, state.second);
11641158
}
11651159
}
1166-
UpdateSystemState(ctx);
1160+
UpdateSystemState();
11671161
ctx.Schedule(UPDATE_PERIOD, new TEvPrivate::TEvUpdateRuntimeStats());
11681162
}
11691163

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) {

ydb/core/viewer/storage_groups.h

Lines changed: 32 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -623,7 +623,8 @@ class TStorageGroups : public TViewerPipeClient {
623623
std::unordered_map<TVSlotId, const NKikimrWhiteboard::TVDiskStateInfo*> VDisksByVSlotId;
624624
std::unordered_map<TPDiskId, const NKikimrWhiteboard::TPDiskStateInfo*> PDisksByPDiskId;
625625

626-
TFieldsType FieldsRequired;
626+
TFieldsType FieldsRequested; // fields that were requested by user
627+
TFieldsType FieldsRequired; // fields that are required to calculate the response
627628
TFieldsType FieldsAvailable;
628629
const TFieldsType FieldsAll = TFieldsType().set();
629630
const TFieldsType FieldsBsGroups = TFieldsType().set(+EGroupFields::GroupId)
@@ -847,6 +848,7 @@ class TStorageGroups : public TViewerPipeClient {
847848
NeedSort = false;
848849
NeedLimit = false;
849850
}
851+
FieldsRequested = FieldsRequired; // no dependent fields
850852
for (auto field = +EGroupFields::GroupId; field != +EGroupFields::COUNT; ++field) {
851853
if (FieldsRequired.test(field)) {
852854
auto itDependentFields = DependentFields.find(static_cast<EGroupFields>(field));
@@ -2079,69 +2081,71 @@ class TStorageGroups : public TViewerPipeClient {
20792081
if (group->GroupGeneration) {
20802082
jsonGroup.SetGroupGeneration(group->GroupGeneration);
20812083
}
2082-
if (FieldsAvailable.test(+EGroupFields::PoolName)) {
2084+
if (FieldsAvailable.test(+EGroupFields::PoolName) && FieldsRequested.test(+EGroupFields::PoolName)) {
20832085
jsonGroup.SetPoolName(group->PoolName);
20842086
}
2085-
std::vector<const TVDisk*> vdisks;
2086-
vdisks.resize(group->VDisks.size());
2087-
for (size_t idx = 0; idx < group->VDisks.size(); ++idx) {
2088-
vdisks[idx] = &group->VDisks[idx];
2089-
}
2090-
std::sort(vdisks.begin(), vdisks.end(), [](const TVDisk* a, const TVDisk* b) {
2091-
return a->VDiskId < b->VDiskId;
2092-
});
2093-
for (const TVDisk* vdisk : vdisks) {
2094-
RenderVDisk(*jsonGroup.AddVDisks(), *vdisk);
2087+
if (FieldsRequested.test(+EGroupFields::VDisk)) {
2088+
std::vector<const TVDisk*> vdisks;
2089+
vdisks.resize(group->VDisks.size());
2090+
for (size_t idx = 0; idx < group->VDisks.size(); ++idx) {
2091+
vdisks[idx] = &group->VDisks[idx];
2092+
}
2093+
std::sort(vdisks.begin(), vdisks.end(), [](const TVDisk* a, const TVDisk* b) {
2094+
return a->VDiskId < b->VDiskId;
2095+
});
2096+
for (const TVDisk* vdisk : vdisks) {
2097+
RenderVDisk(*jsonGroup.AddVDisks(), *vdisk);
2098+
}
20952099
}
2096-
if (FieldsAvailable.test(+EGroupFields::Encryption)) {
2100+
if (FieldsAvailable.test(+EGroupFields::Encryption) && FieldsRequested.test(+EGroupFields::Encryption)) {
20972101
jsonGroup.SetEncryption(group->EncryptionMode);
20982102
}
20992103
if (group->Overall != NKikimrViewer::Grey) {
21002104
jsonGroup.SetOverall(group->Overall);
21012105
}
2102-
if (group->DiskSpace != NKikimrViewer::Grey) {
2106+
if (group->DiskSpace != NKikimrViewer::Grey && FieldsRequested.test(+EGroupFields::Usage)) {
21032107
jsonGroup.SetDiskSpace(group->DiskSpace);
21042108
}
2105-
if (FieldsAvailable.test(+EGroupFields::Kind)) {
2109+
if (FieldsAvailable.test(+EGroupFields::Kind) && FieldsRequested.test(+EGroupFields::Kind)) {
21062110
jsonGroup.SetKind(group->Kind);
21072111
}
2108-
if (FieldsAvailable.test(+EGroupFields::MediaType)) {
2112+
if (FieldsAvailable.test(+EGroupFields::MediaType) && FieldsRequested.test(+EGroupFields::MediaType)) {
21092113
jsonGroup.SetMediaType(group->MediaType);
21102114
}
2111-
if (FieldsAvailable.test(+EGroupFields::Erasure)) {
2115+
if (FieldsAvailable.test(+EGroupFields::Erasure) && FieldsRequested.test(+EGroupFields::Erasure)) {
21122116
jsonGroup.SetErasureSpecies(group->Erasure);
21132117
}
2114-
if (FieldsAvailable.test(+EGroupFields::AllocationUnits)) {
2118+
if (FieldsAvailable.test(+EGroupFields::AllocationUnits) && FieldsRequested.test(+EGroupFields::AllocationUnits)) {
21152119
jsonGroup.SetAllocationUnits(group->AllocationUnits);
21162120
}
2117-
if (FieldsAvailable.test(+EGroupFields::State)) {
2121+
if (FieldsAvailable.test(+EGroupFields::State) && FieldsRequested.test(+EGroupFields::State)) {
21182122
jsonGroup.SetState(group->State);
21192123
}
2120-
if (FieldsAvailable.test(+EGroupFields::MissingDisks)) {
2124+
if (FieldsAvailable.test(+EGroupFields::MissingDisks) && FieldsRequested.test(+EGroupFields::MissingDisks)) {
21212125
jsonGroup.SetMissingDisks(group->MissingDisks);
21222126
}
2123-
if (FieldsAvailable.test(+EGroupFields::Used)) {
2127+
if (FieldsAvailable.test(+EGroupFields::Used) && FieldsRequested.test(+EGroupFields::Used)) {
21242128
jsonGroup.SetUsed(group->Used);
21252129
}
2126-
if (FieldsAvailable.test(+EGroupFields::Limit)) {
2130+
if (FieldsAvailable.test(+EGroupFields::Limit) && FieldsRequested.test(+EGroupFields::Limit)) {
21272131
jsonGroup.SetLimit(group->Limit);
21282132
}
2129-
if (FieldsAvailable.test(+EGroupFields::Read)) {
2133+
if (FieldsAvailable.test(+EGroupFields::Read) && FieldsRequested.test(+EGroupFields::Read)) {
21302134
jsonGroup.SetRead(group->Read);
21312135
}
2132-
if (FieldsAvailable.test(+EGroupFields::Write)) {
2136+
if (FieldsAvailable.test(+EGroupFields::Write) && FieldsRequested.test(+EGroupFields::Write)) {
21332137
jsonGroup.SetWrite(group->Write);
21342138
}
2135-
if (FieldsAvailable.test(+EGroupFields::Usage)) {
2139+
if (FieldsAvailable.test(+EGroupFields::Usage) && FieldsRequested.test(+EGroupFields::Usage)) {
21362140
jsonGroup.SetUsage(group->Usage);
21372141
}
2138-
if (FieldsAvailable.test(+EGroupFields::Available)) {
2142+
if (FieldsAvailable.test(+EGroupFields::Available) && FieldsRequested.test(+EGroupFields::Available)) {
21392143
jsonGroup.SetAvailable(group->Available);
21402144
}
2141-
if (FieldsAvailable.test(+EGroupFields::DiskSpaceUsage)) {
2145+
if (FieldsAvailable.test(+EGroupFields::DiskSpaceUsage) && FieldsRequested.test(+EGroupFields::DiskSpaceUsage)) {
21422146
jsonGroup.SetDiskSpaceUsage(group->DiskSpaceUsage);
21432147
}
2144-
if (FieldsAvailable.test(+EGroupFields::Latency)) {
2148+
if (FieldsAvailable.test(+EGroupFields::Latency) && FieldsRequested.test(+EGroupFields::Latency)) {
21452149
jsonGroup.SetLatencyPutTabletLog(group->PutTabletLogLatency);
21462150
jsonGroup.SetLatencyPutUserData(group->PutUserDataLatency);
21472151
jsonGroup.SetLatencyGetFast(group->GetFastLatency);

ydb/core/viewer/tests/canondata/result.json

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,6 @@
33
"status_code": 200,
44
"text": "1\n"
55
},
6-
"test.test_operations_list": {
7-
"next_page_token": "0",
8-
"status": "SUCCESS"
9-
},
10-
"test.test_operations_list_page": {
11-
"next_page_token": "0",
12-
"status": "SUCCESS"
13-
},
14-
"test.test_operations_list_page_bad": {
15-
"status_code": 400,
16-
"text": "offset must be a multiple of limit"
17-
},
186
"test.test_pqrb_tablet": {
197
"response_create_topic": {
208
"version": "not-zero-number"

0 commit comments

Comments
 (0)