Search in sources :

Example 1 with PMap

use of org.pcollections.PMap in project titus-control-plane by Netflix.

the class CachedBatchJobTest method initialSnapshot.

/**
 * Create a snapshot with a single job and size == taskCount. Create up to tasksCreated tasks, leaving
 * the remaining slots empty.
 */
private Triple<PCollectionJobSnapshot, Map<Integer, Task>, Map<Integer, Task>> initialSnapshot(int taskCount, int tasksCreated) {
    Pair<Job<BatchJobExt>, PMap<String, Task>> jobAndTasks = newBatchJobWithTasks(0, taskCount);
    Job<BatchJobExt> job = jobAndTasks.getLeft();
    Map<Integer, Task> tasksByIndex = new HashMap<>();
    Map<String, Task> tasks = new HashMap<>(jobAndTasks.getRight());
    Map<Integer, Task> skipped = new HashMap<>();
    Iterator<Task> it = tasks.values().iterator();
    while (it.hasNext()) {
        Task task = it.next();
        int index = CachedBatchJob.indexOf(task, taskCount, titusRuntime);
        if (index >= tasksCreated) {
            it.remove();
            skipped.put(index, task);
        } else {
            tasksByIndex.put(index, task);
        }
    }
    PCollectionJobSnapshot snapshot = PCollectionJobSnapshot.newInstance("test", Collections.singletonMap(job.getId(), job), Collections.singletonMap(job.getId(), tasks), false, false, error -> {
        throw new IllegalStateException(error);
    }, titusRuntime);
    return Triple.of(snapshot, tasksByIndex, skipped);
}
Also used : Task(com.netflix.titus.api.jobmanager.model.job.Task) HashMap(java.util.HashMap) BatchJobExt(com.netflix.titus.api.jobmanager.model.job.ext.BatchJobExt) PMap(org.pcollections.PMap) Job(com.netflix.titus.api.jobmanager.model.job.Job)

Example 2 with PMap

use of org.pcollections.PMap in project titus-control-plane by Netflix.

the class JobSnapshotPerf method updateTask.

private void updateTask() {
    int idx = random.nextInt(jobAndTasks.size());
    Pair<Job<?>, PMap<String, Task>> toUpdate = this.jobAndTasks.get(idx);
    Job<?> job = toUpdate.getLeft();
    PMap<String, Task> tasks = toUpdate.getRight();
    int taskIdx = random.nextInt(tasks.size());
    Task taskToUpdate = new ArrayList<>(tasks.values()).get(taskIdx);
    Task updatedTask = taskToUpdate.toBuilder().withVersion(Version.newBuilder().withTimestamp(System.currentTimeMillis()).build()).build();
    snapshot.updateTask(updatedTask, false).ifPresent(newSnapshot -> this.snapshot = newSnapshot);
    // Clean local map
    jobAndTasks = jobAndTasks.with(idx, Pair.of(job, tasks.plus(updatedTask.getId(), updatedTask)));
}
Also used : BatchJobTask(com.netflix.titus.api.jobmanager.model.job.BatchJobTask) Task(com.netflix.titus.api.jobmanager.model.job.Task) HashTreePMap(org.pcollections.HashTreePMap) PMap(org.pcollections.PMap) Job(com.netflix.titus.api.jobmanager.model.job.Job)

Example 3 with PMap

use of org.pcollections.PMap in project titus-control-plane by Netflix.

the class JobSnapshotTest method testMovedTask.

