Skip to content

Commit

Permalink
improve exception safety while handling compile errors (fixes #4488)
Browse files Browse the repository at this point in the history
  • Loading branch information
gridnevvvit committed May 24, 2024
1 parent d25e35f commit 39edead
Showing 1 changed file with 16 additions and 9 deletions.
25 changes: 16 additions & 9 deletions ydb/core/kqp/compile_service/kqp_compile_actor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ class TKqpCompileActor : public TActorBootstrapped<TKqpCompileActor> {
TVector<TQueryAst> GetAstStatements(const TActorContext &ctx) {
TString cluster = QueryId.Cluster;
ui16 kqpYqlSyntaxVersion = Config->_KqpYqlSyntaxVersion.Get().GetRef();

TKqpTranslationSettingsBuilder settingsBuilder(ConvertType(QueryId.Settings.QueryType), kqpYqlSyntaxVersion, cluster, QueryId.Text, Config->BindingsMode, GUCSettings);
settingsBuilder.SetKqpTablePathPrefix(Config->_KqpTablePathPrefix.Get().GetRef())
.SetIsEnableExternalDataSources(AppData(ctx)->FeatureFlags.GetEnableExternalDataSources())
Expand Down Expand Up @@ -352,15 +352,16 @@ class TKqpCompileActor : public TActorBootstrapped<TKqpCompileActor> {
ReplayMessage = std::move(message);
}

void Reply(const TKqpCompileResult::TConstPtr& compileResult) {
void Reply() {
Y_ENSURE(KqpCompileResult);
ALOG_DEBUG(NKikimrServices::KQP_COMPILE_ACTOR, "Send response"
<< ", self: " << SelfId()
<< ", owner: " << Owner
<< ", status: " << compileResult->Status
<< ", issues: " << compileResult->Issues.ToString()
<< ", uid: " << compileResult->Uid);
<< ", status: " << KqpCompileResult->Status
<< ", issues: " << KqpCompileResult->Issues.ToString()
<< ", uid: " << KqpCompileResult->Uid);

auto responseEv = MakeHolder<TEvKqp::TEvCompileResponse>(compileResult);
auto responseEv = MakeHolder<TEvKqp::TEvCompileResponse>(KqpCompileResult);

responseEv->ReplayMessage = std::move(ReplayMessage);
responseEv->ReplayMessageUserView = std::move(ReplayMessageUserView);
Expand All @@ -382,7 +383,13 @@ class TKqpCompileActor : public TActorBootstrapped<TKqpCompileActor> {
}

void ReplyError(Ydb::StatusIds::StatusCode status, const TIssues& issues) {
Reply(TKqpCompileResult::Make(Uid, status, issues, ETableReadType::Other, std::move(QueryId)));
if (!KqpCompileResult) {
KqpCompileResult = TKqpCompileResult::Make(Uid, status, issues, ETableReadType::Other, std::move(QueryId));
} else {
KqpCompileResult = TKqpCompileResult::Make(Uid, status, issues, ETableReadType::Other, std::move(KqpCompileResult->Query));
}

Reply();
}

void InternalError(const TString message) {
Expand Down Expand Up @@ -477,7 +484,7 @@ class TKqpCompileActor : public TActorBootstrapped<TKqpCompileActor> {
if (kqpResult.NeedToSplit) {
KqpCompileResult = TKqpCompileResult::Make(
Uid, status, kqpResult.Issues(), ETableReadType::Other, std::move(QueryId), {}, true);
Reply(KqpCompileResult);
Reply();
return;
}

Expand Down Expand Up @@ -520,7 +527,7 @@ class TKqpCompileActor : public TActorBootstrapped<TKqpCompileActor> {
Counters->ReportCompileError(DbCounters);
}

Reply(KqpCompileResult);
Reply();
}

void HandleTimeout() {
Expand Down

0 comments on commit 39edead

Please sign in to comment.