From da0e469ba87fe1f6b5535a799040f7a8a013d430 Mon Sep 17 00:00:00 2001 From: Yuriy Kaminskiy Date: Tue, 17 Sep 2024 19:39:56 +0300 Subject: [PATCH 1/3] generic_lookup_actor: add basic error handling --- .../input_transforms/dq_input_transform_lookup.cpp | 9 +++++++++ .../generic/actors/yql_generic_lookup_actor.cpp | 13 +++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/ydb/library/yql/dq/actors/input_transforms/dq_input_transform_lookup.cpp b/ydb/library/yql/dq/actors/input_transforms/dq_input_transform_lookup.cpp index 98aabb3a9314..7a9c1ad4276d 100644 --- a/ydb/library/yql/dq/actors/input_transforms/dq_input_transform_lookup.cpp +++ b/ydb/library/yql/dq/actors/input_transforms/dq_input_transform_lookup.cpp @@ -101,8 +101,17 @@ class TInputTransformStreamLookupBase private: //events STRICT_STFUNC(StateFunc, hFunc(IDqAsyncLookupSource::TEvLookupResult, Handle); + hFunc(IDqComputeActorAsyncInput::TEvAsyncInputError, Handle); ) + void Handle(IDqComputeActorAsyncInput::TEvAsyncInputError::TPtr ev) { + auto evptr = ev->Get(); + Send(ComputeActorId, new IDqComputeActorAsyncInput::TEvAsyncInputError( + InputIndex, + evptr->Issues, + evptr->FatalCode)); + } + void AddReadyQueue(NUdf::TUnboxedValue& lookupKey, NUdf::TUnboxedValue& inputOther, NUdf::TUnboxedValue *lookupPayload) { NUdf::TUnboxedValue* outputRowItems; NUdf::TUnboxedValue outputRow = HolderFactory.CreateDirectArrayHolder(OutputRowColumnOrder.size(), outputRowItems); diff --git a/ydb/library/yql/providers/generic/actors/yql_generic_lookup_actor.cpp b/ydb/library/yql/providers/generic/actors/yql_generic_lookup_actor.cpp index 8f312a762463..be49bdd881f9 100644 --- a/ydb/library/yql/providers/generic/actors/yql_generic_lookup_actor.cpp +++ b/ydb/library/yql/providers/generic/actors/yql_generic_lookup_actor.cpp @@ -188,8 +188,17 @@ namespace NYql::NDq { FinalizeRequest(); } - void Handle(TEvError::TPtr) { - FinalizeRequest(); + void Handle(TEvError::TPtr ev) { + auto actorSystem = TActivationContext::ActorSystem(); + auto error = ev->Get()->Error; + auto errEv = new IDqComputeActorAsyncInput::TEvAsyncInputError( + -1, + NConnector::ErrorToIssues(error), + NConnector::ErrorToDqStatus(error)); + actorSystem->Send(new NActors::IEventHandle(ParentId, SelfId(), errEv)); + auto guard = Guard(*Alloc); + TKeyTypeHelper empty; + Request = IDqAsyncLookupSource::TUnboxedValueMap(0, empty.GetValueHash(), empty.GetValueEqual()); } void Handle(NActors::TEvents::TEvPoison::TPtr) { From 9649bd1a38430f2585964d249c431857a2679dd4 Mon Sep 17 00:00:00 2001 From: Yuriy Kaminskiy Date: Fri, 27 Sep 2024 17:18:16 +0300 Subject: [PATCH 2/3] remove incomplete attempt to clean state there should be no attempt to use generic lookup upon sending a error --- .../yql/providers/generic/actors/yql_generic_lookup_actor.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/ydb/library/yql/providers/generic/actors/yql_generic_lookup_actor.cpp b/ydb/library/yql/providers/generic/actors/yql_generic_lookup_actor.cpp index be49bdd881f9..25feb4517691 100644 --- a/ydb/library/yql/providers/generic/actors/yql_generic_lookup_actor.cpp +++ b/ydb/library/yql/providers/generic/actors/yql_generic_lookup_actor.cpp @@ -196,9 +196,6 @@ namespace NYql::NDq { NConnector::ErrorToIssues(error), NConnector::ErrorToDqStatus(error)); actorSystem->Send(new NActors::IEventHandle(ParentId, SelfId(), errEv)); - auto guard = Guard(*Alloc); - TKeyTypeHelper empty; - Request = IDqAsyncLookupSource::TUnboxedValueMap(0, empty.GetValueHash(), empty.GetValueEqual()); } void Handle(NActors::TEvents::TEvPoison::TPtr) { From bda8e23edec588a7f2bdbcf757a1e53115453c92 Mon Sep 17 00:00:00 2001 From: Yuriy Kaminskiy Date: Thu, 10 Oct 2024 17:26:25 +0300 Subject: [PATCH 3/3] fix review comment --- .../yql/providers/generic/actors/yql_generic_lookup_actor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ydb/library/yql/providers/generic/actors/yql_generic_lookup_actor.cpp b/ydb/library/yql/providers/generic/actors/yql_generic_lookup_actor.cpp index 25feb4517691..027efe550191 100644 --- a/ydb/library/yql/providers/generic/actors/yql_generic_lookup_actor.cpp +++ b/ydb/library/yql/providers/generic/actors/yql_generic_lookup_actor.cpp @@ -191,11 +191,11 @@ namespace NYql::NDq { void Handle(TEvError::TPtr ev) { auto actorSystem = TActivationContext::ActorSystem(); auto error = ev->Get()->Error; - auto errEv = new IDqComputeActorAsyncInput::TEvAsyncInputError( + auto errEv = std::make_unique( -1, NConnector::ErrorToIssues(error), NConnector::ErrorToDqStatus(error)); - actorSystem->Send(new NActors::IEventHandle(ParentId, SelfId(), errEv)); + actorSystem->Send(new NActors::IEventHandle(ParentId, SelfId(), errEv.release())); } void Handle(NActors::TEvents::TEvPoison::TPtr) {