/** * Tests that each checkpoint is only aborted once in case of an interleaved cancellation * barrier arrival of two consecutive checkpoints. */ @Test public void testInterleavedCancellationBarriers() throws Exception { BufferOrEvent[] sequence = { createBarrier(1L, 0), createCancellationBarrier(2L, 0), createCancellationBarrier(1L, 1), createCancellationBarrier(2L, 1), createCancellationBarrier(1L, 2), createCancellationBarrier(2L, 2), createBuffer(0) }; MockInputGate gate = new MockInputGate(PAGE_SIZE, 3, Arrays.asList(sequence)); BarrierTracker tracker = new BarrierTracker(gate); AbstractInvokable statefulTask = mock(AbstractInvokable.class); tracker.registerCheckpointEventHandler(statefulTask); for (BufferOrEvent boe : sequence) { if (boe.isBuffer() || (boe.getEvent().getClass() != CheckpointBarrier.class && boe.getEvent().getClass() != CancelCheckpointMarker.class)) { assertEquals(boe, tracker.getNextNonBlocked()); } } verify(statefulTask, times(1)).abortCheckpointOnBarrier(eq(1L), any(Throwable.class)); verify(statefulTask, times(1)).abortCheckpointOnBarrier(eq(2L), any(Throwable.class)); }
barrierHandler = new BarrierTracker(inputGate); } else { throw new IllegalArgumentException("Unrecognized Checkpointing Mode: " + checkpointMode);
@Test public void testSingleChannelNoBarriers() { try { BufferOrEvent[] sequence = { createBuffer(0), createBuffer(0), createBuffer(0) }; MockInputGate gate = new MockInputGate(PAGE_SIZE, 1, Arrays.asList(sequence)); BarrierTracker tracker = new BarrierTracker(gate); for (BufferOrEvent boe : sequence) { assertEquals(boe, tracker.getNextNonBlocked()); } assertNull(tracker.getNextNonBlocked()); assertNull(tracker.getNextNonBlocked()); } catch (Exception e) { e.printStackTrace(); fail(e.getMessage()); } }
@Test public void testMultiChannelNoBarriers() { try { BufferOrEvent[] sequence = { createBuffer(2), createBuffer(2), createBuffer(0), createBuffer(1), createBuffer(0), createBuffer(3), createBuffer(1), createBuffer(1), createBuffer(2) }; MockInputGate gate = new MockInputGate(PAGE_SIZE, 4, Arrays.asList(sequence)); BarrierTracker tracker = new BarrierTracker(gate); for (BufferOrEvent boe : sequence) { assertEquals(boe, tracker.getNextNonBlocked()); } assertNull(tracker.getNextNonBlocked()); assertNull(tracker.getNextNonBlocked()); } catch (Exception e) { e.printStackTrace(); fail(e.getMessage()); } }
@Test public void testSingleChannelWithSkippedBarriers() { try { BufferOrEvent[] sequence = { createBuffer(0), createBarrier(1, 0), createBuffer(0), createBuffer(0), createBarrier(3, 0), createBuffer(0), createBarrier(4, 0), createBarrier(6, 0), createBuffer(0), createBarrier(7, 0), createBuffer(0), createBarrier(10, 0), createBuffer(0) }; MockInputGate gate = new MockInputGate(PAGE_SIZE, 1, Arrays.asList(sequence)); BarrierTracker tracker = new BarrierTracker(gate); CheckpointSequenceValidator validator = new CheckpointSequenceValidator(1, 3, 4, 6, 7, 10); tracker.registerCheckpointEventHandler(validator); for (BufferOrEvent boe : sequence) { if (boe.isBuffer() || boe.getEvent().getClass() != CheckpointBarrier.class) { assertEquals(boe, tracker.getNextNonBlocked()); } } assertNull(tracker.getNextNonBlocked()); assertNull(tracker.getNextNonBlocked()); } catch (Exception e) { e.printStackTrace(); fail(e.getMessage()); } }
@Test public void testSingleChannelWithBarriers() { try { BufferOrEvent[] sequence = { createBuffer(0), createBuffer(0), createBuffer(0), createBarrier(1, 0), createBuffer(0), createBuffer(0), createBuffer(0), createBuffer(0), createBarrier(2, 0), createBarrier(3, 0), createBuffer(0), createBuffer(0), createBarrier(4, 0), createBarrier(5, 0), createBarrier(6, 0), createBuffer(0) }; MockInputGate gate = new MockInputGate(PAGE_SIZE, 1, Arrays.asList(sequence)); BarrierTracker tracker = new BarrierTracker(gate); CheckpointSequenceValidator validator = new CheckpointSequenceValidator(1, 2, 3, 4, 5, 6); tracker.registerCheckpointEventHandler(validator); for (BufferOrEvent boe : sequence) { if (boe.isBuffer() || boe.getEvent().getClass() != CheckpointBarrier.class) { assertEquals(boe, tracker.getNextNonBlocked()); } } assertNull(tracker.getNextNonBlocked()); assertNull(tracker.getNextNonBlocked()); } catch (Exception e) { e.printStackTrace(); fail(e.getMessage()); } }
BarrierTracker tracker = new BarrierTracker(gate);
@Test public void testSingleChannelAbortCheckpoint() throws Exception { BufferOrEvent[] sequence = { createBuffer(0), createBarrier(1, 0), createBuffer(0), createBarrier(2, 0), createCancellationBarrier(4, 0), createBarrier(5, 0), createBuffer(0), createCancellationBarrier(6, 0), createBuffer(0) }; MockInputGate gate = new MockInputGate(PAGE_SIZE, 1, Arrays.asList(sequence)); BarrierTracker tracker = new BarrierTracker(gate); // negative values mean an expected cancellation call! CheckpointSequenceValidator validator = new CheckpointSequenceValidator(1, 2, -4, 5, -6); tracker.registerCheckpointEventHandler(validator); for (BufferOrEvent boe : sequence) { if (boe.isBuffer()) { assertEquals(boe, tracker.getNextNonBlocked()); } assertTrue(tracker.isEmpty()); } assertNull(tracker.getNextNonBlocked()); assertNull(tracker.getNextNonBlocked()); }
BarrierTracker tracker = new BarrierTracker(gate);
BarrierTracker tracker = new BarrierTracker(gate);
BarrierTracker tracker = new BarrierTracker(gate);
barrierHandler = new BarrierTracker(inputGate); } else { throw new IllegalArgumentException("Unrecognized Checkpointing Mode: " + checkpointMode);
barrierHandler = new BarrierTracker(inputGate); } else { throw new IllegalArgumentException("Unrecognized Checkpointing Mode: " + checkpointMode);
this.barrierHandler = new BarrierTracker(inputGate);
this.barrierHandler = new BarrierTracker(inputGate);