Skip to content

Commit f407047

Browse files
authored
YQLAgent, free progress memory (#7585)
1 parent e8a6b41 commit f407047

File tree

2 files changed

+32
-24
lines changed

2 files changed

+32
-24
lines changed

ydb/library/yql/yt/bridge/interface.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,14 @@ struct TBridgeQueryResult
7373
ssize_t YsonErrorLength = 0;
7474
};
7575

76+
#define FOR_EACH_QUERY_RESULT_STRING_FIELD(XX) \
77+
XX(YsonResult) \
78+
XX(Plan) \
79+
XX(Statistics) \
80+
XX(Progress) \
81+
XX(TaskInfo) \
82+
XX(YsonError)
83+
7684
struct TBridgeClustersResult
7785
{
7886
const char** Clusters = nullptr;
@@ -82,6 +90,9 @@ struct TBridgeClustersResult
8290
ssize_t YsonErrorLength = 0;
8391
};
8492

93+
#define FOR_EACH_BRIDGE_RESULT_STRING_FIELD(XX) \
94+
XX(YsonError)
95+
8596
enum EQueryFileContentType
8697
{
8798
RawInlineData,
@@ -105,6 +116,9 @@ struct TBridgeAbortResult
105116
ssize_t YsonErrorLength = 0;
106117
};
107118

119+
#define FOR_EACH_ABORT_RESULT_STRING_FIELD(XX) \
120+
XX(YsonError)
121+
108122
using TFuncBridgeFreeQueryResult = void(TBridgeQueryResult* result);
109123
using TFuncBridgeFreeClustersResult = void(TBridgeClustersResult* result);
110124
using TFuncBridgeRun = TBridgeQueryResult*(

ydb/library/yql/yt/dynamic/impl.cpp

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ using namespace NYT::NYson;
88

99
extern "C" {
1010

11+
#define FREE_STRING_FIELD(StringField) delete[] result->StringField;
12+
#define FILL_STRING_FIELD(StringField) FillString(bridgeResult->StringField, bridgeResult->StringField##Length, result.StringField);
13+
1114
////////////////////////////////////////////////////////////////////////////////
1215

1316
ssize_t BridgeGetAbiVersion()
@@ -59,17 +62,14 @@ void BridgeFreeClustersResult(TBridgeClustersResult* result)
5962
delete[] result->Clusters[i];
6063
}
6164
delete[] result->Clusters;
62-
delete[] result->YsonError;
65+
66+
FOR_EACH_BRIDGE_RESULT_STRING_FIELD(FREE_STRING_FIELD);
6367
delete result;
6468
}
6569

6670
void BridgeFreeQueryResult(TBridgeQueryResult* result)
6771
{
68-
delete[] result->TaskInfo;
69-
delete[] result->Statistics;
70-
delete[] result->Plan;
71-
delete[] result->YsonResult;
72-
delete[] result->YsonError;
72+
FOR_EACH_QUERY_RESULT_STRING_FIELD(FREE_STRING_FIELD);
7373
delete result;
7474
}
7575

@@ -97,7 +97,7 @@ TBridgeClustersResult* BridgeGetUsedClusters(
9797
static const auto EmptyMap = TYsonString(TString("{}"));
9898

9999
auto* nativePlugin = reinterpret_cast<IYqlPlugin*>(plugin);
100-
auto* bridgeClustersResult = new TBridgeClustersResult;
100+
auto* bridgeResult = new TBridgeClustersResult;
101101

102102
std::vector<TQueryFile> files(bridgeFileCount);
103103
for (int index = 0; index < bridgeFileCount; index++) {
@@ -109,21 +109,21 @@ TBridgeClustersResult* BridgeGetUsedClusters(
109109
});
110110
}
111111

