Search in sources :

Example 11 with Position

use of io.pravega.client.stream.Position in project pravega by pravega.

the class ReaderGroupImpl method getUnreadBytes.

private long getUnreadBytes(Map<Stream, Map<Segment, Long>> positions, Map<Segment, Long> endSegments) {
    log.debug("Compute unread bytes from position {}", positions);
    final List<CompletableFuture<Long>> futures = new ArrayList<>(positions.size());
    for (Entry<Stream, Map<Segment, Long>> streamPosition : positions.entrySet()) {
        StreamCut fromStreamCut = new StreamCutImpl(streamPosition.getKey(), streamPosition.getValue());
        StreamCut toStreamCut = computeEndStreamCut(streamPosition.getKey(), endSegments);
        futures.add(getRemainingBytes(streamPosition.getKey(), fromStreamCut, toStreamCut));
    }
    return Futures.getAndHandleExceptions(allOfWithResults(futures).thenApply(listOfLong -> {
        return listOfLong.stream().mapToLong(i -> i).sum();
    }), RuntimeException::new);
}
Also used : StreamCut(io.pravega.client.stream.StreamCut) ReaderGroupStateInit(io.pravega.client.stream.impl.ReaderGroupState.ReaderGroupStateInit) SneakyThrows(lombok.SneakyThrows) UpdatingConfig(io.pravega.client.stream.impl.ReaderGroupState.UpdatingConfig) ReaderGroup(io.pravega.client.stream.ReaderGroup) ReaderGroupMetrics(io.pravega.client.stream.ReaderGroupMetrics) EndOfDataNotification(io.pravega.client.stream.notifications.EndOfDataNotification) Position(io.pravega.client.stream.Position) Stream(io.pravega.client.stream.Stream) AccessOperation(io.pravega.shared.security.auth.AccessOperation) Duration(java.time.Duration) Map(java.util.Map) Checkpoint(io.pravega.client.stream.Checkpoint) Futures.getThrowingException(io.pravega.common.concurrent.Futures.getThrowingException) ReaderGroupConfig(io.pravega.client.stream.ReaderGroupConfig) ImmutableMap(com.google.common.collect.ImmutableMap) Set(java.util.Set) DelegationTokenProviderFactory(io.pravega.client.security.auth.DelegationTokenProviderFactory) UUID(java.util.UUID) InitialUpdate(io.pravega.client.state.InitialUpdate) Collectors(java.util.stream.Collectors) SegmentMetadataClient(io.pravega.client.segment.impl.SegmentMetadataClient) NotifierFactory(io.pravega.client.stream.notifications.NotifierFactory) Base64(java.util.Base64) List(java.util.List) Slf4j(lombok.extern.slf4j.Slf4j) Observable(io.pravega.client.stream.notifications.Observable) Entry(java.util.Map.Entry) Optional(java.util.Optional) Controller(io.pravega.client.control.impl.Controller) Futures(io.pravega.common.concurrent.Futures) ClearCheckpointsBefore(io.pravega.client.stream.impl.ReaderGroupState.ClearCheckpointsBefore) StateSynchronizer(io.pravega.client.state.StateSynchronizer) Segment(io.pravega.client.segment.impl.Segment) NotificationSystem(io.pravega.client.stream.notifications.NotificationSystem) Exceptions(io.pravega.common.Exceptions) SegmentMetadataClientFactoryImpl(io.pravega.client.segment.impl.SegmentMetadataClientFactoryImpl) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) HashMap(java.util.HashMap) CompletableFuture(java.util.concurrent.CompletableFuture) ReaderGroupConfigRejectedException(io.pravega.client.control.impl.ReaderGroupConfigRejectedException) SegmentMetadataClientFactory(io.pravega.client.segment.impl.SegmentMetadataClientFactory) ArrayList(java.util.ArrayList) Update(io.pravega.client.state.Update) SegmentNotification(io.pravega.client.stream.notifications.SegmentNotification) CreateCheckpoint(io.pravega.client.stream.impl.ReaderGroupState.CreateCheckpoint) ThreadLocalRandom(java.util.concurrent.ThreadLocalRandom) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) SynchronizerConfig(io.pravega.client.state.SynchronizerConfig) Serializer(io.pravega.client.stream.Serializer) NameUtils(io.pravega.shared.NameUtils) Futures.getAndHandleExceptions(io.pravega.common.concurrent.Futures.getAndHandleExceptions) ConnectionPool(io.pravega.client.connection.impl.ConnectionPool) lombok.val(lombok.val) Preconditions.checkNotNull(com.google.common.base.Preconditions.checkNotNull) Futures.allOfWithResults(io.pravega.common.concurrent.Futures.allOfWithResults) DelegationTokenProvider(io.pravega.client.security.auth.DelegationTokenProvider) SynchronizerClientFactory(io.pravega.client.SynchronizerClientFactory) ReaderSegmentDistribution(io.pravega.client.stream.ReaderSegmentDistribution) Data(lombok.Data) InvalidStreamException(io.pravega.client.stream.InvalidStreamException) Preconditions(com.google.common.base.Preconditions) VisibleForTesting(com.google.common.annotations.VisibleForTesting) Collections(java.util.Collections) CompletableFuture(java.util.concurrent.CompletableFuture) StreamCut(io.pravega.client.stream.StreamCut) ArrayList(java.util.ArrayList) Stream(io.pravega.client.stream.Stream) Map(java.util.Map) ImmutableMap(com.google.common.collect.ImmutableMap) HashMap(java.util.HashMap)

