diff options
| author | yuryalekseev <[email protected]> | 2023-02-08 14:22:03 +0300 |
|---|---|---|
| committer | yuryalekseev <[email protected]> | 2023-02-08 14:22:03 +0300 |
| commit | e615f3f87f0fc3dcc0d45c304883339ab1eab8c1 (patch) | |
| tree | 1760e0eb46ab7294d1a59908c1ac525d6e079706 | |
| parent | adf98907aa45c85b4c57dcd2b2e85c2c8ad21dbb (diff) | |
Call FindPDisk(), FindStaticPDisk() that check serial paths.
| -rw-r--r-- | ydb/core/mind/bscontroller/config_fit_pdisks.cpp | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/ydb/core/mind/bscontroller/config_fit_pdisks.cpp b/ydb/core/mind/bscontroller/config_fit_pdisks.cpp index 97d16737065..2cd1223e91f 100644 --- a/ydb/core/mind/bscontroller/config_fit_pdisks.cpp +++ b/ydb/core/mind/bscontroller/config_fit_pdisks.cpp @@ -66,6 +66,22 @@ namespace NKikimr { return proto.ParseFromString(s) ? SingleLineProto(proto) : "<error>"; } + static std::optional<TPDiskId> FindPDisk(const TDiskInfo& disk, const TBlobStorageController::TConfigState& state) { + auto id = state.FindPDiskByLocation(disk.NodeId, disk.Path); + if (!id) { + id = state.FindPDiskByLocation(disk.NodeId, disk.Serial); + } + return id; + } + + static std::optional<TPDiskId> FindStaticPDisk(const TDiskInfo& disk, const TBlobStorageController::TConfigState& state) { + auto id = state.FindStaticPDiskByLocation(disk.NodeId, disk.Path); + if (!id) { + id = state.FindStaticPDiskByLocation(disk.NodeId, disk.Serial); + } + return id; + } + static void UpdatePDiskIfNeeded(const TPDiskId& pdiskId, const TDiskInfo& disk, ui32 defaultMaxSlots, TBlobStorageController::TConfigState& state) { auto pdiskInfo = state.PDisks.Find(pdiskId); Y_VERIFY(pdiskInfo != nullptr); @@ -84,7 +100,7 @@ namespace NKikimr { pdiskInfo->BoxId = disk.BoxId; if (pdiskInfo->PDiskConfig != disk.PDiskConfig) { // update PDiskConfig only for nonstatic PDisks - if (!state.FindStaticPDiskByLocation(disk.NodeId, disk.Path)) { + if (!NKikimr::NBsController::FindStaticPDisk(disk, state)) { pdiskInfo->PDiskConfig = disk.PDiskConfig; } else { throw TExError() << "Skipping PDiskConfig update for static disk" << TErrorParams::NodeId(disk.NodeId) << TErrorParams::Path(disk.Path); @@ -295,7 +311,7 @@ namespace NKikimr { for (const auto& [diskId, disk] : disks) { TPDiskId pdiskId; // check if we already have spawned some PDisk at this location - if (auto pdiskIdOptional = state.FindPDiskByLocation(diskId.NodeId, diskId.Path)) { + if (auto pdiskIdOptional = NKikimr::NBsController::FindPDisk(disk, state)) { pdiskId = *pdiskIdOptional; // yes, we have; find it by id and update some characteristics (that we can update) UpdatePDiskIfNeeded(pdiskId, disk, DefaultMaxSlots, state); @@ -304,7 +320,7 @@ namespace NKikimr { Schema::PDisk::Guid::Type guid; ui32 staticSlotUsage = 0; - if (auto pdiskIdOptional = state.FindStaticPDiskByLocation(disk.NodeId, disk.Path)) { + if (auto pdiskIdOptional = NKikimr::NBsController::FindStaticPDisk(disk, state)) { // yes, take some data from static configuration pdiskId = *pdiskIdOptional; guid = CheckStaticPDisk(state, pdiskId, disk.PDiskCategory, disk.PDiskConfig, &staticSlotUsage); |
