Skip to content

Commit b7187f4

Browse files
committed
pull memory leak fix from main
1 parent 3fea980 commit b7187f4

File tree

2 files changed

+18
-9
lines changed

2 files changed

+18
-9
lines changed

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

Lines changed: 11 additions & 5 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.
@@ -58,17 +63,17 @@ class JsonReportingMetrics : public Aws::Monitoring::MonitoringInterface {
5863
~JsonReportingMetrics() override;
5964

6065
/**
61-
* Called when an AWS request is started. Returns context for tracking.
66+
* Called when an AWS request is started. Creates and returns context for tracking.
6267
* @param serviceName Name of the AWS service
6368
* @param requestName Name of the operation
6469
* @param request HTTP request object
65-
* @return Context pointer (always returns nullptr)
70+
* @return Context pointer to newly created RequestContext
6671
*/
6772
void* OnRequestStarted(const Aws::String& serviceName, const Aws::String& requestName,
6873
const std::shared_ptr<const Aws::Http::HttpRequest>& request) const override;
6974

7075
/**
71-
* Called when an AWS request succeeds. Records performance metrics.
76+
* Called when an AWS request succeeds. Stores latency metrics in context.
7277
* @param serviceName Name of the AWS service
7378
* @param requestName Name of the operation
7479
* @param request HTTP request object
@@ -81,7 +86,7 @@ class JsonReportingMetrics : public Aws::Monitoring::MonitoringInterface {
8186
const Aws::Monitoring::CoreMetricsCollection& metrics, void* context) const override;
8287

8388
/**
84-
* Called when an AWS request fails. Records performance metrics.
89+
* Called when an AWS request fails. Stores latency metrics in context.
8590
* @param serviceName Name of the AWS service
8691
* @param requestName Name of the operation
8792
* @param request HTTP request object
@@ -104,7 +109,7 @@ class JsonReportingMetrics : public Aws::Monitoring::MonitoringInterface {
104109
const std::shared_ptr<const Aws::Http::HttpRequest>& request, void* context) const override;
105110

106111
/**
107-
* Called when an AWS request finishes. No action taken.
112+
* Called when an AWS request finishes. Processes stored metrics and cleans up context.
108113
* @param serviceName Name of the AWS service
109114
* @param requestName Name of the operation
110115
* @param request HTTP request object
@@ -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)