@@ -128,6 +128,9 @@ namespace NKikimr {
128128 const ui32 DefaultMaxSlots;
129129
130130 // static pdisk/vdisk states
131+ std::map<TVSlotId, TStaticVSlotInfo> NewStaticVSlots;
132+ std::map<TPDiskId, TStaticPDiskInfo> NewStaticPDisks;
133+ std::map<TGroupId, TStaticGroupInfo> NewStaticGroups;
131134 std::map<TVSlotId, TStaticVSlotInfo>& StaticVSlots;
132135 std::map<TPDiskId, TStaticPDiskInfo>& StaticPDisks;
133136 std::map<TGroupId, TStaticGroupInfo>& StaticGroups;
@@ -147,7 +150,7 @@ namespace NKikimr {
147150
148151 public:
149152 TConfigState (TBlobStorageController &controller, const THostRecordMap &hostRecords, TInstant timestamp,
150- TMonotonic mono)
153+ TMonotonic mono, const NKikimrBlobStorage::TStorageConfig *storageConfig = nullptr )
151154 : Self(controller)
152155 , HostConfigs(&controller.HostConfigs)
153156 , Boxes(&controller.Boxes)
@@ -168,14 +171,33 @@ namespace NKikimr {
168171 , Mono(mono)
169172 , DonorMode(controller.DonorMode)
170173 , DefaultMaxSlots(controller.DefaultMaxSlots)
171- , StaticVSlots(controller.StaticVSlots)
172- , StaticPDisks(controller.StaticPDisks)
173- , StaticGroups(controller.StaticGroups)
174+ , StaticVSlots(storageConfig && storageConfig-> HasBlobStorageConfig () ? NewStaticVSlots : controller.StaticVSlots)
175+ , StaticPDisks(storageConfig && storageConfig-> HasBlobStorageConfig () ? NewStaticPDisks : controller.StaticPDisks)
176+ , StaticGroups(storageConfig && storageConfig-> HasBlobStorageConfig () ? NewStaticGroups : controller.StaticGroups)
174177 , SerialManagementStage(&controller.SerialManagementStage)
175178 , StoragePoolStat(*controller.StoragePoolStat)
176179 , BridgeInfo(controller.BridgeInfo)
177180 {
178181 Y_ABORT_UNLESS (HostRecords);
182+ if (storageConfig && storageConfig->HasBlobStorageConfig ()) {
183+ const auto & bsConfig = storageConfig->GetBlobStorageConfig ();
184+ const auto & ss = bsConfig.GetServiceSet ();
185+ for (const auto & pdisk : ss.GetPDisks ()) {
186+ const TPDiskId pdiskId (pdisk.GetNodeID (), pdisk.GetPDiskID ());
187+ NewStaticPDisks.try_emplace (pdiskId, pdisk, controller.StaticPDisks );
188+ }
189+ for (const auto & vslot : ss.GetVDisks ()) {
190+ const auto & location = vslot.GetVDiskLocation ();
191+ const TPDiskId pdiskId (location.GetNodeID (), location.GetPDiskID ());
192+ const TVSlotId vslotId (pdiskId, location.GetVDiskSlotID ());
193+ NewStaticVSlots.try_emplace (vslotId, vslot, controller.StaticVSlots , Mono);
194+ ++StaticPDisks.at (pdiskId).StaticSlotUsage ;
195+ }
196+ for (const auto & group : ss.GetGroups ()) {
197+ const auto groupId = TGroupId::FromProto (&group, &NKikimrBlobStorage::TGroupInfo::GetGroupID);
198+ NewStaticGroups.try_emplace (groupId, group, controller.StaticGroups );
199+ }
200+ }
179201 }
180202
181203 void Commit () {
0 commit comments