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>
@@ -517,6 +518,7 @@ void TBlobStorageController::UpdateSystemViews() {
517
518
518
519
const NKikimrBlobStorage::TVDiskMetrics zero;
519
520
std::vector<TGroupDiskInfo> disks;
521
+ std::vector<TPDiskId> pdiskIds;
520
522
for (const auto & realm : group.GetRings ()) {
521
523
for (const auto & domain : realm.GetFailDomains ()) {
522
524
for (const auto & location : domain.GetVDiskLocations ()) {
@@ -532,10 +534,28 @@ void TBlobStorageController::UpdateSystemViews() {
532
534
if (disk.VDiskMetrics && disk.PDiskMetrics ) {
533
535
disks.push_back (std::move (disk));
534
536
}
537
+ pdiskIds.emplace_back (location.GetNodeID (), location.GetPDiskID ());
535
538
}
536
539
}
537
540
}
538
541
CalculateGroupUsageStats (pb, disks, (TBlobStorageGroupType::EErasureSpecies)group.GetErasureSpecies ());
542
+
543
+ if (auto groupInfo = TBlobStorageGroupInfo::Parse (group, nullptr , nullptr )) {
544
+ NLayoutChecker::TGroupLayout layout (groupInfo->GetTopology ());
545
+ NLayoutChecker::TDomainMapper mapper;
546
+ TGroupGeometryInfo geom (groupInfo->Type , SelfManagementEnabled
547
+ ? StorageConfig.GetSelfManagementConfig ().GetGeometry ()
548
+ : NKikimrBlobStorage::TGroupGeometry ());
549
+
550
+ Y_DEBUG_ABORT_UNLESS (pdiskIds.size () == groupInfo->GetTotalVDisksNum ());
551
+
552
+ for (size_t i = 0 ; i < pdiskIds.size (); ++i) {
553
+ const TPDiskId pdiskId = pdiskIds[i];
554
+ layout.AddDisk ({mapper, HostRecords->GetLocation (pdiskId.NodeId ), pdiskId, geom}, i);
555
+ }
556
+
557
+ pb->SetLayoutCorrect (layout.IsCorrect ());
558
+ }
539
559
}
540
560
}
541
561
}
0 commit comments