diff --git a/ydb/library/yql/dq/actors/compute/dq_async_compute_actor.cpp b/ydb/library/yql/dq/actors/compute/dq_async_compute_actor.cpp index 167a9490323d..543f71d39c44 100644 --- a/ydb/library/yql/dq/actors/compute/dq_async_compute_actor.cpp +++ b/ydb/library/yql/dq/actors/compute/dq_async_compute_actor.cpp @@ -847,6 +847,15 @@ class TDqAsyncComputeActor : public TDqComputeActorBaseGet()->ChannelId); Y_ABORT_UNLESS(it != OutputChannelsMap.end()); TOutputChannelInfo& outputChannel = it->second; + // This condition was already checked in ProcessOutputsImpl, but since then + // RetryState could've been changed. Recheck it once again: + if (!Channels->ShouldSkipData(outputChannel.ChannelId) && !Channels->CanSendChannelData(outputChannel.ChannelId)) { + // Once RetryState will be reset, channel will trigger either ResumeExecution or PeerFinished; either way execution will re-reach this function + CA_LOG_D("OnOutputChannelData return because Channel can't send channel data, channel: " << outputChannel.ChannelId); + outputChannel.PopStarted = false; + ProcessOutputsState.Inflight--; + return; + } if (outputChannel.AsyncData) { CA_LOG_E("Data was not sent to the output channel in the previous step. Channel: " << outputChannel.ChannelId << " Finished: " << outputChannel.Finished