summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryuryalekseev <[email protected]>2023-02-08 14:22:03 +0300
committeryuryalekseev <[email protected]>2023-02-08 14:22:03 +0300
commite615f3f87f0fc3dcc0d45c304883339ab1eab8c1 (patch)
tree1760e0eb46ab7294d1a59908c1ac525d6e079706
parentadf98907aa45c85b4c57dcd2b2e85c2c8ad21dbb (diff)
Call FindPDisk(), FindStaticPDisk() that check serial paths.
-rw-r--r--ydb/core/mind/bscontroller/config_fit_pdisks.cpp22
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);