@@ -19,6 +19,8 @@ namespace NKikimr::NKqp {
19
19
namespace {
20
20
21
21
class TScriptFinalizerActor : public TActorBootstrapped <TScriptFinalizerActor> {
22
+ static constexpr size_t MAX_ARTIFACTS_SIZE_BYTES = 40_MB;
23
+
22
24
public:
23
25
TScriptFinalizerActor (TEvScriptFinalizeRequest::TPtr request,
24
26
const NKikimrConfig::TQueryServiceConfig& queryServiceConfig,
@@ -37,6 +39,14 @@ class TScriptFinalizerActor : public TActorBootstrapped<TScriptFinalizerActor> {
37
39
38
40
void CompressScriptArtifacts () const {
39
41
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
+
40
50
auto ast = description.QueryAst ;
41
51
if (Compressor.IsEnabled () && ast) {
42
52
const auto & [astCompressionMethod, astCompressed] = Compressor.Compress (*ast);
@@ -45,12 +55,15 @@ class TScriptFinalizerActor : public TActorBootstrapped<TScriptFinalizerActor> {
45
55
}
46
56
47
57
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" );
49
65
astTruncatedIssue.SetCode (NYql::DEFAULT_ERROR, NYql::TSeverityIds::S_INFO);
50
66
description.Issues .AddIssue (astTruncatedIssue);
51
-
52
- description.QueryAst = ast->substr (0 , NDataShard::NLimits::MaxWriteValueSize - 1_KB) + " ...\n (TRUNCATED)" ;
53
- description.QueryAstCompressionMethod = std::nullopt;
54
67
}
55
68
}
56
69
@@ -223,6 +236,11 @@ class TScriptFinalizerActor : public TActorBootstrapped<TScriptFinalizerActor> {
223
236
PassAway ();
224
237
}
225
238
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
+
226
244
private:
227
245
const TActorId ReplyActor;
228
246
const TString ExecutionId;
0 commit comments