diff --git a/ydb/core/fq/libs/checkpoint_storage/ydb_checkpoint_storage.cpp b/ydb/core/fq/libs/checkpoint_storage/ydb_checkpoint_storage.cpp index 3f4a228b93f2..61858bccd96e 100644 --- a/ydb/core/fq/libs/checkpoint_storage/ydb_checkpoint_storage.cpp +++ b/ydb/core/fq/libs/checkpoint_storage/ydb_checkpoint_storage.cpp @@ -805,10 +805,16 @@ TFuture TCheckpointStorage::CreateC return future.Apply( [checkpointContext](const TFuture& future) { - if (NYql::TIssues issues = StatusToIssues(future.GetValue())) { - return TCreateCheckpointResult(TString(), std::move(issues)); - } else { - return TCreateCheckpointResult(checkpointContext->CheckpointGraphDescriptionContext->GraphDescId, NYql::TIssues()); + try { + if (NYql::TIssues issues = StatusToIssues(future.GetValue())) { + return TCreateCheckpointResult(TString(), std::move(issues)); + } else { + return TCreateCheckpointResult(checkpointContext->CheckpointGraphDescriptionContext->GraphDescId, NYql::TIssues()); + } + } catch (...) { + TIssues issues; + issues.AddIssue(CurrentExceptionMessage()); + return TCreateCheckpointResult(TString(), issues); } }); } @@ -1099,7 +1105,13 @@ TFuture TCheckpointStor }); return future.Apply( [result](const TFuture& status) { - return std::make_pair(std::move(result->Size), std::move(status.GetValue().GetIssues())); + try { + return std::make_pair(std::move(result->Size), std::move(status.GetValue().GetIssues())); + } catch (...) { + TIssues issues; + issues.AddIssue(CurrentExceptionMessage()); + return ICheckpointStorage::TGetTotalCheckpointsStateSizeResult(0, issues); + } }); } diff --git a/ydb/core/fq/libs/checkpoint_storage/ydb_state_storage.cpp b/ydb/core/fq/libs/checkpoint_storage/ydb_state_storage.cpp index 1fe0e7794944..ae6e7c9439e5 100644 --- a/ydb/core/fq/libs/checkpoint_storage/ydb_state_storage.cpp +++ b/ydb/core/fq/libs/checkpoint_storage/ydb_state_storage.cpp @@ -286,6 +286,7 @@ TFuture TStateStorage::GetState( return MakeFuture(result); } + auto context = MakeIntrusive( YdbConnection->TablePathPrefix, taskIds, @@ -366,11 +367,18 @@ TFuture TStateStorage::CountStates( [context] (const TFuture& future) { TCountStatesResult countResult; countResult.first = context->Count; - const auto& status = future.GetValue(); - if (!status.IsSuccess()) { - countResult.second = status.GetIssues(); + try { + const auto& status = future.GetValue(); + if (!status.IsSuccess()) { + countResult.second = status.GetIssues(); + } + } catch (...) { + TIssues issues; + issues.AddIssue(CurrentExceptionMessage()); + countResult.second = issues; } return countResult; + }); } TExecDataQuerySettings TStateStorage::DefaultExecDataQuerySettings() { diff --git a/ydb/core/fq/libs/ydb/ut/ya.make b/ydb/core/fq/libs/ydb/ut/ya.make new file mode 100644 index 000000000000..e96a95760f6c --- /dev/null +++ b/ydb/core/fq/libs/ydb/ut/ya.make @@ -0,0 +1,12 @@ +UNITTEST_FOR(ydb/core/fq/libs/ydb) + +SRCS( + ydb_ut.cpp +) + +PEERDIR( + ydb/core/fq/libs/ydb +) + +END() + diff --git a/ydb/core/fq/libs/ydb/ut/ydb_ut.cpp b/ydb/core/fq/libs/ydb/ut/ydb_ut.cpp new file mode 100644 index 000000000000..a567c93a7635 --- /dev/null +++ b/ydb/core/fq/libs/ydb/ut/ydb_ut.cpp @@ -0,0 +1,23 @@ +#include + +#include + +namespace NFq { + +Y_UNIT_TEST_SUITE(TFqYdbTest) { + + Y_UNIT_TEST(ShouldStatusToIssuesProcessExceptions) + { + auto promise = NThreading::NewPromise(); + auto future = promise.GetFuture(); + TString text("Test exception"); + promise.SetException(text); + NThreading::TFuture future2 = NFq::StatusToIssues(future); + + NYql::TIssues issues = future2.GetValueSync(); + UNIT_ASSERT(issues.Size() == 1); + UNIT_ASSERT(issues.ToString().Contains(text)); + } +}; + +} // namespace NFq diff --git a/ydb/core/fq/libs/ydb/ya.make b/ydb/core/fq/libs/ydb/ya.make index 887219ddac96..6e392e79c13b 100644 --- a/ydb/core/fq/libs/ydb/ya.make +++ b/ydb/core/fq/libs/ydb/ya.make @@ -24,3 +24,7 @@ GENERATE_ENUM_SERIALIZATION(ydb.h) YQL_LAST_ABI_VERSION() END() + +RECURSE_FOR_TESTS( + ut +) diff --git a/ydb/core/fq/libs/ydb/ydb.cpp b/ydb/core/fq/libs/ydb/ydb.cpp index ca72290bccc0..bd07edc39bc1 100644 --- a/ydb/core/fq/libs/ydb/ydb.cpp +++ b/ydb/core/fq/libs/ydb/ydb.cpp @@ -210,7 +210,13 @@ NYql::TIssues StatusToIssues(const NYdb::TStatus& status) { TFuture StatusToIssues(const TFuture& future) { return future.Apply( [] (const TFuture& future) { - return StatusToIssues(future.GetValue()); + try { + return StatusToIssues(future.GetValue()); + } catch (...) { + TIssues issues; + issues.AddIssue(CurrentExceptionMessage()); + return issues; + } }); }