diff options
author | alexvru <[email protected]> | 2022-10-12 13:48:41 +0300 |
---|---|---|
committer | alexvru <[email protected]> | 2022-10-12 13:48:41 +0300 |
commit | ac7fab5882732770d08bdc98e5fd8b9a0d291cd5 (patch) | |
tree | 705246c125ba66b258232900fc954200d6d5dc47 | |
parent | eaddec45ab37af96ce24b3d296dd0aababe0893e (diff) |
Correct available space calculation in PDisk
-rw-r--r-- | ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl.cpp b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl.cpp index f22671d35c1..609edbf2927 100644 --- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl.cpp +++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl.cpp @@ -1448,12 +1448,18 @@ void TPDisk::WhiteboardReport(TWhiteboardReport &whiteboardReport) { reportResult->DiskMetrics = MakeHolder<TEvBlobStorage::TEvControllerUpdateDiskStatus>(); i64 minSlotSize = Max<i64>(); + for (const auto& [_, owner] : VDiskOwners) { + minSlotSize = Min(minSlotSize, Keeper.GetOwnerHardLimit(owner) * Format.ChunkSize); + } + for (const auto& [vdiskId, owner] : VDiskOwners) { const TOwnerData &data = OwnerData[owner]; // May be less than 0 if owner exceeded his quota - i64 ownerFree = Max<i64>(0, Keeper.GetOwnerFree(owner)) * Format.ChunkSize; i64 ownerAllocated = (i64)Keeper.GetOwnerUsed(owner) * Format.ChunkSize; - minSlotSize = Min(minSlotSize, Keeper.GetOwnerHardLimit(owner) * Format.ChunkSize); + i64 ownerFree = Max<i64>(0, minSlotSize == Max<i64>() + ? Keeper.GetOwnerFree(owner) * Format.ChunkSize // fallback calculation method + : minSlotSize - ownerAllocated); + reportResult->VDiskStateVect.emplace_back(data.WhiteboardProxyId, NKikimrWhiteboard::TVDiskStateInfo()); auto& vdiskInfo = std::get<1>(reportResult->VDiskStateVect.back()); vdiskInfo.SetAvailableSize(ownerFree); |