Skip to content

Commit 46a72a5

Browse files
authored
[pq] dq_pq_read: don't free TUnboxedValue without bound allocator (#20599)
1 parent 80dd308 commit 46a72a5

File tree

1 file changed

+11
-1
lines changed

1 file changed

+11
-1
lines changed

ydb/library/yql/providers/pq/async_io/dq_pq_read_actor.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ class TDqPqReadActor : public NActors::TActor<TDqPqReadActor>, public NYql::NDq:
352352
clusterState.ReadSession.reset();
353353
}
354354
}
355-
ReadyBuffer = std::queue<TReadyBatch>{}; // clear read buffer
355+
Reconnected = true;
356356
Metrics.ReconnectRate->Inc();
357357

358358
Schedule(ReconnectPeriod, new TEvPrivate::TEvReconnectSession());
@@ -513,6 +513,7 @@ class TDqPqReadActor : public NActors::TActor<TDqPqReadActor>, public NYql::NDq:
513513
}
514514

515515
i64 GetAsyncInputData(NKikimr::NMiniKQL::TUnboxedValueBatch& buffer, TMaybe<TInstant>& watermark, bool&, i64 freeSpace) override {
516+
// called with bound allocator
516517
Metrics.InFlyAsyncInputData->Set(0);
517518
SRC_LOG_T("SessionId: " << GetSessionId() << " GetAsyncInputData freeSpace = " << freeSpace);
518519

@@ -525,6 +526,11 @@ class TDqPqReadActor : public NActors::TActor<TDqPqReadActor>, public NYql::NDq:
525526
InflightReconnect = true;
526527
}
527528

529+
if (Reconnected) {
530+
Reconnected = false;
531+
ReadyBuffer = std::queue<TReadyBatch>{}; // clear read buffer
532+
}
533+
528534
i64 usedSpace = 0;
529535
if (MaybeReturnReadyBatch(buffer, watermark, usedSpace)) {
530536
return usedSpace;
@@ -673,6 +679,7 @@ class TDqPqReadActor : public NActors::TActor<TDqPqReadActor>, public NYql::NDq:
673679
THashMap<NYdb::NTopic::TPartitionSession::TPtr, std::pair<std::string, TList<std::pair<ui64, ui64>>>> OffsetRanges; // [start, end)
674680
};
675681

682+
// must be called with bound allocator
676683
bool MaybeReturnReadyBatch(NKikimr::NMiniKQL::TUnboxedValueBatch& buffer, TMaybe<TInstant>& watermark, i64& usedSpace) {
677684
if (ReadyBuffer.empty()) {
678685
SubscribeOnNextEvent();
@@ -709,6 +716,7 @@ class TDqPqReadActor : public NActors::TActor<TDqPqReadActor>, public NYql::NDq:
709716
return true;
710717
}
711718

719+
// must be called with bound allocator
712720
void PushWatermarkToReady(TInstant watermark) {
713721
SRC_LOG_D("SessionId: " << GetSessionId() << " New watermark " << watermark << " was generated");
714722

@@ -720,6 +728,7 @@ class TDqPqReadActor : public NActors::TActor<TDqPqReadActor>, public NYql::NDq:
720728
ReadyBuffer.back().Watermark = watermark;
721729
}
722730

731+
// must be called (visited) with bound allocator
723732
struct TTopicEventProcessor {
724733
void operator()(NYdb::NTopic::TReadSessionEvent::TDataReceivedEvent& event) {
725734
const auto partitionKey = MakePartitionKey(Cluster, event.GetPartitionSession());
@@ -853,6 +862,7 @@ class TDqPqReadActor : public NActors::TActor<TDqPqReadActor>, public NYql::NDq:
853862
private:
854863
bool InflightReconnect = false;
855864
TDuration ReconnectPeriod;
865+
bool Reconnected = false;
856866
TMetrics Metrics;
857867
const i64 BufferSize;
858868
const THolderFactory& HolderFactory;

0 commit comments

Comments
 (0)