Skip to content

Commit 5fcb0bc

Browse files
Fix memory leak in TransportDeleteExpiredDataAction (#89935) (#89945)
We can loose the listener here because the downstream code in `deleteExpiredData` might throw.
1 parent ffc9ff1 commit 5fcb0bc

File tree

2 files changed

+24
-10
lines changed

2 files changed

+24
-10
lines changed

docs/changelog/89935.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pr: 89935
2+
summary: Fix memory leak in `TransportDeleteExpiredDataAction`
3+
area: Machine Learning
4+
type: bug
5+
issues: []

x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/action/TransportDeleteExpiredDataAction.java

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.apache.logging.log4j.LogManager;
1010
import org.apache.logging.log4j.Logger;
1111
import org.elasticsearch.action.ActionListener;
12+
import org.elasticsearch.action.ActionRunnable;
1213
import org.elasticsearch.action.support.ActionFilters;
1314
import org.elasticsearch.action.support.HandledTransportAction;
1415
import org.elasticsearch.action.support.ThreadedActionListener;
@@ -137,17 +138,25 @@ protected void doExecute(
137138
if (Strings.isNullOrEmpty(request.getJobId()) || Strings.isAllOrWildcard(request.getJobId())) {
138139
List<MlDataRemover> dataRemovers = createDataRemovers(client, taskId, anomalyDetectionAuditor);
139140
threadPool.executor(MachineLearning.UTILITY_THREAD_POOL_NAME)
140-
.execute(() -> deleteExpiredData(request, dataRemovers, listener, isTimedOutSupplier));
141+
.execute(ActionRunnable.wrap(listener, l -> deleteExpiredData(request, dataRemovers, l, isTimedOutSupplier)));
141142
} else {
142-
jobConfigProvider.expandJobs(request.getJobId(), false, true, null, ActionListener.wrap(jobBuilders -> {
143-
threadPool.executor(MachineLearning.UTILITY_THREAD_POOL_NAME).execute(() -> {
144-
List<Job> jobs = jobBuilders.stream().map(Job.Builder::build).collect(Collectors.toList());
145-
String[] jobIds = jobs.stream().map(Job::getId).toArray(String[]::new);
146-
request.setExpandedJobIds(jobIds);
147-
List<MlDataRemover> dataRemovers = createDataRemovers(jobs, taskId, anomalyDetectionAuditor);
148-
deleteExpiredData(request, dataRemovers, listener, isTimedOutSupplier);
149-
});
150-
}, listener::onFailure));
143+
jobConfigProvider.expandJobs(
144+
request.getJobId(),
145+
false,
146+
true,
147+
null,
148+
ActionListener.wrap(
149+
jobBuilders -> threadPool.executor(MachineLearning.UTILITY_THREAD_POOL_NAME)
150+
.execute(ActionRunnable.wrap(listener, l -> {
151+
List<Job> jobs = jobBuilders.stream().map(Job.Builder::build).collect(Collectors.toList());
152+
String[] jobIds = jobs.stream().map(Job::getId).toArray(String[]::new);
153+
request.setExpandedJobIds(jobIds);
154+
List<MlDataRemover> dataRemovers = createDataRemovers(jobs, taskId, anomalyDetectionAuditor);
155+
deleteExpiredData(request, dataRemovers, l, isTimedOutSupplier);
156+
})),
157+
listener::onFailure
158+
)
159+
);
151160
}
152161
}
153162

0 commit comments

Comments
 (0)