use of io.divolte.server.filesinks.FileManager.DivolteFile in project divolte-collector by divolte.
the class FileFlusherTest method shouldAttemptReconnectAfterHeartbeatRollCloseFailure.
@Test
public void shouldAttemptReconnectAfterHeartbeatRollCloseFailure() 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).thenReturn(// Second file creation succeeds
file);
doThrow(new IOException("close")).when(file).closeAndPublish();
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();
calls.verify(file).discard();
// No attempt at rolling / creating a new file should be made at this point
Thread.sleep(100);
assertEquals(CONTINUE, flusher.heartbeat());
// Reconnect attempt
calls.verify(manager).createFile(anyString());
calls.verifyNoMoreInteractions();
}
use of io.divolte.server.filesinks.FileManager.DivolteFile in project divolte-collector by divolte.
the class FileFlusherTest method shouldRollFileOnHeartbeatWithNoPendingRecords.
@Test
public void shouldRollFileOnHeartbeatWithNoPendingRecords() throws IOException, InterruptedException {
final FileStrategyConfiguration fileStrategyConfiguration = setupConfiguration("100 milliseconds", "1 hour", "1");
// 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(200);
assertEquals(CONTINUE, flusher.heartbeat());
calls.verify(file).closeAndPublish();
calls.verify(manager).createFile(anyString());
calls.verifyNoMoreInteractions();
}
use of io.divolte.server.filesinks.FileManager.DivolteFile in project divolte-collector by divolte.
the class FileFlusherTest method shouldPostponeFailureOnConstruction.
@Test
public void shouldPostponeFailureOnConstruction() 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())).thenThrow(// First file creation fails
new IOException("file create")).thenReturn(// Second file creation fails
file);
// Actual failing invocation of manager.createNewFile(...) happens here
final FileFlusher flusher = new FileFlusher(fileStrategyConfiguration, manager, 50L);
calls.verify(manager).createFile(anyString());
// Exception should be re-thrown at this point
assertEquals(PAUSE, flusher.process(item));
// Important: should not hit file.append(...)
Thread.sleep(100);
assertEquals(CONTINUE, flusher.heartbeat());
calls.verify(manager).createFile(anyString());
calls.verifyNoMoreInteractions();
}
Aggregations