use of io.pravega.client.segment.impl.EventSegmentReader in project pravega by pravega.
the class EventStreamReaderImpl method closeAt.
@Override
public void closeAt(Position position) {
synchronized (readers) {
if (!closed) {
log.info("Closing reader {} at position {}.", this, position);
closed = true;
groupState.readerShutdown(position);
for (EventSegmentReader reader : readers) {
reader.close();
}
readers.clear();
ranges = new CopyOnWriteHashMap<>();
ownedSegments = new HashMap<>();
segmentOffsetUpdates = newImmutableSegmentOffsetUpdatesList();
segmentOffsetUpdatesIndex = 0;
groupState.close();
}
}
}
use of io.pravega.client.segment.impl.EventSegmentReader in project pravega by pravega.
the class EventStreamReaderImpl method refreshAndGetPosition.
/**
* Updates the cached ownedSegments and segmentOffsetUpdates for this reader. This should be executed every time
* there is a change in the Segments being managed by a reader in order to build correct Position objects.
*
* @return New position object with the most recent ownedSegments and segmentOffsetUpdates state.
*/
private PositionInternal refreshAndGetPosition() {
// We need to create new objects for segmentOffsetUpdates and ownedSegments, as there could be Position objects
// pointing to the current state of existing segmentOffsetUpdates and ownedSegments to build their internal state.
segmentOffsetUpdates = newImmutableSegmentOffsetUpdatesList();
segmentOffsetUpdatesIndex = 0;
ownedSegments = new HashMap<>(sealedSegments);
for (EventSegmentReader entry : readers) {
ownedSegments.put(entry.getSegmentId(), entry.getOffset());
}
return getCurrentPosition();
}
use of io.pravega.client.segment.impl.EventSegmentReader in project pravega by pravega.
the class ReadTest method readConditionalData.
@Test(timeout = 10000)
public void readConditionalData() throws SegmentSealedException, EndOfSegmentException, SegmentTruncatedException {
String endpoint = "localhost";
String scope = "scope";
String stream = "readConditionalData";
int port = TestUtils.getAvailableListenPort();
byte[] testString = "Hello world\n".getBytes();
StreamSegmentStore store = SERVICE_BUILDER.createStreamSegmentService();
TableStore tableStore = SERVICE_BUILDER.createTableStoreService();
@Cleanup PravegaConnectionListener server = new PravegaConnectionListener(false, port, store, tableStore, SERVICE_BUILDER.getLowPriorityExecutor());
server.startListening();
@Cleanup SocketConnectionFactoryImpl clientCF = new SocketConnectionFactoryImpl(ClientConfig.builder().build());
@Cleanup ConnectionPoolImpl connectionPool = new ConnectionPoolImpl(ClientConfig.builder().build(), clientCF);
@Cleanup Controller controller = new MockController(endpoint, port, connectionPool, true);
controller.createScope(scope);
controller.createStream(scope, stream, StreamConfiguration.builder().build());
ConditionalOutputStreamFactoryImpl segmentproducerClient = new ConditionalOutputStreamFactoryImpl(controller, connectionPool);
SegmentInputStreamFactoryImpl segmentConsumerClient = new SegmentInputStreamFactoryImpl(controller, connectionPool);
Segment segment = Futures.getAndHandleExceptions(controller.getCurrentSegments(scope, stream), RuntimeException::new).getSegments().iterator().next();
@Cleanup ConditionalOutputStream out = segmentproducerClient.createConditionalOutputStream(segment, DelegationTokenProviderFactory.createWithEmptyToken(), EventWriterConfig.builder().build());
assertTrue(out.write(ByteBuffer.wrap(testString), 0));
@Cleanup EventSegmentReader in = segmentConsumerClient.createEventReaderForSegment(segment);
ByteBuffer result = in.read();
assertEquals(ByteBuffer.wrap(testString), result);
assertNull(in.read(100));
assertFalse(out.write(ByteBuffer.wrap(testString), 0));
assertTrue(out.write(ByteBuffer.wrap(testString), testString.length + WireCommands.TYPE_PLUS_LENGTH_SIZE));
result = in.read();
assertEquals(ByteBuffer.wrap(testString), result);
assertNull(in.read(100));
}
Aggregations