42
42
namespace NYql {
43
43
namespace NDq {
44
44
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
+
45
68
struct TSinkCallbacks : public IDqComputeActorAsyncOutput ::ICallbacks {
46
69
void OnAsyncOutputError (ui64 outputIndex, const TIssues& issues, NYql::NDqProto::StatusIds::StatusCode fatalCode) override final {
47
70
OnSinkError (outputIndex, issues, fatalCode);
@@ -296,6 +319,7 @@ class TDqComputeActorBase : public NActors::TActorBootstrapped<TDerived>
296
319
hFunc (NActors::TEvInterconnect::TEvNodeConnected, HandleExecuteBase);
297
320
hFunc (IDqComputeActorAsyncInput::TEvNewAsyncInputDataArrived, OnNewAsyncInputDataArrived);
298
321
hFunc (IDqComputeActorAsyncInput::TEvAsyncInputError, OnAsyncInputError);
322
+ hFunc (TEvPrivate::TEvAsyncOutputError, HandleAsyncOutputError);
299
323
default : {
300
324
CA_LOG_C (" TDqComputeActorBase, unexpected event: " << ev->GetTypeRewrite () << " (" << GetEventTypeString (ev) << " )" );
301
325
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>
1524
1548
}
1525
1549
1526
1550
CA_LOG_E (" Sink[" << outputIndex << " ] fatal error: " << issues.ToOneLineString ());
1527
- InternalError ( fatalCode, issues);
1551
+ this -> Send ( this -> SelfId (), new TEvPrivate::TEvAsyncOutputError ( fatalCode, issues) );
1528
1552
}
1529
1553
1530
1554
void OnOutputTransformError (ui64 outputIndex, const TIssues& issues, NYql::NDqProto::StatusIds::StatusCode fatalCode) override final {
@@ -1534,7 +1558,11 @@ class TDqComputeActorBase : public NActors::TActorBootstrapped<TDerived>
1534
1558
}
1535
1559
1536
1560
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 );
1538
1566
}
1539
1567
1540
1568
bool AllAsyncOutputsFinished () const {
0 commit comments