@Override public void freeId( long id ) { buffer.offer( id ); }
@Test public void shouldClearCurrentChunk() { // GIVEN Consumer<long[]> consumer = mock( Consumer.class ); DelayedBuffer<Long> buffer = new DelayedBuffer<>( singleton( 0L ), Predicates.alwaysTrue(), 10, consumer ); buffer.offer( 0 ); buffer.offer( 1 ); buffer.offer( 2 ); // WHEN buffer.clear(); buffer.maintenance(); // THEN verifyNoMoreInteractions( consumer ); }
@Test public void shouldClearPreviousChunks() { // GIVEN Consumer<long[]> consumer = mock( Consumer.class ); final AtomicBoolean safeThreshold = new AtomicBoolean( false ); DelayedBuffer<Long> buffer = new DelayedBuffer<>( singleton( 0L ), t -> safeThreshold.get(), 10, consumer ); // three chunks buffer.offer( 0 ); buffer.maintenance(); buffer.offer( 1 ); buffer.maintenance(); buffer.offer( 2 ); buffer.maintenance(); // WHEN safeThreshold.set( true ); buffer.clear(); buffer.maintenance(); // THEN verifyNoMoreInteractions( consumer ); }
buffer.offer( 1 ); buffer.offer( 4 ); buffer.maintenance(); assertEquals( 0, consumer.chunksAccepted() ); buffer.offer( 5 ); buffer.offer( 7 ); buffer.maintenance(); assertEquals( 0, consumer.chunksAccepted() ); buffer.offer( 2 ); buffer.offer( 8 ); buffer.offer( 6 ); buffer.offer( 9 ); buffer.offer( 3 ); buffer.offer( 11 ); buffer.offer( 12 ); txClosed.set( 4 ); // since 1-4 have now all closed buffer.maintenance(); buffer.offer( 10 ); buffer.offer( 13 );
@Override public void freeId( long id ) { buffer.offer( id ); }