[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
This commit is contained in:
Benjamin Trent 2019-10-11 15:11:16 -04:00 committed by GitHub
parent 7f01b0a670
commit 627faf1850
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 90 additions and 4 deletions

View File

@ -50,6 +50,8 @@ import org.elasticsearch.xpack.ml.process.MlMemoryTracker;
import org.elasticsearch.xpack.ml.utils.MlIndicesUtils; import org.elasticsearch.xpack.ml.utils.MlIndicesUtils;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects; import java.util.Objects;
import static org.elasticsearch.xpack.core.ClientHelper.ML_ORIGIN; import static org.elasticsearch.xpack.core.ClientHelper.ML_ORIGIN;
@ -138,7 +140,7 @@ public class TransportDeleteDataFrameAnalyticsAction
// Step 2. Delete state // Step 2. Delete state
ActionListener<DataFrameAnalyticsConfig> configListener = ActionListener.wrap( ActionListener<DataFrameAnalyticsConfig> configListener = ActionListener.wrap(
config -> deleteState(parentTaskClient, id, deleteStateHandler), config -> deleteState(parentTaskClient, config, deleteStateHandler),
listener::onFailure listener::onFailure
); );
@ -165,11 +167,16 @@ public class TransportDeleteDataFrameAnalyticsAction
)); ));
} }
private void deleteState(ParentTaskAssigningClient parentTaskClient, String analyticsId, private void deleteState(ParentTaskAssigningClient parentTaskClient,
DataFrameAnalyticsConfig config,
ActionListener<BulkByScrollResponse> listener) { ActionListener<BulkByScrollResponse> listener) {
List<String> ids = new ArrayList<>();
ids.add(DataFrameAnalyticsTask.progressDocId(config.getId()));
if (config.getAnalysis().persistsState()) {
ids.add(config.getAnalysis().getStateDocId(config.getId()));
}
DeleteByQueryRequest request = new DeleteByQueryRequest(AnomalyDetectorsIndex.jobStateIndexPattern()); DeleteByQueryRequest request = new DeleteByQueryRequest(AnomalyDetectorsIndex.jobStateIndexPattern());
request.setQuery(QueryBuilders.idsQuery().addIds( request.setQuery(QueryBuilders.idsQuery().addIds(ids.toArray(new String[0])));
DataFrameAnalyticsTask.progressDocId(analyticsId)));
request.setIndicesOptions(MlIndicesUtils.addIgnoreUnavailable(IndicesOptions.lenientExpandOpen())); request.setIndicesOptions(MlIndicesUtils.addIgnoreUnavailable(IndicesOptions.lenientExpandOpen()));
request.setSlices(AbstractBulkByScrollRequest.AUTO_SLICES); request.setSlices(AbstractBulkByScrollRequest.AUTO_SLICES);
request.setAbortOnVersionConflict(false); request.setAbortOnVersionConflict(false);

View File

@ -900,6 +900,85 @@ setup:
ml.delete_data_frame_analytics: ml.delete_data_frame_analytics:
id: "missing_config" id: "missing_config"
---
"Test delete given config and state documents":
- skip:
features: headers
- do:
ml.put_data_frame_analytics:
id: "delete_foo"
body: >
{
"source": {
"index": "index-source"
},
"dest": {
"index": "index-dest"
},
"analysis": {"regression":{
"dependent_variable": "to_predict"
}}
}
- do:
headers:
Authorization: "Basic eF9wYWNrX3Jlc3RfdXNlcjp4LXBhY2stdGVzdC1wYXNzd29yZA==" # run as x_pack_rest_user, i.e. the test setup superuser
index:
index: .ml-state
id: "delete_foo_regression_state#1"
body: >
{
}
- do:
headers:
Authorization: "Basic eF9wYWNrX3Jlc3RfdXNlcjp4LXBhY2stdGVzdC1wYXNzd29yZA==" # run as x_pack_rest_user, i.e. the test setup superuser
index:
index: .ml-state
id: "data_frame_analytics-delete_foo-progress"
body: >
{
}
- do:
headers:
Authorization: "Basic eF9wYWNrX3Jlc3RfdXNlcjp4LXBhY2stdGVzdC1wYXNzd29yZA==" # run as x_pack_rest_user, i.e. the test setup superuser
indices.refresh:
index: .ml-state
- do:
search:
index: .ml-state
body:
size: 0
query:
bool:
filter:
ids:
values:
- "data_frame_analytics-delete_foo-progress"
- "delete_foo_regression_state#1"
- match: { hits.total.value: 2 }
- do:
ml.delete_data_frame_analytics:
id: "delete_foo"
- match: { acknowledged: true }
- do:
search:
index: .ml-state*
body:
size: 0
query:
bool:
filter:
ids:
values:
- "data_frame_analytics-delete_foo-progress"
- "delete_foo_regression_state#1"
- match: { hits.total.value: 0 }
--- ---
"Test max model memory limit": "Test max model memory limit":
- skip: - skip: