Skip to content

Commit 627faf1

Browse files
authored
[7.x] [ML][Analytics] fix bug where regression deleted early does not delete state (#47885) (#47914)
* [ML][Analytics] fix bug where regression deleted early does not delete state (#47885) * [ML][Analytics] fix bug where regression deleted early does not delete state * Fixing ml with security test failure * fixing for older java
1 parent 7f01b0a commit 627faf1

File tree

2 files changed

+90
-4
lines changed

2 files changed

+90
-4
lines changed

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

+11-4
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@
5050
import org.elasticsearch.xpack.ml.utils.MlIndicesUtils;
5151

5252
import java.io.IOException;
53+
import java.util.ArrayList;
54+
import java.util.List;
5355
import java.util.Objects;
5456

5557
import static org.elasticsearch.xpack.core.ClientHelper.ML_ORIGIN;
@@ -138,7 +140,7 @@ protected void masterOperation(Task task, DeleteDataFrameAnalyticsAction.Request
138140

139141
// Step 2. Delete state
140142
ActionListener<DataFrameAnalyticsConfig> configListener = ActionListener.wrap(
141-
config -> deleteState(parentTaskClient, id, deleteStateHandler),
143+
config -> deleteState(parentTaskClient, config, deleteStateHandler),
142144
listener::onFailure
143145
);
144146

@@ -165,11 +167,16 @@ private void deleteConfig(ParentTaskAssigningClient parentTaskClient, String id,
165167
));
166168
}
167169

168-
private void deleteState(ParentTaskAssigningClient parentTaskClient, String analyticsId,
170+
private void deleteState(ParentTaskAssigningClient parentTaskClient,
171+
DataFrameAnalyticsConfig config,
169172
ActionListener<BulkByScrollResponse> listener) {
173+
List<String> ids = new ArrayList<>();
174+
ids.add(DataFrameAnalyticsTask.progressDocId(config.getId()));
175+
if (config.getAnalysis().persistsState()) {
176+
ids.add(config.getAnalysis().getStateDocId(config.getId()));
177+
}
170178
DeleteByQueryRequest request = new DeleteByQueryRequest(AnomalyDetectorsIndex.jobStateIndexPattern());
171-
request.setQuery(QueryBuilders.idsQuery().addIds(
172-
DataFrameAnalyticsTask.progressDocId(analyticsId)));
179+
request.setQuery(QueryBuilders.idsQuery().addIds(ids.toArray(new String[0])));
173180
request.setIndicesOptions(MlIndicesUtils.addIgnoreUnavailable(IndicesOptions.lenientExpandOpen()));
174181
request.setSlices(AbstractBulkByScrollRequest.AUTO_SLICES);
175182
request.setAbortOnVersionConflict(false);

x-pack/plugin/src/test/resources/rest-api-spec/test/ml/data_frame_analytics_crud.yml

+79
Original file line numberDiff line numberDiff line change
@@ -900,6 +900,85 @@ setup:
900900
ml.delete_data_frame_analytics:
901901
id: "missing_config"
902902

903+
---
904+
"Test delete given config and state documents":
905+
- skip:
906+
features: headers
907+
- do:
908+
ml.put_data_frame_analytics:
909+
id: "delete_foo"
910+
body: >
911+
{
912+
"source": {
913+
"index": "index-source"
914+
},
915+
"dest": {
916+
"index": "index-dest"
917+
},
918+
"analysis": {"regression":{
919+
"dependent_variable": "to_predict"
920+
}}
921+
}
922+
- do:
923+
headers:
924+
Authorization: "Basic eF9wYWNrX3Jlc3RfdXNlcjp4LXBhY2stdGVzdC1wYXNzd29yZA==" # run as x_pack_rest_user, i.e. the test setup superuser
925+
index:
926+
index: .ml-state
927+
id: "delete_foo_regression_state#1"
928+
body: >
929+
{
930+
}
931+
932+
- do:
933+
headers:
934+
Authorization: "Basic eF9wYWNrX3Jlc3RfdXNlcjp4LXBhY2stdGVzdC1wYXNzd29yZA==" # run as x_pack_rest_user, i.e. the test setup superuser
935+
index:
936+
index: .ml-state
937+
id: "data_frame_analytics-delete_foo-progress"
938+
body: >
939+
{
940+
}
941+
942+
- do:
943+
headers:
944+
Authorization: "Basic eF9wYWNrX3Jlc3RfdXNlcjp4LXBhY2stdGVzdC1wYXNzd29yZA==" # run as x_pack_rest_user, i.e. the test setup superuser
945+
indices.refresh:
946+
index: .ml-state
947+
948+
- do:
949+
search:
950+
index: .ml-state
951+
body:
952+
size: 0
953+
query:
954+
bool:
955+
filter:
956+
ids:
957+
values:
958+
- "data_frame_analytics-delete_foo-progress"
959+
- "delete_foo_regression_state#1"
960+
961+
- match: { hits.total.value: 2 }
962+
963+
- do:
964+
ml.delete_data_frame_analytics:
965+
id: "delete_foo"
966+
- match: { acknowledged: true }
967+
968+
- do:
969+
search:
970+
index: .ml-state*
971+
body:
972+
size: 0
973+
query:
974+
bool:
975+
filter:
976+
ids:
977+
values:
978+
- "data_frame_analytics-delete_foo-progress"
979+
- "delete_foo_regression_state#1"
980+
- match: { hits.total.value: 0 }
981+
903982
---
904983
"Test max model memory limit":
905984
- skip:

0 commit comments

Comments
 (0)