@@ -89,8 +89,7 @@ void TColumnShard::TrySwitchToWork(const TActorContext& ctx) {
8989 ctx.Send (SelfId (), new NActors::TEvents::TEvWakeup ());
9090 ctx.Send (SelfId (), new TEvPrivate::TEvPeriodicWakeup ());
9191 ctx.Send (SelfId (), new TEvPrivate::TEvPingSnapshotsUsage ());
92- ctx.Send (SelfId (), new TEvPrivate::TEvReportExecutorStatistics ());
93- ctx.Send (SelfId (), new TEvPrivate::TEvReportBaseStatistics ());
92+ ctx.Send (SelfId (), new TEvPrivate::TEvBuildStatisticsPipe ());
9493 NYDBTest::TControllers::GetColumnShardController ()->OnSwitchToWork (TabletID ());
9594 AFL_VERIFY (!!StartInstant);
9695 Counters.GetCSCounters ().Initialization .OnSwitchToWork (TMonotonic::Now () - *StartInstant, TMonotonic::Now () - CreateInstant);
@@ -162,9 +161,12 @@ void TColumnShard::Handle(TEvTabletPipe::TEvClientConnected::TPtr& ev, const TAc
162161 if (clientId == StatsReportPipe) {
163162 if (ev->Get ()->Status == NKikimrProto::OK) {
164163 LOG_S_DEBUG (" Connected to " << tabletId << " at tablet " << TabletID ());
164+ ExecutorStatsEvInflight++;
165+ ActorContext ().Send (SelfId (), new TEvPrivate::TEvBuildStatisticsPipe ());
165166 } else {
166167 LOG_S_INFO (" Failed to connect to " << tabletId << " at tablet " << TabletID ());
167- StatsReportPipe = {};
168+ LastStats = {};
169+ ActorContext ().Send (SelfId (), new TEvPrivate::TEvBuildStatisticsPipe ());
168170 }
169171 return ;
170172 }
@@ -184,7 +186,6 @@ void TColumnShard::Handle(TEvTabletPipe::TEvClientDestroyed::TPtr& ev, const TAc
184186 LOG_S_DEBUG (" Client pipe reset to " << tabletId << " at tablet " << TabletID ());
185187
186188 if (clientId == StatsReportPipe) {
187- StatsReportPipe = {};
188189 LastStats = {};
189190 return ;
190191 }
@@ -438,20 +439,14 @@ void TColumnShard::FillColumnTableStats(const TActorContext& ctx, std::unique_pt
438439}
439440
440441void TColumnShard::SendPeriodicStats (bool withExecutor) {
441- if (!CurrentSchemeShardId || ! TablesManager.GetTabletPathIdOptional ()) {
442- AFL_DEBUG (NKikimrServices::TX_COLUMNSHARD)(" Disabled periodic stats at tablet " , TabletID ());
442+ if (!TablesManager.GetTabletPathIdOptional ()) {
443+ AFL_ERROR (NKikimrServices::TX_COLUMNSHARD)(" Table Manager not ready " , TabletID ());
443444 return ;
444445 }
445446
446447 const auto & tabletSchemeShardLocalPathId = TablesManager.GetTabletPathIdVerified ().SchemeShardLocalPathId ;
447448 const TActorContext& ctx = ActorContext ();
448449
449- if (!StatsReportPipe) {
450- AFL_DEBUG (NKikimrServices::TX_COLUMNSHARD)(" reate periodic stats pipe to " , CurrentSchemeShardId)(" at tablet" , TabletID ());
451- NTabletPipe::TClientConfig clientConfig;
452- StatsReportPipe = ctx.Register (NTabletPipe::CreateClient (ctx.SelfID , CurrentSchemeShardId, clientConfig));
453- }
454-
455450 if (!LastStats) {
456451 LastStats = std::make_unique<TEvDataShard::TEvPeriodicTableStats>(TabletID (), tabletSchemeShardLocalPathId.GetRawValue ());
457452 }
@@ -475,21 +470,47 @@ void TColumnShard::SendPeriodicStats(bool withExecutor) {
475470}
476471
477472void TColumnShard::Handle (TEvPrivate::TEvReportBaseStatistics::TPtr& /* ev*/ ) {
478- auto statistics = AppDataVerified ().ColumnShardConfig .GetStatistics ();
479- auto scheduleDuration = TDuration::MilliSeconds (statistics.GetReportBaseStatisticsPeriodMs () + RandomNumber<ui32>(JitterIntervalMS));
480- ActorContext ().Schedule (scheduleDuration, new TEvPrivate::TEvReportBaseStatistics);
481- AFL_DEBUG (NKikimrServices::TX_COLUMNSHARD)(" event" , " TEvReportBaseStatistics" )(" ReportBaseStatisticsPeriodMs" , statistics.GetReportBaseStatisticsPeriodMs ())(" scheduleDuration" , scheduleDuration);
473+ BaseStatsEvInflight--;
474+ ScheduleBaseStatistics ();
482475 SendPeriodicStats (false );
483- return ;
484476}
485477
486478void TColumnShard::Handle (TEvPrivate::TEvReportExecutorStatistics::TPtr& /* ev*/ ) {
479+ ExecutorStatsEvInflight--;
480+ ScheduleExecutorStatistics ();
481+ SendPeriodicStats (true );
482+ }
483+
484+ void TColumnShard::ScheduleBaseStatistics () {
485+ auto statistics = AppDataVerified ().ColumnShardConfig .GetStatistics ();
486+ auto scheduleDuration = TDuration::MilliSeconds (statistics.GetReportBaseStatisticsPeriodMs () + RandomNumber<ui32>(JitterIntervalMS));
487+ if (!BaseStatsEvInflight) {
488+ BaseStatsEvInflight++;
489+ ActorContext ().Schedule (scheduleDuration, new TEvPrivate::TEvReportBaseStatistics);
490+ AFL_DEBUG (NKikimrServices::TX_COLUMNSHARD)(" event" , " TEvReportBaseStatistics" )(" ReportBaseStatisticsPeriodMs" , statistics.GetReportBaseStatisticsPeriodMs ())(" scheduleDuration" , scheduleDuration);
491+ }
492+ }
493+
494+ void TColumnShard::ScheduleExecutorStatistics () {
487495 auto statistics = AppDataVerified ().ColumnShardConfig .GetStatistics ();
488496 auto scheduleDuration = TDuration::MilliSeconds (statistics.GetReportExecutorStatisticsPeriodMs () + RandomNumber<ui32>(JitterIntervalMS));
489- ActorContext ().Schedule (scheduleDuration, new TEvPrivate::TEvReportExecutorStatistics);
490- AFL_DEBUG (NKikimrServices::TX_COLUMNSHARD)(" event" , " TEvReportExecutorStatistics" )(" ReportExecutorStatisticsPeriodMs" , statistics.GetReportExecutorStatisticsPeriodMs ())(" scheduleDuration" , scheduleDuration);
491- SendPeriodicStats (true );
492- return ;
497+ if (!ExecutorStatsEvInflight) {
498+ ExecutorStatsEvInflight++;
499+ ActorContext ().Schedule (scheduleDuration, new TEvPrivate::TEvReportExecutorStatistics);
500+ AFL_DEBUG (NKikimrServices::TX_COLUMNSHARD)(" event" , " TEvReportExecutorStatistics" )(" ReportExecutorStatisticsPeriodMs" , statistics.GetReportExecutorStatisticsPeriodMs ())(" scheduleDuration" , scheduleDuration);
501+ }
502+ }
503+
504+
505+ void TColumnShard::Handle (TEvPrivate::TEvBuildStatisticsPipe::TPtr& /* ev*/ ) {
506+ if (!CurrentSchemeShardId) {
507+ ActorContext ().Schedule (TDuration::Seconds (1000 ), new TEvPrivate::TEvBuildStatisticsPipe);
508+ }
509+
510+ StatsReportPipe = ActorContext ().Register (NTabletPipe::CreateClient (ActorContext ().SelfID , CurrentSchemeShardId, {}));
511+
512+ ScheduleBaseStatistics ();
513+ ScheduleExecutorStatistics ();
493514}
494515
495516} // namespace NKikimr::NColumnShard
0 commit comments