112-
auto clustersResult = nativePlugin->GetUsedClusters(
112+
auto result = nativePlugin->GetUsedClusters(
113113
TString(queryText),
114114
settings ? TYsonString(TString(settings, settingsLength)) : EmptyMap,
115115
files);
116116

117-
bridgeClustersResult->Clusters = new const char*[clustersResult.Clusters.size()];
118-
for (size_t i = 0; i < clustersResult.Clusters.size(); i++) {
117+
bridgeResult->Clusters = new const char*[result.Clusters.size()];
118+
for (size_t i = 0; i < result.Clusters.size(); i++) {
119119
ssize_t clusterLength;
120-
FillString(bridgeClustersResult->Clusters[i], clusterLength, clustersResult.Clusters[i]);
120+
FillString(bridgeResult->Clusters[i], clusterLength, result.Clusters[i]);
121121
}
122-
bridgeClustersResult->ClusterCount = clustersResult.Clusters.size();
122+
bridgeResult->ClusterCount = result.Clusters.size();
123123

124-
FillString(bridgeClustersResult->YsonError, bridgeClustersResult->YsonErrorLength, clustersResult.YsonError);
124+
FOR_EACH_BRIDGE_RESULT_STRING_FIELD(FILL_STRING_FIELD);
125125

126-
return bridgeClustersResult;
126+
return bridgeResult;
127127
}
128128

129129
TBridgeQueryResult* BridgeRun(
@@ -161,12 +161,7 @@ TBridgeQueryResult* BridgeRun(
161161
settings ? TYsonString(TString(settings, settingsLength)) : EmptyMap,
162162
files,
163163
executeMode);
164-
FillString(bridgeResult->YsonResult, bridgeResult->YsonResultLength, result.YsonResult);
165-
FillString(bridgeResult->Plan, bridgeResult->PlanLength, result.Plan);
166-
FillString(bridgeResult->Statistics, bridgeResult->StatisticsLength, result.Statistics);
167-
FillString(bridgeResult->Progress, bridgeResult->ProgressLength, result.Progress);
168-
FillString(bridgeResult->TaskInfo, bridgeResult->TaskInfoLength, result.TaskInfo);
169-
FillString(bridgeResult->YsonError, bridgeResult->YsonErrorLength, result.YsonError);
164+
FOR_EACH_QUERY_RESULT_STRING_FIELD(FILL_STRING_FIELD);
170165

171166
return bridgeResult;
172167
}
@@ -177,8 +172,7 @@ TBridgeQueryResult* BridgeGetProgress(TBridgeYqlPlugin* plugin, const char* quer
177172
auto* bridgeResult = new TBridgeQueryResult;
178173

179174
auto result = nativePlugin->GetProgress(NYT::TGuid::FromString(queryId));
180-
FillString(bridgeResult->Plan, bridgeResult->PlanLength, result.Plan);
181-
FillString(bridgeResult->Progress, bridgeResult->ProgressLength, result.Progress);
175+
FOR_EACH_QUERY_RESULT_STRING_FIELD(FILL_STRING_FIELD);
182176

183177
return bridgeResult;
184178
}
@@ -189,14 +183,14 @@ TBridgeAbortResult* BridgeAbort(TBridgeYqlPlugin* plugin, const char* queryId)
189183
auto* bridgeResult = new TBridgeAbortResult;
190184

191185
auto result = nativePlugin->Abort(NYT::TGuid::FromString(queryId));
192-
FillString(bridgeResult->YsonError, bridgeResult->YsonErrorLength, result.YsonError);
186+
FOR_EACH_ABORT_RESULT_STRING_FIELD(FILL_STRING_FIELD);
193187

194188
return bridgeResult;
195189
}
196190

197191
void BridgeFreeAbortResult(TBridgeAbortResult* result)
198192
{
199-
delete[] result->YsonError;
193+
FOR_EACH_ABORT_RESULT_STRING_FIELD(FREE_STRING_FIELD);
200194
delete result;
201195
}
202196

0 commit comments

Comments
 (0)