Example 12 with Position

use of io.pravega.client.stream.Position in project pravega by pravega.

the class EventProcessorGroupTest method testShutdown.

@Test(timeout = 10000)
public void testShutdown() throws CheckpointStoreException {
    this.requestEventProcessors = system.createEventProcessorGroup(requestConfig, checkpointStore, rebalanceExecutor);
    requestEventProcessors.awaitRunning();
    assertTrue(requestEventProcessors.isRunning());
    Position mockReaderPosition = mock(Position.class);
    doReturn(ImmutableMap.of("reader1", mockReaderPosition)).when(checkpointStore).sealReaderGroup("host1", "scaleGroup");
    requestEventProcessors.stopAsync();
    requestEventProcessors.awaitTerminated();
    verify(checkpointStore, times(1)).sealReaderGroup("host1", "scaleGroup");
    verify(checkpointStore, times(1)).removeReader(anyString(), anyString(), anyString());
    verify(checkpointStore, times(1)).removeReaderGroup("host1", "scaleGroup");
    verify(mockReaderGroup, times(1)).readerOffline(anyString(), any());
    verify(mockReaderGroup, times(1)).close();
    verify(writer, times(1)).close();
}
Also used : Position(io.pravega.client.stream.Position) Test(org.junit.Test)

Example 13 with Position

use of io.pravega.client.stream.Position in project pravega by pravega.

the class CheckpointStoreTests method folderOperationTests.