@Test
public void testMovedTask() {
    Pair<Job<ServiceJobExt>, PMap<String, Task>> pair1 = newServiceJobWithTasks(1, 2, 1_000);
    Pair<Job<ServiceJobExt>, PMap<String, Task>> pair2 = newServiceJobWithTasks(2, 0, 1_000);
    Job<?> job1 = pair1.getLeft();
    Job<?> job2 = pair2.getLeft();
    List<Task> tasks1 = new ArrayList<>(pair1.getRight().values());
    JobSnapshot initial = newSnapshot(factory, (Pair) pair1, (Pair) pair2);
    Task movedTask = tasks1.get(0).toBuilder().withJobId(job2.getId()).withTaskContext(Collections.singletonMap(TaskAttributes.TASK_ATTRIBUTES_MOVED_FROM_JOB, job1.getId())).build();
    JobSnapshot updated = initial.updateTask(movedTask, true).orElse(null);
    assertThat(updated).isNotNull();
    assertThat(updated.getJobMap()).hasSize(2).containsValues(job1, job2);
    assertThat(updated.getTaskMap()).containsValues(movedTask, tasks1.get(1));
    assertThat(updated.getTasks(job1.getId()).values()).containsExactly(tasks1.get(1));
    assertThat(updated.getTasks(job2.getId()).values()).containsExactly(movedTask);
}
Also used : Task(com.netflix.titus.api.jobmanager.model.job.Task) ArrayList(java.util.ArrayList) PMap(org.pcollections.PMap) Job(com.netflix.titus.api.jobmanager.model.job.Job) Test(org.junit.Test)

Example 4 with PMap

use of org.pcollections.PMap in project titus-control-plane by Netflix.

the class CachedBatchJobWithOneTaskTest method testInitial.

@Test
public void testInitial() {
    Pair<Job<BatchJobExt>, PMap<String, Task>> jobAndTasks = newBatchJobWithTasks(0, 1);
    Job<BatchJobExt> job = jobAndTasks.getLeft();
    PMap<String, Task> tasks = jobAndTasks.getRight();
    // Create finished task for slot 0 to test filtering.
    Task task = CollectionsExt.first(tasks.values());
    Task finishedTask = task.toBuilder().withId("finishedTaskId").withStatus(TaskStatus.newBuilder().withState(TaskState.Finished).build()).withVersion(Version.newBuilder().withTimestamp(task.getVersion().getTimestamp() - 1_000).build()).build();
    tasks = tasks.plus(finishedTask.getId(), finishedTask);
    CachedJob cached1 = CachedBatchJobWithOneTask.newBatchInstance(job, tasks, titusRuntime);
    assertThat(cached1.getJob()).isEqualTo(job);
    assertThat(cached1.getTasks()).hasSize(1);
    assertThat(cached1.getTasks()).containsValue(task);
}
Also used : Task(com.netflix.titus.api.jobmanager.model.job.Task) BatchJobExt(com.netflix.titus.api.jobmanager.model.job.ext.BatchJobExt) PMap(org.pcollections.PMap) Job(com.netflix.titus.api.jobmanager.model.job.Job) Test(org.junit.Test)

Example 5 with PMap

use of org.pcollections.PMap in project titus-control-plane by Netflix.

the class CachedBatchJobWithOneTaskTest method initialSnapshot.

private Pair<PCollectionJobSnapshot, Task> initialSnapshot(boolean create) {
    Pair<Job<BatchJobExt>, PMap<String, Task>> jobAndTasks = newBatchJobWithTasks(0, 1);
    Job<BatchJobExt> job = jobAndTasks.getLeft();
    Task task = CollectionsExt.first(jobAndTasks.getRight().values());
    PCollectionJobSnapshot snapshot = PCollectionJobSnapshot.newInstance("test", Collections.singletonMap(job.getId(), job), Collections.singletonMap(job.getId(), create ? Collections.singletonMap(task.getId(), task) : Collections.emptyMap()), false, false, error -> {
        throw new IllegalStateException(error);
    }, titusRuntime);
    return Pair.of(snapshot, task);
}
Also used : Task(com.netflix.titus.api.jobmanager.model.job.Task) BatchJobExt(com.netflix.titus.api.jobmanager.model.job.ext.BatchJobExt) PMap(org.pcollections.PMap) Job(com.netflix.titus.api.jobmanager.model.job.Job)

Aggregations

Job (com.netflix.titus.api.jobmanager.model.job.Job)6 Task (com.netflix.titus.api.jobmanager.model.job.Task)6 PMap (org.pcollections.PMap)6 BatchJobExt (com.netflix.titus.api.jobmanager.model.job.ext.BatchJobExt)3 BatchJobTask (com.netflix.titus.api.jobmanager.model.job.BatchJobTask)2 ArrayList (java.util.ArrayList)2 Test (org.junit.Test)2 HashTreePMap (org.pcollections.HashTreePMap)2 HashMap (java.util.HashMap)1