Skip to content

Commit 168fd12

Browse files
committed
Fix get a single job
1 parent e647611 commit 168fd12

File tree

3 files changed

+33
-6
lines changed

3 files changed

+33
-6
lines changed

x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/job/JobManager.java

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ private void getJobFromClusterState(String jobId, ActionListener<Job> jobListene
170170
* @param jobsListener The jobs listener
171171
*/
172172
public void expandJobs(String expression, boolean allowNoJobs, ActionListener<QueryPage<Job>> jobsListener) {
173-
Map<String, Job> clusterStateJobs = expandJobsFromClusterState(expression, allowNoJobs, clusterService.state());
173+
Map<String, Job> clusterStateJobs = expandJobsFromClusterState(expression, clusterService.state());
174174

175175
jobConfigProvider.expandJobs(expression, allowNoJobs, ActionListener.wrap(
176176
jobBuilders -> {
@@ -197,12 +197,20 @@ public void expandJobs(String expression, boolean allowNoJobs, ActionListener<Qu
197197
));
198198
}
199199

200-
private Map<String, Job> expandJobsFromClusterState(String expression, boolean allowNoJobs, ClusterState clusterState) {
201-
Set<String> expandedJobIds = MlMetadata.getMlMetadata(clusterState).expandJobIds(expression, allowNoJobs);
202-
MlMetadata mlMetadata = MlMetadata.getMlMetadata(clusterState);
200+
private Map<String, Job> expandJobsFromClusterState(String expression, ClusterState clusterState) {
203201
Map<String, Job> jobIdToJob = new HashMap<>();
204-
for (String expandedJobId : expandedJobIds) {
205-
jobIdToJob.put(expandedJobId, mlMetadata.getJobs().get(expandedJobId));
202+
MlMetadata mlMetadata = MlMetadata.getMlMetadata(clusterState);
203+
try {
204+
// This call will throw if the expression is not a wild card
205+
// and the job does not exist. This is not the behaviour we
206+
// want as the job may exist in the index.
207+
// TODO jindex review the use of this function. Can it be changed not to throw in a BWC manner?
208+
Set<String> expandedJobIds = mlMetadata.expandJobIds(expression, true);
209+
for (String expandedJobId : expandedJobIds) {
210+
jobIdToJob.put(expandedJobId, mlMetadata.getJobs().get(expandedJobId));
211+
}
212+
} catch (ResourceNotFoundException e) {
213+
return jobIdToJob;
206214
}
207215
return jobIdToJob;
208216
}

x-pack/plugin/ml/src/test/java/org/elasticsearch/xpack/ml/integration/JobConfigProviderIT.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import java.util.concurrent.atomic.AtomicReference;
4343
import java.util.stream.Collectors;
4444

45+
import static org.hamcrest.Matchers.contains;
4546
import static org.hamcrest.Matchers.containsInAnyOrder;
4647
import static org.hamcrest.Matchers.containsString;
4748
import static org.hamcrest.Matchers.empty;
@@ -342,6 +343,11 @@ public void testExpandJobs_GroupsAndJobIds() throws Exception {
342343
expandedJobs = expandedJobsBuilders.stream().map(Job.Builder::build).collect(Collectors.toList());
343344
assertThat(expandedJobs, containsInAnyOrder(tom, harry));
344345

346+
expandedJobsBuilders = blockingCall(actionListener ->
347+
jobConfigProvider.expandJobs("tom", false, actionListener));
348+
expandedJobs = expandedJobsBuilders.stream().map(Job.Builder::build).collect(Collectors.toList());
349+
assertThat(expandedJobs, contains(tom));
350+
345351
expandedJobsBuilders = blockingCall(actionListener ->
346352
jobConfigProvider.expandJobs("", false, actionListener));
347353
expandedJobs = expandedJobsBuilders.stream().map(Job.Builder::build).collect(Collectors.toList());

x-pack/plugin/ml/src/test/java/org/elasticsearch/xpack/ml/job/JobManagerTests.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,19 @@ public void testExpandJobsFromClusterStateAndIndex() throws IOException {
216216
assertThat(jobsHolder.get().results(), hasSize(3));
217217
jobIds = jobsHolder.get().results().stream().map(Job::getId).collect(Collectors.toList());
218218
assertThat(jobIds, contains("foo-cs-1", "foo-cs-2", "foo-index"));
219+
220+
221+
jobsHolder.set(null);
222+
jobManager.expandJobs("foo-index", true, ActionListener.wrap(
223+
jobs -> jobsHolder.set(jobs),
224+
e -> fail(e.getMessage())
225+
));
226+
227+
assertNotNull(jobsHolder.get());
228+
assertThat(jobsHolder.get().results(), hasSize(1));
229+
jobIds = jobsHolder.get().results().stream().map(Job::getId).collect(Collectors.toList());
230+
assertThat(jobIds, contains("foo-index"));
231+
219232
}
220233

221234
@SuppressWarnings("unchecked")

0 commit comments

Comments
 (0)