1
1
#include " sys_view.h"
2
2
#include " group_geometry_info.h"
3
3
#include " storage_stats_calculator.h"
4
+ #include " group_layout_checker.h"
4
5
5
6
#include < ydb/core/base/feature_flags.h>
6
7
#include < ydb/core/blobstorage/base/utility.h>
@@ -519,6 +520,7 @@ void TBlobStorageController::UpdateSystemViews() {
519
520
520
521
const NKikimrBlobStorage::TVDiskMetrics zero;
521
522
std::vector<TGroupDiskInfo> disks;
523
+ std::vector<TPDiskId> pdiskIds;
522
524
for (const auto & realm : group.GetRings ()) {
523
525
for (const auto & domain : realm.GetFailDomains ()) {
524
526
for (const auto & location : domain.GetVDiskLocations ()) {
@@ -534,10 +536,28 @@ void TBlobStorageController::UpdateSystemViews() {
534
536
if (disk.VDiskMetrics && disk.PDiskMetrics ) {
535
537
disks.push_back (std::move (disk));
536
538
}
539
+ pdiskIds.emplace_back (location.GetNodeID (), location.GetPDiskID ());
537
540
}
538
541
}
539
542
}
540
543
CalculateGroupUsageStats (pb, disks, (TBlobStorageGroupType::EErasureSpecies)group.GetErasureSpecies ());
544
+
545
+ if (auto groupInfo = TBlobStorageGroupInfo::Parse (group, nullptr , nullptr )) {
546
+ NLayoutChecker::TGroupLayout layout (groupInfo->GetTopology ());
547
+ NLayoutChecker::TDomainMapper mapper;
548
+ TGroupGeometryInfo geom (groupInfo->Type , SelfManagementEnabled
549
+ ? StorageConfig.GetSelfManagementConfig ().GetGeometry ()
550
+ : NKikimrBlobStorage::TGroupGeometry ());
551
+
552
+ Y_DEBUG_ABORT_UNLESS (pdiskIds.size () == groupInfo->GetTotalVDisksNum ());
553
+
554
+ for (size_t i = 0 ; i < pdiskIds.size (); ++i) {
555
+ const TPDiskId pdiskId = pdiskIds[i];
556
+ layout.AddDisk ({mapper, HostRecords->GetLocation (pdiskId.NodeId ), pdiskId, geom}, i);
557
+ }
558
+
559
+ pb->SetLayoutCorrect (layout.IsCorrect ());
560
+ }
541
561
}
542
562
}
543
563
}
0 commit comments