[ML] Closing an unknown job should throw resource not found exception (elastic/x-pack-elasticsearch#1673)

Original commit: elastic/x-pack-elasticsearch@c244d2809b
This commit is contained in:
David Kyle 2017-06-09 10:02:51 +01:00 committed by GitHub
parent d6e92c19da
commit d64bea14dc
3 changed files with 32 additions and 5 deletions

View File

@ -563,12 +563,9 @@ public class CloseJobAction extends Action<CloseJobAction.Request, CloseJobActio
*/ */
static void resolveAndValidateJobId(String jobId, ClusterState state, List<String> openJobIds, List<String> closingJobIds, static void resolveAndValidateJobId(String jobId, ClusterState state, List<String> openJobIds, List<String> closingJobIds,
boolean allowFailed) { boolean allowFailed) {
MlMetadata mlMetadata = state.metaData().custom(MlMetadata.TYPE);
PersistentTasksCustomMetaData tasksMetaData = state.getMetaData().custom(PersistentTasksCustomMetaData.TYPE); PersistentTasksCustomMetaData tasksMetaData = state.getMetaData().custom(PersistentTasksCustomMetaData.TYPE);
MlMetadata maybeNull = state.metaData().custom(MlMetadata.TYPE);
if (mlMetadata.getJobs().isEmpty()) { final MlMetadata mlMetadata = (maybeNull == null) ? MlMetadata.EMPTY_METADATA : maybeNull;
return;
}
List<String> failedJobs = new ArrayList<>(); List<String> failedJobs = new ArrayList<>();
@ -582,6 +579,9 @@ public class CloseJobAction extends Action<CloseJobAction.Request, CloseJobActio
}; };
if (!Job.ALL.equals(jobId)) { if (!Job.ALL.equals(jobId)) {
if (mlMetadata.getJobs().containsKey(jobId) == false) {
throw ExceptionsHelper.missingJobException(jobId);
}
jobIdProcessor.accept(jobId); jobIdProcessor.accept(jobId);
if (allowFailed == false && failedJobs.size() > 0) { if (allowFailed == false && failedJobs.size() > 0) {

View File

@ -177,6 +177,21 @@ public class CloseJobActionRequestTests extends AbstractStreamableXContentTestCa
assertEquals(Collections.emptyList(), closingJobs); assertEquals(Collections.emptyList(), closingJobs);
} }
public void testResolve_throwsWithUnknownJobId() {
MlMetadata.Builder mlBuilder = new MlMetadata.Builder();
mlBuilder.putJob(BaseMlIntegTestCase.createFareQuoteJob("job_id_1").build(new Date()), false);
ClusterState cs1 = ClusterState.builder(new ClusterName("_name"))
.metaData(new MetaData.Builder().putCustom(MlMetadata.TYPE, mlBuilder.build()))
.build();
List<String> openJobs = new ArrayList<>();
List<String> closingJobs = new ArrayList<>();
expectThrows(ResourceNotFoundException.class,
() -> CloseJobAction.resolveAndValidateJobId("missing-job", cs1, openJobs, closingJobs, false));
}
public void testResolve_givenJobIdFailed() { public void testResolve_givenJobIdFailed() {
MlMetadata.Builder mlBuilder = new MlMetadata.Builder(); MlMetadata.Builder mlBuilder = new MlMetadata.Builder();
mlBuilder.putJob(BaseMlIntegTestCase.createFareQuoteJob("job_id_failed").build(new Date()), false); mlBuilder.putJob(BaseMlIntegTestCase.createFareQuoteJob("job_id_failed").build(new Date()), false);

View File

@ -572,6 +572,18 @@
force: true force: true
- match: { closed: true } - match: { closed: true }
---
"Test open and close an unknown job is resource not found":
- do:
catch: missing
xpack.ml.open_job:
job_id: jobs-crud-some-missing-job-i-made-up
- do:
catch: missing
xpack.ml.close_job:
job_id: jobs-crud-some-missing-job-i-made-up
--- ---
"Test cannot create job with existing categorizer state document": "Test cannot create job with existing categorizer state document":