Skip to content

Commit 647db3f

Browse files
swalrus1iddqdex
authored andcommitted
Dynamic deadline for CS scan (#9520)
1 parent 245dfa3 commit 647db3f

File tree

2 files changed

+27
-4
lines changed

2 files changed

+27
-4
lines changed

ydb/core/tx/columnshard/engines/reader/actor/actor.cpp

+21-3
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ TColumnShardScan::TColumnShardScan(const TActorId& columnShardActorId, const TAc
5858
, DataFormat(dataFormat)
5959
, TabletId(tabletId)
6060
, ReadMetadataRange(readMetadataRange)
61-
, Deadline(TInstant::Now() + (timeout ? timeout + SCAN_HARD_TIMEOUT_GAP : SCAN_HARD_TIMEOUT))
61+
, Timeout(timeout ? timeout + SCAN_HARD_TIMEOUT_GAP : SCAN_HARD_TIMEOUT)
6262
, ScanCountersPool(scanCountersPool)
6363
, Stats(NTracing::TTraceClient::GetLocalClient("SHARD", ::ToString(TabletId)/*, "SCAN_TXID:" + ::ToString(TxId)*/))
6464
, ComputeShardingPolicy(computeShardingPolicy) {
@@ -72,7 +72,6 @@ void TColumnShardScan::Bootstrap(const TActorContext& ctx) {
7272
);
7373
auto g = Stats->MakeGuard("bootstrap");
7474
ScanActorId = ctx.SelfID;
75-
Schedule(Deadline, new TEvents::TEvWakeup);
7675

7776
Y_ABORT_UNLESS(!ScanIterator);
7877
ResourceSubscribeActorId = ctx.Register(new NResourceBroker::NSubscribe::TActor(TabletId, SelfId()));
@@ -88,6 +87,7 @@ void TColumnShardScan::Bootstrap(const TActorContext& ctx) {
8887
SendScanError("scanner_start_error:" + startResult.GetErrorMessage());
8988
Finish(NColumnShard::TScanCounters::EStatusFinish::ProblemOnStart);
9089
} else {
90+
ScheduleWakeup(GetDeadline());
9191

9292
// propagate self actor id // TODO: FlagSubscribeOnSession ?
9393
Send(ScanComputeActorId, new NKqp::TEvKqpCompute::TEvScanInitActor(ScanId, ctx.SelfID, ScanGen, TabletId), IEventHandle::FlagTrackDelivery);
@@ -176,7 +176,11 @@ void TColumnShardScan::HandleScan(TEvents::TEvWakeup::TPtr& /*ev*/) {
176176
"Scan " << ScanActorId << " guard execution timeout"
177177
<< " txId: " << TxId << " scanId: " << ScanId << " gen: " << ScanGen << " tablet: " << TabletId);
178178

179-
Finish(NColumnShard::TScanCounters::EStatusFinish::Deadline);
179+
if (TMonotonic::Now() >= GetDeadline()) {
180+
Finish(NColumnShard::TScanCounters::EStatusFinish::Deadline);
181+
} else {
182+
ScheduleWakeup(GetDeadline());
183+
}
180184
}
181185

182186
bool TColumnShardScan::ProduceResults() noexcept {
@@ -377,6 +381,7 @@ bool TColumnShardScan::SendResult(bool pageFault, bool lastBatch) {
377381
}
378382
ReadMetadataRange->OnReplyConstruction(TabletId, *Result);
379383
AckReceivedInstant.reset();
384+
LastResultInstant = TMonotonic::Now();
380385

381386
Send(ScanComputeActorId, Result.Release(), IEventHandle::FlagTrackDelivery); // TODO: FlagSubscribeOnSession ?
382387

@@ -414,4 +419,17 @@ void TColumnShardScan::ReportStats() {
414419
Bytes = 0;
415420
}
416421

422+
void TColumnShardScan::ScheduleWakeup(const TMonotonic deadline) {
423+
if (deadline != TMonotonic::Max()) {
424+
Schedule(deadline, new TEvents::TEvWakeup);
425+
}
426+
}
427+
428+
TMonotonic TColumnShardScan::GetDeadline() const {
429+
AFL_VERIFY(StartInstant);
430+
if (LastResultInstant) {
431+
return *LastResultInstant + Timeout;
432+
}
433+
return *StartInstant + Timeout;
434+
}
417435
}

ydb/core/tx/columnshard/engines/reader/actor/actor.h

+6-1
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,10 @@ class TColumnShardScan: public TActorBootstrapped<TColumnShardScan>, NArrow::IRo
102102

103103
void ReportStats();
104104

105+
void ScheduleWakeup(const TMonotonic deadline);
106+
107+
TMonotonic GetDeadline() const;
108+
105109
private:
106110
const TActorId ColumnShardActorId;
107111
const TActorId ReadBlobsActorId;
@@ -122,7 +126,7 @@ class TColumnShardScan: public TActorBootstrapped<TColumnShardScan>, NArrow::IRo
122126
std::vector<std::pair<TString, NScheme::TTypeInfo>> KeyYqlSchema;
123127
const TSerializedTableRange TableRange;
124128
const TSmallVec<bool> SkipNullKeys;
125-
const TInstant Deadline;
129+
const TDuration Timeout;
126130
NColumnShard::TConcreteScanCounters ScanCountersPool;
127131

128132
TMaybe<TString> AbortReason;
@@ -132,6 +136,7 @@ class TColumnShardScan: public TActorBootstrapped<TColumnShardScan>, NArrow::IRo
132136
std::shared_ptr<arrow::RecordBatch> CurrentLastReadKey;
133137
i64 InFlightReads = 0;
134138
bool Finished = false;
139+
std::optional<TMonotonic> LastResultInstant;
135140

136141
class TBlobStats {
137142
private:

0 commit comments

Comments
 (0)