use of io.aeron.Image in project Aeron by real-logic.
the class RecordingWriterTest method mockImage.
private Image mockImage(final long joinPosition) {
final Image image = mock(Image.class);
when(image.termBufferLength()).thenReturn(TERM_LENGTH);
when(image.joinPosition()).thenReturn(joinPosition);
return image;
}
use of io.aeron.Image in project Aeron by real-logic.
the class ClusterNodeRestartTest method launchReschedulingService.
private void launchReschedulingService(final AtomicLong triggeredTimersCounter) {
final ClusteredService service = new StubClusteredService() {
public void onSessionMessage(final ClientSession session, final long timestamp, final DirectBuffer buffer, final int offset, final int length, final Header header) {
scheduleNext(serviceCorrelationId(7), timestamp + 200);
}
public void onTimerEvent(final long correlationId, final long timestamp) {
triggeredTimersCounter.getAndIncrement();
scheduleNext(correlationId, timestamp + 200);
}
public void onStart(final Cluster cluster, final Image snapshotImage) {
super.onStart(cluster, snapshotImage);
if (null != snapshotImage) {
final FragmentHandler fragmentHandler = (buffer, offset, length, header) -> triggeredTimersCounter.set(buffer.getLong(offset));
while (true) {
final int fragments = snapshotImage.poll(fragmentHandler, 1);
if (fragments == 1 || snapshotImage.isEndOfStream()) {
break;
}
idleStrategy.idle();
}
}
}
public void onTakeSnapshot(final ExclusivePublication snapshotPublication) {
final ExpandableArrayBuffer buffer = new ExpandableArrayBuffer();
buffer.putLong(0, triggeredTimersCounter.get());
while (snapshotPublication.offer(buffer, 0, SIZE_OF_INT) < 0) {
idleStrategy.idle();
}
}
private void scheduleNext(final long correlationId, final long deadline) {
idleStrategy.reset();
while (!cluster.scheduleTimer(correlationId, deadline)) {
idleStrategy.idle();
}
}
};
container = ClusteredServiceContainer.launch(new ClusteredServiceContainer.Context().clusteredService(service).terminationHook(ClusterTests.NOOP_TERMINATION_HOOK).errorHandler(ClusterTests.errorHandler(0)));
}
use of io.aeron.Image in project Aeron by real-logic.
the class ClusterTimerTest method launchReschedulingService.
private void launchReschedulingService(final AtomicLong triggeredTimersCounter) {
final ClusteredService service = new StubClusteredService() {
private int timerId = 1;
public void onTimerEvent(final long correlationId, final long timestamp) {
triggeredTimersCounter.getAndIncrement();
scheduleNext(serviceCorrelationId(timerId++), timestamp + INTERVAL_MS);
}
public void onStart(final Cluster cluster, final Image snapshotImage) {
super.onStart(cluster, snapshotImage);
this.cluster = cluster;
if (null != snapshotImage) {
final FragmentHandler fragmentHandler = (buffer, offset, length, header) -> timerId = buffer.getInt(offset);
while (true) {
final int fragments = snapshotImage.poll(fragmentHandler, 1);
if (fragments == 1 || snapshotImage.isEndOfStream()) {
break;
}
idleStrategy.idle();
}
}
}
public void onTakeSnapshot(final ExclusivePublication snapshotPublication) {
final ExpandableArrayBuffer buffer = new ExpandableArrayBuffer(SIZE_OF_INT);
buffer.putInt(0, timerId);
idleStrategy.reset();
while (snapshotPublication.offer(buffer, 0, SIZE_OF_INT) < 0) {
idleStrategy.idle();
}
}
public void onNewLeadershipTermEvent(final long leadershipTermId, final long logPosition, final long timestamp, final long termBaseLogPosition, final int leaderMemberId, final int logSessionId, final TimeUnit timeUnit, final int appVersion) {
scheduleNext(serviceCorrelationId(timerId++), timestamp + INTERVAL_MS);
}
private void scheduleNext(final long correlationId, final long deadlineMs) {
idleStrategy.reset();
while (!cluster.scheduleTimer(correlationId, deadlineMs)) {
idleStrategy.idle();
}
}
};
container = ClusteredServiceContainer.launch(new ClusteredServiceContainer.Context().clusteredService(service).terminationHook(ClusterTests.NOOP_TERMINATION_HOOK).errorHandler(ClusterTests.errorHandler(0)));
}
use of io.aeron.Image in project aeron by real-logic.
the class RecordingWriterTest method initThrowsIOExceptionIfItCannotOpenAFileChannel.
@Test
void initThrowsIOExceptionIfItCannotOpenAFileChannel() throws IOException {
final File notADirectory = new File(archiveDir, "dummy.txt");
assertTrue(notADirectory.createNewFile());
final Image image = mockImage(0L);
final RecordingWriter recordingWriter = new RecordingWriter(1, 0, SEGMENT_LENGTH, image, new Context().archiveDir(notADirectory));
assertThrows(IOException.class, recordingWriter::init);
}
use of io.aeron.Image in project aeron by real-logic.
the class RecordingWriterTest method onBlockShouldWriteHeaderAndContentsOfTheNonPaddingFrame.
@Test
void onBlockShouldWriteHeaderAndContentsOfTheNonPaddingFrame() throws IOException {
final Image image = mockImage(0L);
final RecordingWriter recordingWriter = new RecordingWriter(1, 0, SEGMENT_LENGTH, image, new Context().archiveDir(archiveDir));
recordingWriter.init();
final UnsafeBuffer termBuffer = new UnsafeBuffer(allocate(128));
frameType(termBuffer, 0, HDR_TYPE_DATA);
frameLengthOrdered(termBuffer, 0, 128);
final byte[] data = new byte[96];
fill(data, (byte) 7);
termBuffer.putBytes(HEADER_LENGTH, data);
recordingWriter.onBlock(termBuffer, 0, 128, -1, -1);
recordingWriter.close();
final File segmentFile = segmentFile(1, 0);
assertTrue(segmentFile.exists());
assertEquals(SEGMENT_LENGTH, segmentFile.length());
final UnsafeBuffer fileBuffer = new UnsafeBuffer();
fileBuffer.wrap(readAllBytes(segmentFile.toPath()));
assertEquals(HDR_TYPE_DATA, frameType(fileBuffer, 0));
assertEquals(128, frameLength(fileBuffer, 0));
assertEquals(0, frameSessionId(fileBuffer, 0));
final byte[] fileBytes = new byte[96];
fileBuffer.getBytes(HEADER_LENGTH, fileBytes, 0, 96);
assertArrayEquals(data, fileBytes);
}
Aggregations