@Test(timeout = 30000)
public void folderOperationTests() throws CheckpointStoreException {
    final String process1 = "process1";
    final String readerGroup1 = "rg1";
    final String readerGroup2 = "rg2";
    final String reader1 = "reader1";
    final String reader2 = "reader2";
    Set<String> processes = checkpointStore.getProcesses();
    Assert.assertEquals(0, processes.size());
    checkpointStore.addReaderGroup(process1, readerGroup1);
    List<String> result = checkpointStore.getReaderGroups(process1);
    Assert.assertNotNull(result);
    Assert.assertEquals(1, result.size());
    Assert.assertEquals(readerGroup1, result.get(0));
    processes = checkpointStore.getProcesses();
    Assert.assertEquals(1, processes.size());
    checkpointStore.addReader(process1, readerGroup1, reader1);
    Map<String, Position> resultMap = checkpointStore.getPositions(process1, readerGroup1);
    Assert.assertNotNull(resultMap);
    Assert.assertEquals(1, resultMap.size());
    Assert.assertNull(resultMap.get(reader1));
    Position position = new PositionImpl(Collections.emptyMap());
    checkpointStore.setPosition(process1, readerGroup1, reader1, position);
    resultMap = checkpointStore.getPositions(process1, readerGroup1);
    Assert.assertNotNull(resultMap);
    Assert.assertEquals(1, resultMap.size());
    Assert.assertNotNull(resultMap.get(reader1));
    Assert.assertEquals(position, resultMap.get(reader1));
    try {
        checkpointStore.setPosition(process1, readerGroup1, "randomReader", position);
        Assert.assertTrue(false);
    } catch (CheckpointStoreException cse) {
        Assert.assertEquals(CheckpointStoreException.Type.NoNode, cse.getType());
    }
    try {
        checkpointStore.removeReaderGroup(process1, readerGroup1);
        Assert.assertFalse(true);
    } catch (CheckpointStoreException cse) {
        Assert.assertEquals(CheckpointStoreException.Type.Active, cse.getType());
    }
    result = checkpointStore.getReaderGroups(process1);
    Assert.assertNotNull(result);
    Assert.assertEquals(1, result.size());
    Assert.assertEquals(readerGroup1, result.get(0));
    checkpointStore.addReader(process1, readerGroup1, reader2);
    resultMap = checkpointStore.getPositions(process1, readerGroup1);
    Assert.assertNotNull(resultMap);
    Assert.assertEquals(2, resultMap.size());
    Assert.assertNotNull(resultMap.get(reader1));
    Assert.assertNull(resultMap.get(reader2));
    checkpointStore.addReaderGroup(process1, readerGroup2);
    result = checkpointStore.getReaderGroups(process1);
    Assert.assertNotNull(result);
    Assert.assertEquals(2, result.size());
    Map<String, Position> map = checkpointStore.sealReaderGroup(process1, readerGroup2);
    Assert.assertNotNull(map);
    Assert.assertEquals(0, map.size());
    try {
        checkpointStore.addReader(process1, readerGroup2, "randomReader");
        Assert.assertTrue(false);
    } catch (CheckpointStoreException cse) {
        Assert.assertEquals(CheckpointStoreException.Type.Sealed, cse.getType());
    }
    try {
        checkpointStore.addReader(process1, "dummyReaderGroup", "randomReader");
        Assert.assertTrue(false);
    } catch (CheckpointStoreException cse) {
        Assert.assertEquals(CheckpointStoreException.Type.NoNode, cse.getType());
    }
    try {
        checkpointStore.sealReaderGroup(process1, "dummyReaderGroup");
        Assert.assertTrue(false);
    } catch (CheckpointStoreException cse) {
        Assert.assertEquals(CheckpointStoreException.Type.NoNode, cse.getType());
    }
    checkpointStore.removeReaderGroup(process1, readerGroup2);
    result = checkpointStore.getReaderGroups(process1);
    Assert.assertNotNull(result);
    Assert.assertEquals(1, result.size());
    Assert.assertEquals(readerGroup1, result.get(0));
    try {
        checkpointStore.addReader(process1, readerGroup1, reader1);
    } catch (CheckpointStoreException cse) {
        Assert.assertEquals(CheckpointStoreException.Type.NodeExists, cse.getType());
    }
    map = checkpointStore.sealReaderGroup(process1, readerGroup1);
    Assert.assertNotNull(map);
    Assert.assertEquals(2, map.size());
    try {
        checkpointStore.removeReaderGroup(process1, readerGroup1);
    } catch (CheckpointStoreException cse) {
        Assert.assertEquals(CheckpointStoreException.Type.NodeNotEmpty, cse.getType());
    }
    try {
        checkpointStore.addReader(process1, readerGroup1, "dummyReader");
    } catch (CheckpointStoreException cse) {
        Assert.assertEquals(CheckpointStoreException.Type.Sealed, cse.getType());
    }
    checkpointStore.removeReader(process1, readerGroup1, reader1);
    checkpointStore.removeReader(process1, readerGroup1, "randomReader");
    resultMap = checkpointStore.getPositions(process1, readerGroup1);
    Assert.assertNotNull(resultMap);
    Assert.assertEquals(1, resultMap.size());
    Assert.assertNull(resultMap.get(reader2));
    checkpointStore.removeReader(process1, readerGroup1, reader2);
    resultMap = checkpointStore.getPositions(process1, readerGroup1);
    Assert.assertNotNull(resultMap);
    Assert.assertEquals(0, resultMap.size());
    try {
        checkpointStore.addReaderGroup(process1, readerGroup1);
        Assert.assertTrue(false);
    } catch (CheckpointStoreException cse) {
        Assert.assertEquals(CheckpointStoreException.Type.NodeExists, cse.getType());
    }
    result = checkpointStore.getReaderGroups(process1);
    Assert.assertNotNull(result);
    Assert.assertEquals(1, result.size());
    Assert.assertEquals(readerGroup1, result.get(0));
    checkpointStore.removeReaderGroup(process1, readerGroup1);
    result = checkpointStore.getReaderGroups(process1);
    Assert.assertNotNull(result);
    Assert.assertEquals(0, result.size());
}
Also used : Position(io.pravega.client.stream.Position) PositionImpl(io.pravega.client.stream.impl.PositionImpl) CheckpointStoreException(io.pravega.controller.store.checkpoint.CheckpointStoreException) Test(org.junit.Test)

