@@ -72,13 +72,15 @@ namespace NKikimr::NBsController {
72
72
TEntityId RealmGroup;
73
73
TEntityId Realm;
74
74
TEntityId Domain;
75
+ TEntityId Node;
75
76
76
77
TPDiskLayoutPosition () = default ;
77
78
78
- TPDiskLayoutPosition (TEntityId realmGroup, TEntityId realm, TEntityId domain)
79
+ TPDiskLayoutPosition (TEntityId realmGroup, TEntityId realm, TEntityId domain, TEntityId node )
79
80
: RealmGroup(realmGroup)
80
81
, Realm(realm)
81
82
, Domain(domain)
83
+ , Node(node)
82
84
{}
83
85
84
86
TPDiskLayoutPosition (TDomainMapper& mapper, const TNodeLocation& location, TPDiskId pdiskId, const TGroupGeometryInfo& geom) {
@@ -102,6 +104,7 @@ namespace NKikimr::NBsController {
102
104
RealmGroup = mapper (realmGroup.Str ());
103
105
Realm = mapper (realm.Str ());
104
106
Domain = mapper (domain.Str ());
107
+ Node.Value = pdiskId.NodeId ;
105
108
}
106
109
107
110
TString ToString () const {
@@ -124,12 +127,13 @@ namespace NKikimr::NBsController {
124
127
struct TScore {
125
128
ui32 RealmInterlace = 0 ;
126
129
ui32 DomainInterlace = 0 ;
130
+ ui32 NodeInterlace = 0 ;
127
131
ui32 RealmGroupScatter = 0 ;
128
132
ui32 RealmScatter = 0 ;
129
133
ui32 DomainScatter = 0 ;
130
134
131
135
auto AsTuple () const {
132
- return std::make_tuple (RealmInterlace, DomainInterlace, RealmGroupScatter, RealmScatter, DomainScatter);
136
+ return std::make_tuple (RealmInterlace, DomainInterlace, NodeInterlace, RealmGroupScatter, RealmScatter, DomainScatter);
133
137
}
134
138
135
139
bool BetterThan (const TScore& other) const {
@@ -141,12 +145,13 @@ namespace NKikimr::NBsController {
141
145
}
142
146
143
147
static TScore Max () {
144
- return {::Max<ui32>(), ::Max<ui32>(), ::Max<ui32>(), ::Max<ui32>(), ::Max<ui32>()};
148
+ return {::Max<ui32>(), ::Max<ui32>(), ::Max<ui32>(), ::Max<ui32>(), ::Max<ui32>(), ::Max<ui32>() };
145
149
}
146
150
147
151
TString ToString () const {
148
152
return TStringBuilder () << " {RealmInterlace# " << RealmInterlace
149
153
<< " DomainInterlace# " << DomainInterlace
154
+ << " NodeInterlace# " << NodeInterlace
150
155
<< " RealmGroupScatter# " << RealmGroupScatter
151
156
<< " RealmScatter# " << RealmScatter
152
157
<< " DomainScatter# " << DomainScatter
@@ -168,6 +173,8 @@ namespace NKikimr::NBsController {
168
173
TStackVec<THashMap<TEntityId, ui32>, 32 > NumDisksPerDomain;
169
174
THashMap<TEntityId, ui32> NumDisksPerDomainTotal;
170
175
176
+ THashMap<TEntityId, ui32> NumDisksPerNode;
177
+
171
178
TGroupLayout (const TBlobStorageGroupInfo::TTopology& topology)
172
179
: Topology(topology)
173
180
, NumDisksInRealm(Topology.GetTotalFailRealmsNum())
@@ -187,6 +194,8 @@ namespace NKikimr::NBsController {
187
194
NumDisksInDomain[domainIdx] += value;
188
195
NumDisksPerDomain[domainIdx][pos.Domain ] += value;
189
196
NumDisksPerDomainTotal[pos.Domain ] += value;
197
+
198
+ NumDisksPerNode[pos.Node ] += value;
190
199
}
191
200
192
201
void AddDisk (const TPDiskLayoutPosition& pos, ui32 orderNumber) {
@@ -204,9 +213,12 @@ namespace NKikimr::NBsController {
204
213
const auto & disksPerRealm = NumDisksPerRealm[vdisk.FailRealm ][pos.Realm ];
205
214
const auto & disksPerDomain = NumDisksPerDomain[domainIdx][pos.Domain ];
206
215
216
+ const ui32 disksOnNode = NumDisksPerNode[pos.Node ];
217
+
207
218
return {
208
219
.RealmInterlace = NumDisksPerRealmTotal[pos.Realm ] - disksPerRealm,
209
220
.DomainInterlace = NumDisksPerDomainTotal[pos.Domain ] - disksPerDomain,
221
+ .NodeInterlace = disksOnNode,
210
222
.RealmGroupScatter = NumDisks - NumDisksPerRealmGroup[pos.RealmGroup ],
211
223
.RealmScatter = NumDisksInRealm[vdisk.FailRealm ] - disksPerRealm,
212
224
.DomainScatter = NumDisksInDomain[domainIdx] - disksPerDomain,
0 commit comments