Search in sources :

Example 16 with EventSegmentReader

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();
        }
    }
}
Also used : EventSegmentReader(io.pravega.client.segment.impl.EventSegmentReader)

Example 17 with EventSegmentReader

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();
}
Also used : EventSegmentReader(io.pravega.client.segment.impl.EventSegmentReader)

Example 18 with EventSegmentReader

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));
}
Also used : ConnectionPoolImpl(io.pravega.client.connection.impl.ConnectionPoolImpl) ConditionalOutputStream(io.pravega.client.segment.impl.ConditionalOutputStream) SocketConnectionFactoryImpl(io.pravega.client.connection.impl.SocketConnectionFactoryImpl) MockController(io.pravega.client.stream.mock.MockController) Controller(io.pravega.client.control.impl.Controller) Cleanup(lombok.Cleanup) PravegaConnectionListener(io.pravega.segmentstore.server.host.handler.PravegaConnectionListener) ByteBuffer(java.nio.ByteBuffer) Segment(io.pravega.client.segment.impl.Segment) ReadSegment(io.pravega.shared.protocol.netty.WireCommands.ReadSegment) TableStore(io.pravega.segmentstore.contracts.tables.TableStore) StreamSegmentStore(io.pravega.segmentstore.contracts.StreamSegmentStore) ConditionalOutputStreamFactoryImpl(io.pravega.client.segment.impl.ConditionalOutputStreamFactoryImpl) EventSegmentReader(io.pravega.client.segment.impl.EventSegmentReader) MockController(io.pravega.client.stream.mock.MockController) SegmentInputStreamFactoryImpl(io.pravega.client.segment.impl.SegmentInputStreamFactoryImpl) Test(org.junit.Test)

Aggregations

EventSegmentReader (io.pravega.client.segment.impl.EventSegmentReader)18 Segment (io.pravega.client.segment.impl.Segment)14 Cleanup (lombok.Cleanup)12 Test (org.junit.Test)11 MockController (io.pravega.client.stream.mock.MockController)10 Controller (io.pravega.client.control.impl.Controller)9 SegmentOutputStream (io.pravega.client.segment.impl.SegmentOutputStream)8 MockSegmentStreamFactory (io.pravega.client.stream.mock.MockSegmentStreamFactory)7 AtomicLong (java.util.concurrent.atomic.AtomicLong)7 SegmentInputStreamFactory (io.pravega.client.segment.impl.SegmentInputStreamFactory)6 ByteBuffer (java.nio.ByteBuffer)6 EndOfSegmentException (io.pravega.client.segment.impl.EndOfSegmentException)4 Semaphore (java.util.concurrent.Semaphore)4 SegmentMetadataClient (io.pravega.client.segment.impl.SegmentMetadataClient)3 SegmentTruncatedException (io.pravega.client.segment.impl.SegmentTruncatedException)3 InOrder (org.mockito.InOrder)3 ConnectionPoolImpl (io.pravega.client.connection.impl.ConnectionPoolImpl)2 SocketConnectionFactoryImpl (io.pravega.client.connection.impl.SocketConnectionFactoryImpl)2 DelegationTokenProvider (io.pravega.client.security.auth.DelegationTokenProvider)2 ConditionalOutputStream (io.pravega.client.segment.impl.ConditionalOutputStream)2