Example 14 with Position

use of io.pravega.client.stream.Position in project pravega by pravega.

the class SerializationTest method testPosition.

@Test
public void testPosition() {
    PositionImpl pos = new PositionImpl(ImmutableMap.of(new SegmentWithRange(Segment.fromScopedName("foo/bar/0"), 0, 0.5), 9999999L, new SegmentWithRange(Segment.fromScopedName("foo/bar/1"), 0.5, 1.0), -1L));
    ByteBuffer bytes = pos.toBytes();
    Position pos1 = Position.fromBytes(bytes);
    assertEquals(pos, pos1);
}
Also used : Position(io.pravega.client.stream.Position) ByteBuffer(java.nio.ByteBuffer) Test(org.junit.Test)

Example 15 with Position

use of io.pravega.client.stream.Position in project pravega by pravega.

the class SerializationTest method testPositionImplBackwardCompatibility.

@Test
public void testPositionImplBackwardCompatibility() throws Exception {
    PositionImpl pos = new PositionImpl(ImmutableMap.of(new SegmentWithRange(Segment.fromScopedName("foo/bar/1"), 0, 1), 9999999L));
    // Serialize via the old serialization logic.
    // Note: the older serialization logic does not work with -1L as offset.
    final byte[] bufOld = new PositionSerializerR1().serialize(new PositionR1(pos)).array();
    // deserialize it using latest revision and ensure compatibility.
    Position newp = Position.fromBytes(ByteBuffer.wrap(bufOld));
    assertEquals(pos, newp);
}
Also used : Position(io.pravega.client.stream.Position) Test(org.junit.Test)

Aggregations

Position (io.pravega.client.stream.Position)15 Test (org.junit.Test)11 PositionImpl (io.pravega.client.stream.impl.PositionImpl)4 CheckpointStoreException (io.pravega.controller.store.checkpoint.CheckpointStoreException)3 UUID (java.util.UUID)3 Cleanup (lombok.Cleanup)3 VisibleForTesting (com.google.common.annotations.VisibleForTesting)2 SynchronizerClientFactory (io.pravega.client.SynchronizerClientFactory)2 Segment (io.pravega.client.segment.impl.Segment)2 SynchronizerConfig (io.pravega.client.state.SynchronizerConfig)2 ReaderGroup (io.pravega.client.stream.ReaderGroup)2 Exceptions (io.pravega.common.Exceptions)2 CheckpointStore (io.pravega.controller.store.checkpoint.CheckpointStore)2 CheckpointStoreFactory (io.pravega.controller.store.checkpoint.CheckpointStoreFactory)2 AssertExtensions (io.pravega.test.common.AssertExtensions)2 IOException (java.io.IOException)2 Collections (java.util.Collections)2 HashMap (java.util.HashMap)2 List (java.util.List)2 Predicate (java.util.function.Predicate)2