@@ -64,6 +64,8 @@ void TNodeBroker::OnActivateExecutor(const TActorContext &ctx)
64
64
MinDynamicId = Max (MaxStaticId + 1 , (ui64)Min (appData->DynamicNameserviceConfig ->MinDynamicNodeId , TActorId::MaxNodeId));
65
65
MaxDynamicId = Max (MinDynamicId, (ui64)Min (appData->DynamicNameserviceConfig ->MaxDynamicNodeId , TActorId::MaxNodeId));
66
66
67
+ EnableSlotNameGeneration = appData->FeatureFlags .GetEnableSlotNameGeneration ();
68
+
67
69
ClearState ();
68
70
69
71
ProcessTx (CreateTxInitScheme (), ctx);
@@ -125,11 +127,38 @@ bool TNodeBroker::OnRenderAppHtmlPage(NMon::TEvRemoteHttpInfo::TPtr ev,
125
127
<< " Location: " << node.Location .ToString () << Endl
126
128
<< " Lease: " << node.Lease << Endl
127
129
<< " Expire: " << node.ExpirationString () << Endl
128
- << " AuthorizedByCertificate: " << (node.AuthorizedByCertificate ? " true" : " false" ) << Endl;
130
+ << " AuthorizedByCertificate: " << (node.AuthorizedByCertificate ? " true" : " false" ) << Endl
131
+ << " ServicedSubDomain: " << node.ServicedSubDomain << Endl
132
+ << " SlotIndex: " << node.SlotIndex << Endl;
129
133
}
130
134
str << Endl;
131
135
132
136
str << " Free Node IDs count: " << FreeIds.Count () << Endl;
137
+
138
+ str << Endl;
139
+ str << " Slot Indexes Pools usage: " << Endl;
140
+ size_t totalSize = 0 ;
141
+ size_t totalCapacity = 0 ;
142
+ for (const auto &[subdomainKey, slotIndexesPool] : SlotIndexesPools) {
143
+ const size_t size = slotIndexesPool.Size ();
144
+ totalSize += size;
145
+ const size_t capacity = slotIndexesPool.Capacity ();
146
+ totalCapacity += capacity;
147
+ const double usagePercent = floor (size * 100.0 / capacity);
148
+ str << " " << subdomainKey
149
+ << " = " << usagePercent << " % (" << size << " of " << capacity << " )"
150
+ << Endl;
151
+ }
152
+ str << Endl;
153
+
154
+ if (totalCapacity > 0 ) {
155
+ const double totalUsagePercent = floor (totalSize * 100.0 / totalCapacity);
156
+ str << " Total"
157
+ << " = " << totalUsagePercent << " % (" << totalSize << " of " << totalCapacity << " )"
158
+ << Endl;
159
+ } else {
160
+ str << " No Slot Indexes Pools" << Endl;
161
+ }
133
162
}
134
163
}
135
164
@@ -159,11 +188,15 @@ void TNodeBroker::ClearState()
159
188
Hosts.clear ();
160
189
161
190
RecomputeFreeIds ();
191
+ RecomputeSlotIndexesPools ();
162
192
}
163
193
164
194
void TNodeBroker::AddNode (const TNodeInfo &info)
165
195
{
166
196
FreeIds.Reset (info.NodeId );
197
+ if (info.SlotIndex .has_value ()) {
198
+ SlotIndexesPools[info.ServicedSubDomain ].Acquire (info.SlotIndex .value ());
199
+ }
167
200
168
201
if (info.Expire > Epoch.Start ) {
169
202
LOG_DEBUG_S (TActorContext::AsActorContext (), NKikimrServices::NODE_BROKER,
@@ -215,6 +248,24 @@ void TNodeBroker::RecomputeFreeIds()
215
248
}
216
249
}
217
250
251
+ void TNodeBroker::RecomputeSlotIndexesPools ()
252
+ {
253
+ for (auto &[_, slotIndexesPool] : SlotIndexesPools) {
254
+ slotIndexesPool.ReleaseAll ();
255
+ }
256
+
257
+ for (const auto &[_, node] : Nodes) {
258
+ if (node.SlotIndex .has_value ()) {
259
+ SlotIndexesPools[node.ServicedSubDomain ].Acquire (node.SlotIndex .value ());
260
+ }
261
+ }
262
+ for (const auto &[_, node] : ExpiredNodes) {
263
+ if (node.SlotIndex .has_value ()) {
264
+ SlotIndexesPools[node.ServicedSubDomain ].Acquire (node.SlotIndex .value ());
265
+ }
266
+ }
267
+ }
268
+
218
269
bool TNodeBroker::IsBannedId (ui32 id) const
219
270
{
220
271
for (auto &pr : BannedIds)
@@ -288,6 +339,10 @@ void TNodeBroker::FillNodeInfo(const TNodeInfo &node,
288
339
info.SetAddress (node.Address );
289
340
info.SetExpire (node.Expire .GetValue ());
290
341
node.Location .Serialize (info.MutableLocation (), false );
342
+ if (EnableSlotNameGeneration && node.SlotIndex .has_value ()) {
343
+ const TString slotName = TStringBuilder () << " slot-" << node.SlotIndex ;
344
+ info.SetSlotName (slotName);
345
+ }
291
346
}
292
347
293
348
void TNodeBroker::ComputeNextEpochDiff (TStateDiff &diff)
@@ -328,9 +383,13 @@ void TNodeBroker::ApplyStateDiff(const TStateDiff &diff)
328
383
LOG_DEBUG_S (TActorContext::AsActorContext (), NKikimrServices::NODE_BROKER,
329
384
" Remove node " << it->second .IdString ());
330
385
331
- ExpiredNodes.erase (it);
332
- if (!IsBannedId (id) && id >= MinDynamicId && id <= MaxDynamicId)
386
+ if (!IsBannedId (id) && id >= MinDynamicId && id <= MaxDynamicId) {
333
387
FreeIds.Set (id);
388
+ }
389
+ if (it->second .SlotIndex .has_value ()) {
390
+ SlotIndexesPools[it->second .ServicedSubDomain ].Release (it->second .SlotIndex .value ());
391
+ }
392
+ ExpiredNodes.erase (it);
334
393
}
335
394
336
395
LOG_DEBUG_S (TActorContext::AsActorContext (), NKikimrServices::NODE_BROKER,
@@ -437,7 +496,9 @@ void TNodeBroker::DbAddNode(const TNodeInfo &node,
437
496
<< " dc=" << node.Location .GetDataCenterId ()
438
497
<< " location=" << node.Location .ToString ()
439
498
<< " lease=" << node.Lease
440
- << " expire=" << node.ExpirationString ());
499
+ << " expire=" << node.ExpirationString ()
500
+ << " servicedsubdomain=" << node.ServicedSubDomain
501
+ << " slotindex= " << node.SlotIndex );
441
502
442
503
NIceDb::TNiceDb db (txc.DB );
443
504
using T = Schema::Nodes;
@@ -448,7 +509,16 @@ void TNodeBroker::DbAddNode(const TNodeInfo &node,
448
509
.Update <T::Address>(node.Address )
449
510
.Update <T::Lease>(node.Lease )
450
511
.Update <T::Expire>(node.Expire .GetValue ())
451
- .Update <T::Location>(node.Location .GetSerializedLocation ());
512
+ .Update <T::Location>(node.Location .GetSerializedLocation ())
513
+ .Update <T::ServicedSubDomain>(node.ServicedSubDomain );
514
+
515
+ if (node.SlotIndex .has_value ()) {
516
+ db.Table <T>().Key (node.NodeId )
517
+ .Update <T::SlotIndex>(node.SlotIndex .value ());
518
+ } else {
519
+ db.Table <T>().Key (node.NodeId )
520
+ .UpdateToNull <T::SlotIndex>();
521
+ }
452
522
}
453
523
454
524
void TNodeBroker::DbApplyStateDiff (const TStateDiff &diff,
@@ -590,7 +660,10 @@ bool TNodeBroker::DbLoadState(TTransactionContext &txc,
590
660
591
661
info.Lease = nodesRowset.GetValue <T::Lease>();
592
662
info.Expire = expire;
593
-
663
+ info.ServicedSubDomain = TSubDomainKey (nodesRowset.GetValueOrDefault <T::ServicedSubDomain>());
664
+ if (nodesRowset.HaveValue <T::SlotIndex>()) {
665
+ info.SlotIndex = nodesRowset.GetValue <T::SlotIndex>();
666
+ }
594
667
AddNode (info);
595
668
596
669
LOG_DEBUG_S (ctx, NKikimrServices::NODE_BROKER,
@@ -776,6 +849,7 @@ void TNodeBroker::Handle(TEvNodeBroker::TEvRegistrationRequest::TPtr &ev,
776
849
TEvNodeBroker::TEvRegistrationRequest::TPtr Ev;
777
850
TNodeBroker *Self;
778
851
NActors::TScopeId ScopeId;
852
+ TSubDomainKey ServicedSubDomain;
779
853
780
854
public:
781
855
static constexpr NKikimrServices::TActivity::EType ActorActivityType () {
@@ -821,8 +895,9 @@ void TNodeBroker::Handle(TEvNodeBroker::TEvRegistrationRequest::TPtr &ev,
821
895
} else {
822
896
ScopeId = {response.DomainInfo ->DomainKey .OwnerId , response.DomainInfo ->DomainKey .LocalPathId };
823
897
}
898
+ ServicedSubDomain = TSubDomainKey (response.DomainInfo ->DomainKey .OwnerId , response.DomainInfo ->DomainKey .LocalPathId );
824
899
} else {
825
- LOG_WARN_S (ctx, NKikimrServices::NODE_BROKER, " Cannot resolve scope id "
900
+ LOG_WARN_S (ctx, NKikimrServices::NODE_BROKER, " Cannot resolve tenant "
826
901
<< " : request# " << Ev->Get ()->Record .ShortDebugString ()
827
902
<< " , response# " << response.ToString (*AppData ()->TypeRegistry ));
828
903
}
@@ -835,11 +910,12 @@ void TNodeBroker::Handle(TEvNodeBroker::TEvRegistrationRequest::TPtr &ev,
835
910
}
836
911
837
912
void Finish (const TActorContext& ctx) {
838
- LOG_TRACE_S (ctx, NKikimrServices::NODE_BROKER, " Finished resolving scope id "
913
+ LOG_TRACE_S (ctx, NKikimrServices::NODE_BROKER, " Finished resolving tenant "
839
914
<< " : request# " << Ev->Get ()->Record .ShortDebugString ()
840
- << " : scope id# " << ScopeIdToString (ScopeId));
915
+ << " : scope id# " << ScopeIdToString (ScopeId)
916
+ << " : serviced subdomain# " << ServicedSubDomain);
841
917
842
- Self->ProcessTx (Self->CreateTxRegisterNode (Ev, ScopeId), ctx);
918
+ Self->ProcessTx (Self->CreateTxRegisterNode (Ev, ScopeId, ServicedSubDomain ), ctx);
843
919
Die (ctx);
844
920
}
845
921
0 commit comments