Skip to content

Commit a4a9baf

Browse files
committed
fix memory leak in peformance tests
1 parent 479dab2 commit a4a9baf

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

tests/performance-tests/include/performance-tests/reporting/JsonReportingMetrics.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@ struct PerformanceMetricRecord {
3737
Aws::Map<Aws::String, Aws::String> dimensions;
3838
};
3939

40+
/**
41+
* Context will be shared between monitor invocations.
42+
*/
43+
struct RequestContext;
44+
4045
/**
4146
* An implementation of the MonitoringInterface that collects performance metrics
4247
* and reports them in a JSON format.
@@ -150,6 +155,7 @@ class JsonReportingMetrics : public Aws::Monitoring::MonitoringInterface {
150155
void WriteJsonToFile(const Aws::Utils::Json::JsonValue& root) const;
151156

152157
mutable Aws::Vector<PerformanceMetricRecord> m_performanceRecords;
158+
mutable Aws::UnorderedMap<Aws::String, Aws::UniquePtr<RequestContext>> m_requestContexts;
153159
Aws::Set<Aws::String> m_monitoredOperations;
154160
Aws::String m_productId;
155161
Aws::String m_sdkVersion;

tests/performance-tests/src/reporting/JsonReportingMetrics.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@
2727

2828
using namespace PerformanceTest::Reporting;
2929

30-
struct RequestContext {
30+
struct PerformanceTest::Reporting::RequestContext {
31+
Aws::Utils::UUID requestId{Aws::Utils::UUID::RandomUUID()};
3132
Aws::String serviceName;
3233
Aws::String requestName;
3334
std::shared_ptr<const Aws::Http::HttpRequest> request;
@@ -107,8 +108,10 @@ void JsonReportingMetrics::AddPerformanceRecord(const Aws::String& serviceName,
107108

108109
void* JsonReportingMetrics::OnRequestStarted(const Aws::String&, const Aws::String&,
109110
const std::shared_ptr<const Aws::Http::HttpRequest>&) const {
110-
auto context = Aws::New<RequestContext>("RequestContext");
111-
return context;
111+
auto context = Aws::MakeUnique<RequestContext>("RequestContext");
112+
auto requestID = context->requestId;
113+
m_requestContexts.emplace(requestID, std::move(context));
114+
return m_requestContexts[requestID].get();
112115
}
113116

114117
void JsonReportingMetrics::OnRequestSucceeded(const Aws::String& serviceName, const Aws::String& requestName,
@@ -136,7 +139,7 @@ void JsonReportingMetrics::OnFinish(const Aws::String&, const Aws::String&, cons
136139
AddPerformanceRecord(requestContext->serviceName, requestContext->requestName, requestContext->request, requestContext->durationMs);
137140
}
138141

139-
Aws::Delete(requestContext);
142+
m_requestContexts.erase(requestContext->requestId);
140143
}
141144

142145
void JsonReportingMetrics::DumpJson() const {

0 commit comments

Comments
 (0)