Skip to content

Commit 2c20d41

Browse files
authored
YQ-4104 fixed fault on sink error (#14457)
1 parent cdbb0bc commit 2c20d41

File tree

2 files changed

+36
-8
lines changed

2 files changed

+36
-8
lines changed

ydb/core/fq/libs/row_dispatcher/format_handler/ut/format_handler_ut.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ namespace NFq::NRowDispatcher::NTests {
55

66
namespace {
77

8-
class TFormatHadlerFixture : public TBaseFixture {
8+
class TFormatHandlerFixture : public TBaseFixture {
99
public:
1010
using TBase = TBaseFixture;
1111
using TCallback = std::function<void(TQueue<std::pair<TRope, TVector<ui64>>>&& data)>;
@@ -250,7 +250,7 @@ class TFormatHadlerFixture : public TBaseFixture {
250250

251251

252252
Y_UNIT_TEST_SUITE(TestFormatHandler) {
253-
Y_UNIT_TEST_F(ManyJsonClients, TFormatHadlerFixture) {
253+
Y_UNIT_TEST_F(ManyJsonClients, TFormatHandlerFixture) {
254254
const ui64 firstOffset = 42;
255255
const TSchemaColumn commonColumn = {"com_col", "[DataType; String]"};
256256

@@ -278,7 +278,7 @@ Y_UNIT_TEST_SUITE(TestFormatHandler) {
278278
});
279279
}
280280

281-
Y_UNIT_TEST_F(ManyRawClients, TFormatHadlerFixture) {
281+
Y_UNIT_TEST_F(ManyRawClients, TFormatHandlerFixture) {
282282
CreateFormatHandler(
283283
{.JsonParserConfig = {}, .FiltersConfig = {.CompileServiceId = CompileService}},
284284
{.ParsingFormat = "raw"}
@@ -320,7 +320,7 @@ Y_UNIT_TEST_SUITE(TestFormatHandler) {
320320
});
321321
}
322322

323-
Y_UNIT_TEST_F(ClientValidation, TFormatHadlerFixture) {
323+
Y_UNIT_TEST_F(ClientValidation, TFormatHandlerFixture) {
324324
const TVector<TSchemaColumn> schema = {{"data", "[DataType; String]"}};
325325
const TString filter = "WHERE FALSE";
326326
const auto callback = EmptyCheck();
@@ -345,7 +345,7 @@ Y_UNIT_TEST_SUITE(TestFormatHandler) {
345345
);
346346
}
347347

348-
Y_UNIT_TEST_F(ClientError, TFormatHadlerFixture) {
348+
Y_UNIT_TEST_F(ClientError, TFormatHandlerFixture) {
349349
const ui64 firstOffset = 42;
350350
const TSchemaColumn commonColumn = {"com_col", "[DataType; String]"};
351351

@@ -365,7 +365,7 @@ Y_UNIT_TEST_SUITE(TestFormatHandler) {
365365
);
366366
}
367367

368-
Y_UNIT_TEST_F(ClientErrorWithEmptyFilter, TFormatHadlerFixture) {
368+
Y_UNIT_TEST_F(ClientErrorWithEmptyFilter, TFormatHandlerFixture) {
369369
const ui64 firstOffset = 42;
370370
const TSchemaColumn commonColumn = {"com_col", "[DataType; String]"};
371371

ydb/library/yql/dq/actors/compute/dq_compute_actor_impl.h

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,29 @@
4242
namespace NYql {
4343
namespace NDq {
4444

45+
namespace {
46+
47+
struct TEvPrivate {
48+
enum EEv : ui32 {
49+
EvRuntimeError = EventSpaceBegin(NActors::TEvents::ES_PRIVATE),
50+
EvEnd
51+
};
52+
53+
static_assert(EvEnd < EventSpaceEnd(NActors::TEvents::ES_PRIVATE), "expect EvEnd < EventSpaceEnd(TEvents::ES_PRIVATE)");
54+
55+
struct TEvAsyncOutputError : public NActors::TEventLocal<TEvAsyncOutputError, EvRuntimeError> {
56+
TEvAsyncOutputError(NYql::NDqProto::StatusIds::StatusCode statusCode, const TIssues& issues)
57+
: StatusCode(statusCode)
58+
, Issues(issues)
59+
{}
60+
61+
NYql::NDqProto::StatusIds::StatusCode StatusCode;
62+
NYql::TIssues Issues;
63+
};
64+
};
65+
66+
} // anonymous namespace
67+
4568
struct TSinkCallbacks : public IDqComputeActorAsyncOutput::ICallbacks {
4669
void OnAsyncOutputError(ui64 outputIndex, const TIssues& issues, NYql::NDqProto::StatusIds::StatusCode fatalCode) override final {
4770
OnSinkError(outputIndex, issues, fatalCode);
@@ -296,6 +319,7 @@ class TDqComputeActorBase : public NActors::TActorBootstrapped<TDerived>
296319
hFunc(NActors::TEvInterconnect::TEvNodeConnected, HandleExecuteBase);
297320
hFunc(IDqComputeActorAsyncInput::TEvNewAsyncInputDataArrived, OnNewAsyncInputDataArrived);
298321
hFunc(IDqComputeActorAsyncInput::TEvAsyncInputError, OnAsyncInputError);
322+
hFunc(TEvPrivate::TEvAsyncOutputError, HandleAsyncOutputError);
299323
default: {
300324
CA_LOG_C("TDqComputeActorBase, unexpected event: " << ev->GetTypeRewrite() << " (" << GetEventTypeString(ev) << ")");
301325
InternalError(NYql::NDqProto::StatusIds::INTERNAL_ERROR, TIssuesIds::DEFAULT_ERROR, TStringBuilder() << "Unexpected event: " << ev->GetTypeRewrite() << " (" << GetEventTypeString(ev) << ")");
@@ -1524,7 +1548,7 @@ class TDqComputeActorBase : public NActors::TActorBootstrapped<TDerived>
15241548
}
15251549

15261550
CA_LOG_E("Sink[" << outputIndex << "] fatal error: " << issues.ToOneLineString());
1527-
InternalError(fatalCode, issues);
1551+
this->Send(this->SelfId(), new TEvPrivate::TEvAsyncOutputError(fatalCode, issues));
15281552
}
15291553

15301554
void OnOutputTransformError(ui64 outputIndex, const TIssues& issues, NYql::NDqProto::StatusIds::StatusCode fatalCode) override final {
@@ -1534,7 +1558,11 @@ class TDqComputeActorBase : public NActors::TActorBootstrapped<TDerived>
15341558
}
15351559

15361560
CA_LOG_E("OutputTransform[" << outputIndex << "] fatal error: " << issues.ToOneLineString());
1537-
InternalError(fatalCode, issues);
1561+
this->Send(this->SelfId(), new TEvPrivate::TEvAsyncOutputError(fatalCode, issues));
1562+
}
1563+
1564+
void HandleAsyncOutputError(const TEvPrivate::TEvAsyncOutputError::TPtr& ev) {
1565+
InternalError(ev->Get()->StatusCode, ev->Get()->Issues);
15381566
}
15391567

15401568
bool AllAsyncOutputsFinished() const {

0 commit comments

Comments
 (0)