Skip to content

Commit 54cad01

Browse files
committed
fix memory leak in peformance tests
1 parent f6077ff commit 54cad01

File tree

2 files changed

+18
-11
lines changed

2 files changed

+18
-11
lines changed

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,18 @@ 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+
Aws::Utils::UUID requestId{Aws::Utils::UUID::RandomUUID()};
45+
Aws::String serviceName;
46+
Aws::String requestName;
47+
std::shared_ptr<const Aws::Http::HttpRequest> request;
48+
std::variant<int64_t, double> durationMs = int64_t(0);
49+
bool failed = false;
50+
};
51+
4052
/**
4153
* An implementation of the MonitoringInterface that collects performance metrics
4254
* and reports them in a JSON format.
@@ -150,6 +162,7 @@ class JsonReportingMetrics : public Aws::Monitoring::MonitoringInterface {
150162
void WriteJsonToFile(const Aws::Utils::Json::JsonValue& root) const;
151163

152164
mutable Aws::Vector<PerformanceMetricRecord> m_performanceRecords;
165+
mutable Aws::UnorderedMap<Aws::String, Aws::UniquePtr<RequestContext>> m_requestContexts;
153166
Aws::Set<Aws::String> m_monitoredOperations;
154167
Aws::String m_productId;
155168
Aws::String m_sdkVersion;

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

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,6 @@
2727

2828
using namespace PerformanceTest::Reporting;
2929

30-
struct RequestContext {
31-
Aws::String serviceName;
32-
Aws::String requestName;
33-
std::shared_ptr<const Aws::Http::HttpRequest> request;
34-
std::variant<int64_t, double> durationMs = int64_t(0);
35-
bool failed = false;
36-
};
37-
3830
JsonReportingMetrics::JsonReportingMetrics(const Aws::Set<Aws::String>& monitoredOperations, const Aws::String& productId,
3931
const Aws::String& sdkVersion, const Aws::String& commitId, const Aws::String& outputFilename)
4032
: m_monitoredOperations(monitoredOperations),
@@ -107,8 +99,10 @@ void JsonReportingMetrics::AddPerformanceRecord(const Aws::String& serviceName,
10799

108100
void* JsonReportingMetrics::OnRequestStarted(const Aws::String&, const Aws::String&,
109101
const std::shared_ptr<const Aws::Http::HttpRequest>&) const {
110-
auto context = Aws::New<RequestContext>("RequestContext");
111-
return context;
102+
auto context = Aws::MakeUnique<RequestContext>("RequestContext");
103+
auto requestID = context->requestId;
104+
m_requestContexts.emplace(requestID, std::move(context));
105+
return m_requestContexts[requestID].get();
112106
}
113107

114108
void JsonReportingMetrics::OnRequestSucceeded(const Aws::String& serviceName, const Aws::String& requestName,
@@ -136,7 +130,7 @@ void JsonReportingMetrics::OnFinish(const Aws::String&, const Aws::String&, cons
136130
AddPerformanceRecord(requestContext->serviceName, requestContext->requestName, requestContext->request, requestContext->durationMs);
137131
}
138132

139-
Aws::Delete(requestContext);
133+
m_requestContexts.erase(requestContext->requestId);
140134
}
141135

142136
void JsonReportingMetrics::DumpJson() const {

0 commit comments

Comments
 (0)