use of com.netflix.titus.grpc.protogen.Job in project titus-control-plane by Netflix.
the class CellWithFixedJobsService method findJobs.
@Override
public void findJobs(JobQuery request, StreamObserver<JobQueryResult> responseObserver) {
Pair<List<Job>, Pagination> page = PaginationUtil.takePageWithCursor(toPage(request.getPage()), getJobsList(), JobManagerCursors.jobCursorOrderComparator(), JobManagerCursors::jobIndexOf, JobManagerCursors::newCursorFrom);
Set<String> fieldsFilter = new HashSet<>(request.getFieldsList());
if (!fieldsFilter.isEmpty()) {
fieldsFilter.add("id");
page = page.mapLeft(jobs -> jobs.stream().map(job -> ProtobufExt.copy(job, fieldsFilter)).collect(Collectors.toList()));
}
JobQueryResult result = JobQueryResult.newBuilder().addAllItems(page.getLeft()).setPagination(toGrpcPagination(page.getRight())).build();
responseObserver.onNext(result);
responseObserver.onCompleted();
}
use of com.netflix.titus.grpc.protogen.Job in project titus-control-plane by Netflix.
the class GatewayJobServiceGateway method findTasks.
@Override
public Observable<TaskQueryResult> findTasks(TaskQuery taskQuery, CallMetadata callMetadata) {
Map<String, String> filteringCriteriaMap = taskQuery.getFilteringCriteriaMap();
Set<String> v3JobIds = new HashSet<>(StringExt.splitByComma(filteringCriteriaMap.getOrDefault("jobIds", "")));
boolean needsMigrationFilter = "true".equalsIgnoreCase(filteringCriteriaMap.getOrDefault("needsMigration", "false"));
// "needsMigration" query is served from the local job and relocation cache.
if (needsMigrationFilter) {
PageResult<Task> pageResult = needsMigrationQueryHandler.findTasks(GrpcJobQueryModelConverters.toJobQueryCriteria(taskQuery), toPage(taskQuery.getPage()));
TaskQueryResult taskQueryResult = TaskQueryResult.newBuilder().setPagination(toGrpcPagination(pageResult.getPagination())).addAllItems(taskDataInjector.injectIntoTasks(pageResult.getItems())).build();
return Observable.just(taskQueryResult);
}
Set<String> taskStates = Sets.newHashSet(StringExt.splitByComma(taskQuery.getFilteringCriteriaMap().getOrDefault("taskStates", "")));
Observable<TaskQueryResult> observable;
if (v3JobIds.isEmpty()) {
// Active task set only
observable = newActiveTaskQueryAction(taskQuery, callMetadata);
} else {
if (!taskStates.contains(TaskState.Finished.name())) {
// Active task set only
observable = newActiveTaskQueryAction(taskQuery, callMetadata);
} else {
Page page = taskQuery.getPage();
boolean nextPageByNumber = StringExt.isEmpty(page.getCursor()) && page.getPageNumber() > 0;
if (nextPageByNumber) {
// In this case we ask for active and archived tasks using a page number > 0. Because of that
// we have to fetch as much tasks from master as we can. Tasks that we do not fetch, will not be
// visible to the client.
TaskQuery largePageQuery = taskQuery.toBuilder().setPage(taskQuery.getPage().toBuilder().setPageNumber(0).setPageSize(gatewayConfiguration.getMaxTaskPageSize())).build();
observable = newActiveTaskQueryAction(largePageQuery, callMetadata);
} else {
observable = newActiveTaskQueryAction(taskQuery, callMetadata);
}
observable = observable.flatMap(result -> retrieveArchivedTasksForJobs(v3JobIds, taskQuery).map(archivedTasks -> combineTaskResults(taskQuery, result, archivedTasks)));
}
}
return observable.timeout(tunablesConfiguration.getRequestTimeoutMs(), TimeUnit.MILLISECONDS).map(queryResult -> taskDataInjector.injectIntoTaskQueryResult(queryResult));
}
use of com.netflix.titus.grpc.protogen.Job in project titus-control-plane by Netflix.
the class JobCriteriaQueryTest method testSearchByTaskStateV3.
private void testSearchByTaskStateV3(String taskState, String expectedJobId, String expectedTaskId) {
// Job
JobQueryResult jobQueryResult = client.findJobs(JobQuery.newBuilder().putFilteringCriteria("applicationName", "testSearchByTaskStateV3").putFilteringCriteria("taskStates", taskState).setPage(PAGE).build());
assertThat(jobQueryResult.getItemsList()).hasSize(1);
Job jobQueryResultItem = jobQueryResult.getItems(0);
assertThat(jobQueryResultItem.getId()).isEqualTo(expectedJobId);
// Task
TaskQueryResult taskQueryResult = client.findTasks(TaskQuery.newBuilder().putFilteringCriteria("applicationName", "testSearchByTaskStateV3").putFilteringCriteria("taskStates", taskState).setPage(PAGE).build());
assertThat(taskQueryResult.getItemsList()).hasSize(1);
assertThat(taskQueryResult.getItems(0).getId()).isEqualTo(expectedTaskId);
}
use of com.netflix.titus.grpc.protogen.Job in project titus-control-plane by Netflix.
the class JobCriteriaQueryTest method testFindJobAndTaskByTaskIdsV3.
@Test(timeout = 30_000)
public void testFindJobAndTaskByTaskIdsV3() {
String task0 = jobsScenarioBuilder.takeJob(batchJobsWithCreatedTasks.get(0)).getTaskByIndex(0).getTask().getId();
String task2 = jobsScenarioBuilder.takeJob(batchJobsWithCreatedTasks.get(2)).getTaskByIndex(0).getTask().getId();
// Jobs
JobQueryResult jobQueryResult = client.findJobs(JobQuery.newBuilder().putFilteringCriteria("taskIds", task0 + ',' + task2).setPage(PAGE).build());
final List<Job> itemsList = jobQueryResult.getItemsList();
assertThat(itemsList).hasSize(2);
// Tasks
TaskQueryResult taskQueryResult = client.findTasks(TaskQuery.newBuilder().putFilteringCriteria("taskIds", task0 + ',' + task2).setPage(PAGE).build());
assertThat(taskQueryResult.getItemsList()).hasSize(2);
}
use of com.netflix.titus.grpc.protogen.Job in project titus-control-plane by Netflix.
the class JobDirectQueryTest method testFindServiceJob.
private void testFindServiceJob(String jobId) {
Job job = client.findJob(JobId.newBuilder().setId(jobId).build());
assertThat(job.getId()).isEqualTo(jobId);
assertThat(job.getJobDescriptor().getContainer().getResources().getAllocateIP()).isTrue();
CellAssertions.assertCellInfo(job, EmbeddedTitusMaster.CELL_NAME);
}
Aggregations