Skip to content

Commit 36fed6d

Browse files
authored
YQ-3568 fix error sent large get operation (ydb-platform#8073)
1 parent d3f247f commit 36fed6d

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

Lines changed: 22 additions & 4 deletions
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,
@@ -35,6 +37,14 @@ class TScriptFinalizerActor : public TActorBootstrapped<TScriptFinalizerActor> {
3537

3638
void CompressScriptArtifacts() const {
3739
auto& description = Request->Get()->Description;
40+
41+
TString astTruncateDescription;
42+
if (size_t planSize = description.QueryPlan.value_or("").size(); description.QueryAst && description.QueryAst->size() + planSize > MAX_ARTIFACTS_SIZE_BYTES) {
43+
astTruncateDescription = TStringBuilder() << "Query artifacts size is " << description.QueryAst->size() + planSize << " bytes (plan + ast), that is larger than allowed limit " << MAX_ARTIFACTS_SIZE_BYTES << " bytes, ast was truncated";
44+
size_t toRemove = std::min(description.QueryAst->size() + planSize - MAX_ARTIFACTS_SIZE_BYTES, description.QueryAst->size());
45+
description.QueryAst = TruncateString(*description.QueryAst, description.QueryAst->size() - toRemove);
46+
}
47+
3848
auto ast = description.QueryAst;
3949
if (Compressor.IsEnabled() && ast) {
4050
const auto& [astCompressionMethod, astCompressed] = Compressor.Compress(*ast);
@@ -43,12 +53,15 @@ class TScriptFinalizerActor : public TActorBootstrapped<TScriptFinalizerActor> {
4353
}
4454

4555
if (description.QueryAst && description.QueryAst->size() > NDataShard::NLimits::MaxWriteValueSize) {
46-
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");
56+
astTruncateDescription = TStringBuilder() << "Query ast size is " << description.QueryAst->size() << " bytes, that is larger than allowed limit " << NDataShard::NLimits::MaxWriteValueSize << " bytes, ast was truncated";
57+
description.QueryAst = TruncateString(*ast, NDataShard::NLimits::MaxWriteValueSize - 1_KB);
58+
description.QueryAstCompressionMethod = std::nullopt;
59+
}
60+
61+
if (astTruncateDescription) {
62+
NYql::TIssue astTruncatedIssue(astTruncateDescription);
4763
astTruncatedIssue.SetCode(NYql::DEFAULT_ERROR, NYql::TSeverityIds::S_INFO);
4864
description.Issues.AddIssue(astTruncatedIssue);
49-
50-
description.QueryAst = ast->substr(0, NDataShard::NLimits::MaxWriteValueSize - 1_KB) + "...\n(TRUNCATED)";
51-
description.QueryAstCompressionMethod = std::nullopt;
5265
}
5366
}
5467

@@ -221,6 +234,11 @@ class TScriptFinalizerActor : public TActorBootstrapped<TScriptFinalizerActor> {
221234
PassAway();
222235
}
223236

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

0 commit comments

Comments
 (0)