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);
}
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)));
}
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);
}
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);
}
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);
}
Aggregations