@@ -105,12 +105,16 @@ void TTieringActualizer::DoRemovePortion(const ui64 portionId) {
105105void TTieringActualizer::DoExtractTasks (TTieringProcessContext& tasksContext, const TExternalTasksContext& externalContext, TInternalTasksContext& /* internalContext*/ ) {
106106 THashSet<ui64> portionIds;
107107 for (auto && [address, addressPortions] : PortionIdByWaitDuration) {
108+ if (addressPortions.GetPortions ().size () && tasksContext.Now - StartInstant < addressPortions.GetPortions ().begin ()->first ) {
109+ Counters.SkipEvictionForLimit ->Add (1 );
110+ continue ;
111+ }
108112 if (!tasksContext.IsRWAddressAvailable (address)) {
109113 Counters.SkipEvictionForLimit ->Add (1 );
110114 continue ;
111115 }
112116 for (auto && [duration, portions] : addressPortions.GetPortions ()) {
113- if (duration - ( tasksContext.Now - StartInstant) > TDuration::Zero () ) {
117+ if (tasksContext.Now - StartInstant < duration ) {
114118 break ;
115119 }
116120 bool limitEnriched = false ;
@@ -140,28 +144,29 @@ void TTieringActualizer::DoExtractTasks(TTieringProcessContext& tasksContext, co
140144 }
141145 }
142146 }
147+ if (portionIds.size ()) {
148+ ui64 waitDurationEvict = 0 ;
149+ ui64 waitQueueEvict = 0 ;
150+ ui64 waitDurationDelete = 0 ;
151+ ui64 waitQueueDelete = 0 ;
152+ for (auto && i : PortionIdByWaitDuration) {
153+ std::shared_ptr<NColumnShard::TValueAggregationClient> waitDurationSignal;
154+ std::shared_ptr<NColumnShard::TValueAggregationClient> queueSizeSignal;
155+ if (i.first .WriteIs (NTiering::NCommon::DeleteTierName)) {
156+ i.second .CorrectSignals (waitQueueDelete, waitDurationDelete, tasksContext.Now - StartInstant);
157+ } else {
158+ i.second .CorrectSignals (waitQueueEvict, waitDurationEvict, tasksContext.Now - StartInstant);
159+ }
160+ }
161+ Counters.DifferenceWaitToDelete ->SetValue (waitDurationDelete);
162+ Counters.DifferenceWaitToEvict ->SetValue (waitDurationEvict);
163+ Counters.QueueSizeToDelete ->SetValue (waitQueueDelete);
164+ Counters.QueueSizeToEvict ->SetValue (waitQueueEvict);
165+ }
143166 for (auto && i : portionIds) {
144167 RemovePortion (i);
145168 }
146169
147- ui64 waitDurationEvict = 0 ;
148- ui64 waitQueueEvict = 0 ;
149- ui64 waitDurationDelete = 0 ;
150- ui64 waitQueueDelete = 0 ;
151- for (auto && i : PortionIdByWaitDuration) {
152- std::shared_ptr<NColumnShard::TValueAggregationClient> waitDurationSignal;
153- std::shared_ptr<NColumnShard::TValueAggregationClient> queueSizeSignal;
154- if (i.first .WriteIs (NTiering::NCommon::DeleteTierName)) {
155- i.second .CorrectSignals (waitQueueDelete, waitDurationDelete, tasksContext.Now - StartInstant);
156- } else {
157- i.second .CorrectSignals (waitQueueEvict, waitDurationEvict, tasksContext.Now - StartInstant);
158- }
159- }
160- Counters.DifferenceWaitToDelete ->SetValue (waitDurationDelete);
161- Counters.DifferenceWaitToEvict ->SetValue (waitDurationEvict);
162- Counters.QueueSizeToDelete ->SetValue (waitQueueDelete);
163- Counters.QueueSizeToEvict ->SetValue (waitQueueEvict);
164-
165170}
166171
167172void TTieringActualizer::Refresh (const std::optional<TTiering>& info, const TAddExternalContext& externalContext) {
0 commit comments