@@ -127,6 +127,7 @@ class TRowDispatcher : public TActorBootstrapped<TRowDispatcher> {
127
127
const ::NMonitoring::TDynamicCounterPtr Counters;
128
128
TRowDispatcherMetrics Metrics;
129
129
NYql::IPqGateway::TPtr PqGateway;
130
+ THashSet<TActorId> InterconnectSessions;
130
131
131
132
struct ConsumerCounters {
132
133
ui64 NewDataArrived = 0 ;
@@ -216,6 +217,7 @@ class TRowDispatcher : public TActorBootstrapped<TRowDispatcher> {
216
217
void Handle (NFq::TEvPrivate::TEvUpdateMetrics::TPtr&);
217
218
218
219
void DeleteConsumer (const ConsumerSessionKey& key);
220
+ void UpdateInterconnectSessions (const NActors::TActorId& interconnectSession);
219
221
void UpdateMetrics ();
220
222
221
223
STRICT_STFUNC (
@@ -279,12 +281,12 @@ void TRowDispatcher::Handle(NFq::TEvRowDispatcher::TEvCoordinatorChanged::TPtr&
279
281
LOG_ROW_DISPATCHER_DEBUG (" Coordinator changed, old leader " << CoordinatorActorId << " , new " << ev->Get ()->CoordinatorActorId );
280
282
281
283
CoordinatorActorId = ev->Get ()->CoordinatorActorId ;
282
- Send (*CoordinatorActorId, new NActors::TEvents::TEvPing (), IEventHandle::FlagTrackDelivery | IEventHandle::FlagSubscribeOnSession );
284
+ Send (*CoordinatorActorId, new NActors::TEvents::TEvPing (), IEventHandle::FlagTrackDelivery);
283
285
for (auto actorId : CoordinatorChangedSubscribers) {
284
286
Send (
285
287
actorId,
286
288
new NFq::TEvRowDispatcher::TEvCoordinatorChanged (ev->Get ()->CoordinatorActorId ),
287
- IEventHandle::FlagTrackDelivery | IEventHandle::FlagSubscribeOnSession );
289
+ IEventHandle::FlagTrackDelivery);
288
290
}
289
291
}
290
292
@@ -324,11 +326,12 @@ void TRowDispatcher::Handle(NActors::TEvents::TEvPong::TPtr&) {
324
326
325
327
void TRowDispatcher::Handle (NFq::TEvRowDispatcher::TEvCoordinatorChangesSubscribe::TPtr& ev) {
326
328
LOG_ROW_DISPATCHER_DEBUG (" TEvCoordinatorChangesSubscribe from " << ev->Sender );
329
+ UpdateInterconnectSessions (ev->InterconnectSession );
327
330
CoordinatorChangedSubscribers.insert (ev->Sender );
328
331
if (!CoordinatorActorId) {
329
332
return ;
330
333
}
331
- Send (ev->Sender , new NFq::TEvRowDispatcher::TEvCoordinatorChanged (*CoordinatorActorId), IEventHandle::FlagTrackDelivery | IEventHandle::FlagSubscribeOnSession );
334
+ Send (ev->Sender , new NFq::TEvRowDispatcher::TEvCoordinatorChanged (*CoordinatorActorId), IEventHandle::FlagTrackDelivery);
332
335
}
333
336
334
337
void TRowDispatcher::UpdateMetrics () {
@@ -372,7 +375,7 @@ void TRowDispatcher::UpdateMetrics() {
372
375
void TRowDispatcher::Handle (NFq::TEvRowDispatcher::TEvStartSession::TPtr& ev) {
373
376
LOG_ROW_DISPATCHER_DEBUG (" TEvStartSession from " << ev->Sender << " , topicPath " << ev->Get ()->Record .GetSource ().GetTopicPath () <<
374
377
" partitionId " << ev->Get ()->Record .GetPartitionId ());
375
-
378
+ UpdateInterconnectSessions (ev-> InterconnectSession );
376
379
TMaybe<ui64> readOffset;
377
380
if (ev->Get ()->Record .HasOffset ()) {
378
381
readOffset = ev->Get ()->Record .GetOffset ();
@@ -634,6 +637,18 @@ void TRowDispatcher::Handle(NFq::TEvRowDispatcher::TEvSessionStatistic::TPtr& ev
634
637
}
635
638
}
636
639
640
+ void TRowDispatcher::UpdateInterconnectSessions (const NActors::TActorId& interconnectSession) {
641
+ if (!interconnectSession) {
642
+ return ;
643
+ }
644
+ auto sessionsIt = InterconnectSessions.find (interconnectSession);
645
+ if (sessionsIt != InterconnectSessions.end ()) {
646
+ return ;
647
+ }
648
+ Send (interconnectSession, new NActors::TEvents::TEvSubscribe, IEventHandle::FlagTrackDelivery);
649
+ InterconnectSessions.insert (interconnectSession);
650
+ }
651
+
637
652
} // namespace
638
653
639
654
// //////////////////////////////////////////////////////////////////////////////
0 commit comments