use of org.apache.druid.indexing.common.task.Task in project druid by druid-io.
the class TaskLockboxTest method testRequestForNewSegmentWithSegmentLock.
@Test
public void testRequestForNewSegmentWithSegmentLock() {
final Task task = NoopTask.create();
lockbox.add(task);
allocateSegmentsAndAssert(task, "seq", 3, NumberedPartialShardSpec.instance());
allocateSegmentsAndAssert(task, "seq2", 2, new NumberedOverwritePartialShardSpec(0, 3, (short) 1));
final List<TaskLock> locks = lockbox.findLocksForTask(task);
Assert.assertEquals(5, locks.size());
int expectedPartitionId = 0;
for (TaskLock lock : locks) {
Assert.assertTrue(lock instanceof SegmentLock);
final SegmentLock segmentLock = (SegmentLock) lock;
Assert.assertEquals(expectedPartitionId++, segmentLock.getPartitionId());
if (expectedPartitionId == 3) {
expectedPartitionId = PartitionIds.NON_ROOT_GEN_START_PARTITION_ID;
}
}
}
use of org.apache.druid.indexing.common.task.Task in project druid by druid-io.
the class TaskLockboxTest method testDoInCriticalSectionWithSmallerInterval.
@Test
public void testDoInCriticalSectionWithSmallerInterval() throws Exception {
final Interval interval = Intervals.of("2017-01-01/2017-02-01");
final Interval smallInterval = Intervals.of("2017-01-10/2017-01-11");
final Task task = NoopTask.create();
lockbox.add(task);
final TaskLock lock = tryTimeChunkLock(TaskLockType.EXCLUSIVE, task, interval).getTaskLock();
Assert.assertNotNull(lock);
Assert.assertTrue(lockbox.doInCriticalSection(task, Collections.singletonList(interval), CriticalAction.<Boolean>builder().onValidLocks(() -> true).onInvalidLocks(() -> false).build()));
}
use of org.apache.druid.indexing.common.task.Task in project druid by druid-io.
the class TaskLockboxTest method testSegmentLockForSameIntervalAndSamePartition.
@Test
public void testSegmentLockForSameIntervalAndSamePartition() {
final Task task1 = NoopTask.create();
lockbox.add(task1);
final Task task2 = NoopTask.create();
lockbox.add(task2);
Assert.assertTrue(lockbox.tryLock(task1, new SpecificSegmentLockRequest(TaskLockType.EXCLUSIVE, task1, Intervals.of("2015-01-01/2015-01-02"), "v1", 3)).isOk());
Assert.assertFalse(lockbox.tryLock(task2, new SpecificSegmentLockRequest(TaskLockType.EXCLUSIVE, task2, Intervals.of("2015-01-01/2015-01-02"), "v1", 3)).isOk());
}
use of org.apache.druid.indexing.common.task.Task in project druid by druid-io.
the class TaskLockboxTest method testGetLockedIntervalsForLowPriorityTask.
@Test
public void testGetLockedIntervalsForLowPriorityTask() throws Exception {
// Acquire lock for a low priority task
final Task lowPriorityTask = NoopTask.create(5);
lockbox.add(lowPriorityTask);
taskStorage.insert(lowPriorityTask, TaskStatus.running(lowPriorityTask.getId()));
tryTimeChunkLock(TaskLockType.EXCLUSIVE, lowPriorityTask, Intervals.of("2017/2018"));
final Map<String, Integer> minTaskPriority = new HashMap<>();
minTaskPriority.put(lowPriorityTask.getDataSource(), 10);
Map<String, List<Interval>> lockedIntervals = lockbox.getLockedIntervals(minTaskPriority);
Assert.assertTrue(lockedIntervals.isEmpty());
}
use of org.apache.druid.indexing.common.task.Task in project druid by druid-io.
the class TaskLockboxTest method testDoInCriticalSectionWithRevokedLock.
@Test
public void testDoInCriticalSectionWithRevokedLock() throws Exception {
final Interval interval = Intervals.of("2017-01-01/2017-01-02");
final Task lowPriorityTask = NoopTask.create("task1", 0);
final Task highPriorityTask = NoopTask.create("task2", 10);
lockbox.add(lowPriorityTask);
lockbox.add(highPriorityTask);
taskStorage.insert(lowPriorityTask, TaskStatus.running(lowPriorityTask.getId()));
taskStorage.insert(highPriorityTask, TaskStatus.running(highPriorityTask.getId()));
final TaskLock lowPriorityLock = tryTimeChunkLock(TaskLockType.EXCLUSIVE, lowPriorityTask, interval).getTaskLock();
Assert.assertNotNull(lowPriorityLock);
Assert.assertTrue(tryTimeChunkLock(TaskLockType.EXCLUSIVE, highPriorityTask, interval).isOk());
Assert.assertTrue(Iterables.getOnlyElement(lockbox.findLocksForTask(lowPriorityTask)).isRevoked());
Assert.assertFalse(lockbox.doInCriticalSection(lowPriorityTask, Collections.singletonList(interval), CriticalAction.<Boolean>builder().onValidLocks(() -> true).onInvalidLocks(() -> false).build()));
}
Aggregations