use of io.pravega.client.stream.mock.MockSegmentStreamFactory in project pravega by pravega.
the class EventStreamReaderTest method testCheckpoint.
@Test(timeout = 10000)
public void testCheckpoint() throws SegmentSealedException, ReinitializationRequiredException {
AtomicLong clock = new AtomicLong();
MockSegmentStreamFactory segmentStreamFactory = new MockSegmentStreamFactory();
Orderer orderer = new Orderer();
ReaderGroupStateManager groupState = Mockito.mock(ReaderGroupStateManager.class);
EventStreamReaderImpl<byte[]> reader = new EventStreamReaderImpl<>(segmentStreamFactory, segmentStreamFactory, new ByteArraySerializer(), groupState, orderer, clock::get, ReaderConfig.builder().build());
Segment segment = Segment.fromScopedName("Foo/Bar/0");
Mockito.when(groupState.acquireNewSegmentsIfNeeded(0L)).thenReturn(ImmutableMap.of(segment, 0L)).thenReturn(Collections.emptyMap());
SegmentOutputStream stream = segmentStreamFactory.createOutputStreamForSegment(segment, segmentSealedCallback, writerConfig, "");
ByteBuffer buffer = writeInt(stream, 1);
Mockito.when(groupState.getCheckpoint()).thenReturn("Foo").thenReturn(null);
EventRead<byte[]> eventRead = reader.readNextEvent(0);
assertTrue(eventRead.isCheckpoint());
assertNull(eventRead.getEvent());
assertEquals("Foo", eventRead.getCheckpointName());
assertEquals(buffer, ByteBuffer.wrap(reader.readNextEvent(0).getEvent()));
assertNull(reader.readNextEvent(0).getEvent());
reader.close();
}
use of io.pravega.client.stream.mock.MockSegmentStreamFactory in project pravega by pravega.
the class SynchronizerTest method testCompactionShrinksSet.
@Test(timeout = 20000)
public void testCompactionShrinksSet() throws EndOfSegmentException {
String streamName = "testCompactionShrinksSet";
String scope = "scope";
MockSegmentStreamFactory ioFactory = new MockSegmentStreamFactory();
@Cleanup MockClientFactory clientFactory = new MockClientFactory(scope, ioFactory);
SetSynchronizer<String> set = SetSynchronizer.createNewSet(streamName, clientFactory);
RevisionedStreamClient<byte[]> rsc = clientFactory.createRevisionedStreamClient(streamName, new ByteArraySerializer(), SynchronizerConfig.builder().build());
set.add("Foo");
assertNull(rsc.getMark());
set.add("Bar");
assertNull(rsc.getMark());
set.clear();
assertNotNull(rsc.getMark());
Iterator<?> iter = rsc.readFrom(rsc.getMark());
assertTrue(iter.hasNext());
iter.next();
assertFalse(iter.hasNext());
set.add("Foo2");
assertNotNull(rsc.getMark());
assertEquals(1, set.getCurrentSize());
}
use of io.pravega.client.stream.mock.MockSegmentStreamFactory in project pravega by pravega.
the class SynchronizerTest method testCompaction.
@Test(timeout = 20000)
public void testCompaction() throws EndOfSegmentException {
String streamName = "streamName";
String scope = "scope";
MockSegmentStreamFactory ioFactory = new MockSegmentStreamFactory();
@Cleanup MockClientFactory clientFactory = new MockClientFactory(scope, ioFactory);
StateSynchronizer<RevisionedImpl> sync = clientFactory.createStateSynchronizer(streamName, new JavaSerializer<>(), new JavaSerializer<>(), SynchronizerConfig.builder().build());
assertEquals(0, sync.bytesWrittenSinceCompaction());
AtomicInteger callCount = new AtomicInteger(0);
sync.initialize(new RegularUpdate());
sync.updateState(state -> {
callCount.incrementAndGet();
return Collections.singletonList(new RegularUpdate());
});
assertEquals(1, callCount.get());
long size = sync.bytesWrittenSinceCompaction();
assertTrue(size > 0);
sync.updateState(state -> {
callCount.incrementAndGet();
return Collections.singletonList(new RegularUpdate());
});
assertEquals(2, callCount.get());
assertTrue(sync.bytesWrittenSinceCompaction() > size);
sync.compact(state -> {
callCount.incrementAndGet();
return new RegularUpdate();
});
assertEquals(3, callCount.get());
assertEquals(0, sync.bytesWrittenSinceCompaction());
sync.updateState(s -> {
callCount.incrementAndGet();
return Collections.singletonList(new RegularUpdate());
});
assertEquals(5, callCount.get());
assertEquals(size, sync.bytesWrittenSinceCompaction());
sync.compact(state -> {
callCount.incrementAndGet();
return new RegularUpdate();
});
assertEquals(6, callCount.get());
assertEquals(0, sync.bytesWrittenSinceCompaction());
}
use of io.pravega.client.stream.mock.MockSegmentStreamFactory in project pravega by pravega.
the class ReaderGroupStateManagerTest method testReleaseAndAcquireTimes.
@Test(timeout = 5000)
public void testReleaseAndAcquireTimes() throws ReinitializationRequiredException {
String scope = "scope";
String stream = "stream";
PravegaNodeUri endpoint = new PravegaNodeUri("localhost", SERVICE_PORT);
MockConnectionFactoryImpl connectionFactory = new MockConnectionFactoryImpl();
MockController controller = new MockController(endpoint.getEndpoint(), endpoint.getPort(), connectionFactory);
MockSegmentStreamFactory streamFactory = new MockSegmentStreamFactory();
@Cleanup ClientFactory clientFactory = new ClientFactoryImpl(scope, controller, connectionFactory, streamFactory, streamFactory, streamFactory);
SynchronizerConfig config = SynchronizerConfig.builder().build();
@Cleanup StateSynchronizer<ReaderGroupState> state = clientFactory.createStateSynchronizer(stream, new JavaSerializer<>(), new JavaSerializer<>(), config);
AtomicLong clock = new AtomicLong();
Map<Segment, Long> segments = new HashMap<>();
segments.put(new Segment(scope, stream, 0), 0L);
segments.put(new Segment(scope, stream, 1), 1L);
segments.put(new Segment(scope, stream, 2), 2L);
segments.put(new Segment(scope, stream, 3), 3L);
ReaderGroupStateManager.initializeReaderGroup(state, ReaderGroupConfig.builder().stream(Stream.of(scope, stream)).build(), segments);
ReaderGroupStateManager reader1 = new ReaderGroupStateManager("reader1", state, controller, clock::get);
reader1.initializeReader(0);
ReaderGroupStateManager reader2 = new ReaderGroupStateManager("reader2", state, controller, clock::get);
reader2.initializeReader(0);
clock.addAndGet(ReaderGroupStateManager.UPDATE_WINDOW.toNanos());
Map<Segment, Long> newSegments = reader1.acquireNewSegmentsIfNeeded(123);
assertEquals(2, newSegments.size());
Duration r1aqt = ReaderGroupStateManager.calculateAcquireTime("reader1", state.getState());
Duration r2aqt = ReaderGroupStateManager.calculateAcquireTime("reader2", state.getState());
assertTrue(r1aqt.toMillis() > r2aqt.toMillis());
Duration r1rlt = ReaderGroupStateManager.calculateReleaseTime("reader1", state.getState());
Duration r2rlt = ReaderGroupStateManager.calculateReleaseTime("reader2", state.getState());
assertTrue(r1rlt.toMillis() < r2rlt.toMillis());
reader1.releaseSegment(newSegments.keySet().iterator().next(), 0, 123);
newSegments = reader2.acquireNewSegmentsIfNeeded(123);
assertEquals(2, newSegments.size());
r1aqt = ReaderGroupStateManager.calculateAcquireTime("reader1", state.getState());
r2aqt = ReaderGroupStateManager.calculateAcquireTime("reader2", state.getState());
assertTrue(r1aqt.toMillis() < r2aqt.toMillis());
r1rlt = ReaderGroupStateManager.calculateReleaseTime("reader1", state.getState());
r2rlt = ReaderGroupStateManager.calculateReleaseTime("reader2", state.getState());
assertTrue(r1rlt.toMillis() > r2rlt.toMillis());
}
use of io.pravega.client.stream.mock.MockSegmentStreamFactory in project pravega by pravega.
the class ReaderGroupStateManagerTest method testCheckpointContainsAllShards.
@Test(timeout = 10000)
public void testCheckpointContainsAllShards() throws ReinitializationRequiredException {
String scope = "scope";
String stream = "stream";
PravegaNodeUri endpoint = new PravegaNodeUri("localhost", SERVICE_PORT);
MockConnectionFactoryImpl connectionFactory = new MockConnectionFactoryImpl();
Segment segment0 = new Segment(scope, stream, 0);
Segment segment1 = new Segment(scope, stream, 1);
Segment segment2 = new Segment(scope, stream, 2);
MockController controller = new MockControllerWithSuccessors(endpoint.getEndpoint(), endpoint.getPort(), connectionFactory, new StreamSegmentsWithPredecessors(ImmutableMap.of(), ""));
MockSegmentStreamFactory streamFactory = new MockSegmentStreamFactory();
@Cleanup ClientFactory clientFactory = new ClientFactoryImpl(scope, controller, connectionFactory, streamFactory, streamFactory, streamFactory);
SynchronizerConfig config = SynchronizerConfig.builder().build();
@Cleanup StateSynchronizer<ReaderGroupState> stateSynchronizer = createState(stream, clientFactory, config);
Map<Segment, Long> segments = ImmutableMap.of(segment0, 0L, segment1, 1L, segment2, 2L);
ReaderGroupStateManager.initializeReaderGroup(stateSynchronizer, ReaderGroupConfig.builder().stream(Stream.of(scope, stream)).build(), segments);
val readerState1 = new ReaderGroupStateManager("reader1", stateSynchronizer, controller, null);
readerState1.initializeReader(0);
val readerState2 = new ReaderGroupStateManager("reader2", stateSynchronizer, controller, null);
readerState2.initializeReader(0);
assertEquals(segments, stateSynchronizer.getState().getUnassignedSegments());
stateSynchronizer.updateStateUnconditionally(new CreateCheckpoint("CP1"));
stateSynchronizer.fetchUpdates();
assertEquals("CP1", readerState1.getCheckpoint());
assertEquals(Collections.emptyMap(), readerState1.acquireNewSegmentsIfNeeded(1));
assertEquals(Collections.emptyMap(), readerState2.acquireNewSegmentsIfNeeded(2));
assertEquals("CP1", readerState2.getCheckpoint());
readerState1.checkpoint("CP1", new PositionImpl(Collections.emptyMap()));
readerState2.checkpoint("CP1", new PositionImpl(Collections.emptyMap()));
assertTrue(stateSynchronizer.getState().isCheckpointComplete("CP1"));
assertEquals(segments, stateSynchronizer.getState().getPositionsForCompletedCheckpoint("CP1"));
}
Aggregations