Skip to content

Commit c2e3980

Browse files
authored
Merge c09b6b2 into 487f050
2 parents 487f050 + c09b6b2 commit c2e3980

File tree

1 file changed

+22
-4
lines changed

1 file changed

+22
-4
lines changed

ydb/core/kqp/finalize_script_service/kqp_finalize_script_actor.cpp

+22-4
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ namespace NKikimr::NKqp {
1919
namespace {
2020

2121
class TScriptFinalizerActor : public TActorBootstrapped<TScriptFinalizerActor> {
22+
static constexpr size_t MAX_ARTIFACTS_SIZE_BYTES = 40_MB;
23+
2224
public:
2325
TScriptFinalizerActor(TEvScriptFinalizeRequest::TPtr request,
2426
const NKikimrConfig::TQueryServiceConfig& queryServiceConfig,
@@ -37,6 +39,14 @@ class TScriptFinalizerActor : public TActorBootstrapped<TScriptFinalizerActor> {
3739

3840
void CompressScriptArtifacts() const {
3941
auto& description = Request->Get()->Description;
42+
43+
bool truncated = false;
44+
if (size_t planSize = description.QueryPlan.value_or("").size(); description.QueryAst && description.QueryAst->size() + planSize > MAX_ARTIFACTS_SIZE_BYTES) {
45+
size_t toRemove = std::min(description.QueryAst->size() + planSize - MAX_ARTIFACTS_SIZE_BYTES, description.QueryAst->size());
46+
description.QueryAst = TruncateString(*description.QueryAst, description.QueryAst->size() - toRemove);
47+
truncated = true;
48+
}
49+
4050
auto ast = description.QueryAst;
4151
if (Compressor.IsEnabled() && ast) {
4252
const auto& [astCompressionMethod, astCompressed] = Compressor.Compress(*ast);
@@ -45,12 +55,15 @@ class TScriptFinalizerActor : public TActorBootstrapped<TScriptFinalizerActor> {
4555
}
4656

4757
if (description.QueryAst && description.QueryAst->size() > NDataShard::NLimits::MaxWriteValueSize) {
48-
NYql::TIssue astTruncatedIssue(TStringBuilder() << "Query ast size is " << description.QueryAst->size() << " bytes, that is larger than allowed limit " << NDataShard::NLimits::MaxWriteValueSize << " bytes, ast was truncated");
58+
description.QueryAst = TruncateString(*ast, NDataShard::NLimits::MaxWriteValueSize - 1_KB);
59+
description.QueryAstCompressionMethod = std::nullopt;
60+
truncated = true;
61+
}
62+
63+
if (truncated) {
64+
NYql::TIssue astTruncatedIssue("Query ast was truncated");
4965
astTruncatedIssue.SetCode(NYql::DEFAULT_ERROR, NYql::TSeverityIds::S_INFO);
5066
description.Issues.AddIssue(astTruncatedIssue);
51-
52-
description.QueryAst = ast->substr(0, NDataShard::NLimits::MaxWriteValueSize - 1_KB) + "...\n(TRUNCATED)";
53-
description.QueryAstCompressionMethod = std::nullopt;
5467
}
5568
}
5669

@@ -223,6 +236,11 @@ class TScriptFinalizerActor : public TActorBootstrapped<TScriptFinalizerActor> {
223236
PassAway();
224237
}
225238

239+
private:
240+
static TString TruncateString(const TString& str, size_t size) {
241+
return str.substr(0, std::min(str.size(), size)) + "...\n(TRUNCATED)";
242+
}
243+
226244
private:
227245
const TActorId ReplyActor;
228246
const TString ExecutionId;

0 commit comments

Comments
 (0)