use of io.divolte.server.AvroRecordBuffer in project divolte-collector by divolte.
the class FileFlusherTest method shouldAttemptReconnectAfterHeartbeatRollCreateFailure.
@Test
public void shouldAttemptReconnectAfterHeartbeatRollCreateFailure() throws IOException, InterruptedException {
final FileStrategyConfiguration fileStrategyConfiguration = setupConfiguration("50 milliseconds", "1 hour", "2");
// Mocks
final FileManager manager = mock(FileManager.class);
final DivolteFile file = mock(DivolteFile.class);
final InOrder calls = inOrder(manager, file);
final Item<AvroRecordBuffer> item = itemFromAvroRecordBuffer(newAvroRecordBuffer());
when(manager.createFile(anyString())).thenReturn(// Flusher construction succeeds
file).thenThrow(// Second file creation fails
new IOException("file create")).thenReturn(// Third file creation succeeds
file);
final FileFlusher flusher = new FileFlusher(fileStrategyConfiguration, manager, 50L);
assertEquals(CONTINUE, flusher.process(item));
assertEquals(CONTINUE, flusher.process(item));
calls.verify(file, times(2)).append(item.payload);
calls.verify(file).sync();
Thread.sleep(100);
// Rolling the file fails at this point (due to closeAndPublish failure)
assertEquals(PAUSE, flusher.heartbeat());
calls.verify(file).closeAndPublish();
// File rolled; expecting creation of a new file, which fails
calls.verify(manager).createFile(anyString());
Thread.sleep(100);
assertEquals(CONTINUE, flusher.heartbeat());
// Reconnect attempt
calls.verify(manager).createFile(anyString());
calls.verifyNoMoreInteractions();
}
use of io.divolte.server.AvroRecordBuffer in project divolte-collector by divolte.
the class FileFlusherTest method shouldAttemptReconnectMoreThanOnceAfterProcessFailure.
@Test
public void shouldAttemptReconnectMoreThanOnceAfterProcessFailure() throws IOException, InterruptedException {
final FileStrategyConfiguration fileStrategyConfiguration = setupConfiguration("1 hour", "1 hour", "200");
// Mocks
final FileManager manager = mock(FileManager.class);
final DivolteFile file = mock(DivolteFile.class);
final InOrder calls = inOrder(manager, file);
final Item<AvroRecordBuffer> item = itemFromAvroRecordBuffer(newAvroRecordBuffer());
when(manager.createFile(anyString())).thenReturn(// Flusher construction succeeds
file).thenThrow(// Second file creation fails
new IOException("create file")).thenReturn(// Third creation succeeds
file);
doThrow(new IOException("append")).when(file).append(// first append fails
item.payload);
final FileFlusher flusher = new FileFlusher(fileStrategyConfiguration, manager, 50L);
assertEquals(PAUSE, flusher.process(item));
calls.verify(file).append(item.payload);
calls.verify(file).discard();
Thread.sleep(100);
// Fail recovery on first attempt
assertEquals(PAUSE, flusher.heartbeat());
calls.verify(manager).createFile(anyString());
Thread.sleep(100);
// Succeed recovery on second attempt
assertEquals(CONTINUE, flusher.heartbeat());
calls.verify(manager).createFile(anyString());
calls.verifyNoMoreInteractions();
}
use of io.divolte.server.AvroRecordBuffer in project divolte-collector by divolte.
the class FileFlusherTest method shouldAttemptReconnectAfterProcessFailure.
@Test
public void shouldAttemptReconnectAfterProcessFailure() throws IOException, InterruptedException {
final FileStrategyConfiguration fileStrategyConfiguration = setupConfiguration("1 hour", "1 hour", "200");
// Mocks
final FileManager manager = mock(FileManager.class);
final DivolteFile file = mock(DivolteFile.class);
final InOrder calls = inOrder(manager, file);
final Item<AvroRecordBuffer> item = itemFromAvroRecordBuffer(newAvroRecordBuffer());
// Expect new file creation on file flusher construction
when(manager.createFile(anyString())).thenReturn(file);
final FileFlusher flusher = new FileFlusher(fileStrategyConfiguration, manager, 50L);
// throw exception on first record
doThrow(new IOException("append")).when(file).append(item.payload);
assertEquals(PAUSE, flusher.process(item));
calls.verify(file).append(item.payload);
calls.verify(file).discard();
Thread.sleep(100);
// Recover on first attempt, since creating a new file works
assertEquals(CONTINUE, flusher.heartbeat());
calls.verify(manager).createFile(anyString());
calls.verifyNoMoreInteractions();
}
use of io.divolte.server.AvroRecordBuffer in project divolte-collector by divolte.
the class FileFlusherTest method shouldSyncAndRollFileTimeBased.
@Test
public void shouldSyncAndRollFileTimeBased() throws IOException, InterruptedException {
final FileStrategyConfiguration fileStrategyConfiguration = setupConfiguration("300 milliseconds", "50 milliseconds", "200");
// Mocks
final FileManager manager = mock(FileManager.class);
final DivolteFile file = mock(DivolteFile.class);
final InOrder calls = inOrder(manager, file);
// Expect new file creation on file flusher construction
when(manager.createFile(anyString())).thenReturn(file);
final FileFlusher flusher = new FileFlusher(fileStrategyConfiguration, manager, 1L);
final Item<AvroRecordBuffer> item = itemFromAvroRecordBuffer(newAvroRecordBuffer());
assertEquals(CONTINUE, flusher.process(item));
calls.verify(file).append(item.payload);
Thread.sleep(100);
assertEquals(CONTINUE, flusher.heartbeat());
calls.verify(file).sync();
Thread.sleep(400);
assertEquals(CONTINUE, flusher.process(item));
calls.verify(file).append(item.payload);
calls.verify(file).closeAndPublish();
calls.verify(manager).createFile(anyString());
calls.verifyNoMoreInteractions();
}
use of io.divolte.server.AvroRecordBuffer in project divolte-collector by divolte.
the class TopicFlusher method process.
@Override
public final ProcessingDirective process(final Item<AvroRecordBuffer> item) {
final AvroRecordBuffer record = item.payload;
logger.debug("Processing individual event: {}", record);
return flush(ImmutableList.of(buildRecord(record)));
}
Aggregations