use of io.pravega.controller.stream.api.grpc.v1.Controller.StreamCut in project pravega by pravega.
the class ControllerImplTest method testUpdateReaderGroup.
@Test
public void testUpdateReaderGroup() throws Exception {
CompletableFuture<Long> updateRGStatus;
final Segment seg0 = new Segment("scope1", "stream1", 0L);
final Segment seg1 = new Segment("scope1", "stream1", 1L);
ImmutableMap<Segment, Long> startStreamCut = ImmutableMap.of(seg0, 10L, seg1, 10L);
Map<Stream, StreamCut> startSC = ImmutableMap.of(Stream.of("scope1", "stream1"), new StreamCutImpl(Stream.of("scope1", "stream1"), startStreamCut));
ImmutableMap<Segment, Long> endStreamCut = ImmutableMap.of(seg0, 200L, seg1, 300L);
Map<Stream, StreamCut> endSC = ImmutableMap.of(Stream.of("scope1", "stream1"), new StreamCutImpl(Stream.of("scope1", "stream1"), endStreamCut));
ReaderGroupConfig config = ReaderGroupConfig.builder().automaticCheckpointIntervalMillis(30000L).groupRefreshTimeMillis(20000L).maxOutstandingCheckpointRequest(2).retentionType(ReaderGroupConfig.StreamDataRetention.AUTOMATIC_RELEASE_AT_LAST_CHECKPOINT).startingStreamCuts(startSC).endingStreamCuts(endSC).build();
config = ReaderGroupConfig.cloneConfig(config, UUID.randomUUID(), 0L);
updateRGStatus = controllerClient.updateReaderGroup("scope1", "rg1", config);
assertNotNull(updateRGStatus.get());
updateRGStatus = controllerClient.updateReaderGroup("scope1", "rg2", config);
AssertExtensions.assertFutureThrows("Server should throw exception", updateRGStatus, Throwable -> true);
updateRGStatus = controllerClient.updateReaderGroup("scope1", "rg3", config);
AssertExtensions.assertFutureThrows("Server should throw exception", updateRGStatus, throwable -> throwable instanceof IllegalArgumentException);
updateRGStatus = controllerClient.updateReaderGroup("scope1", "rg4", config);
AssertExtensions.assertFutureThrows("Server should throw exception", updateRGStatus, throwable -> throwable instanceof ReaderGroupConfigRejectedException);
}
use of io.pravega.controller.stream.api.grpc.v1.Controller.StreamCut in project pravega by pravega.
the class ModelHelperTest method testReaderGroupConfig.
@Test
public void testReaderGroupConfig() {
String scope = "test";
String stream = "test";
ImmutableMap<Segment, Long> positions = ImmutableMap.<Segment, Long>builder().put(new Segment(scope, stream, 0), 90L).build();
StreamCut sc = new StreamCutImpl(Stream.of(scope, stream), positions);
ReaderGroupConfig config = ReaderGroupConfig.builder().disableAutomaticCheckpoints().stream(getScopedStreamName(scope, stream), StreamCut.UNBOUNDED, sc).build();
Controller.ReaderGroupConfiguration decodedConfig = decode(scope, "group", config);
assertEquals(config, ModelHelper.encode(decodedConfig));
}
use of io.pravega.controller.stream.api.grpc.v1.Controller.StreamCut in project pravega by pravega.
the class StreamMetadataTasks method generateStreamCut.
/**
* Generate a new stream cut.
*
* @param scope scope.
* @param stream stream name.
* @param contextOpt optional context
* @param delegationToken token to be sent to segmentstore.
* @param previous previous stream cut record
* @return streamCut.
*/
public CompletableFuture<StreamCutRecord> generateStreamCut(final String scope, final String stream, final StreamCutRecord previous, final OperationContext contextOpt, String delegationToken) {
final OperationContext context = contextOpt != null ? contextOpt : streamMetadataStore.createStreamContext(scope, stream, ControllerService.nextRequestId());
return streamMetadataStore.getActiveSegments(scope, stream, context, executor).thenCompose(activeSegments -> Futures.allOfWithResults(activeSegments.stream().parallel().collect(Collectors.toMap(x -> x, x -> getSegmentOffset(scope, stream, x.segmentId(), delegationToken, context.getRequestId()))))).thenCompose(map -> {
final long generationTime = retentionClock.get().get();
ImmutableMap.Builder<Long, Long> builder = ImmutableMap.builder();
map.forEach((key, value) -> builder.put(key.segmentId(), value));
ImmutableMap<Long, Long> streamCutMap = builder.build();
return streamMetadataStore.getSizeTillStreamCut(scope, stream, streamCutMap, Optional.ofNullable(previous), context, executor).thenApply(sizeTill -> new StreamCutRecord(generationTime, sizeTill, streamCutMap));
});
}
use of io.pravega.controller.stream.api.grpc.v1.Controller.StreamCut in project pravega by pravega.
the class LocalControllerTest method testCreateReaderGroup.
@Test(timeout = 10000)
public void testCreateReaderGroup() throws ExecutionException, InterruptedException {
final Segment seg0 = new Segment("scope", "stream1", 0L);
final Segment seg1 = new Segment("scope", "stream1", 1L);
ImmutableMap<Segment, Long> startStreamCut = ImmutableMap.of(seg0, 10L, seg1, 10L);
Map<Stream, StreamCut> startSC = ImmutableMap.of(Stream.of("scope", "stream1"), new StreamCutImpl(Stream.of("scope", "stream1"), startStreamCut));
ImmutableMap<Segment, Long> endStreamCut = ImmutableMap.of(seg0, 200L, seg1, 300L);
Map<Stream, StreamCut> endSC = ImmutableMap.of(Stream.of("scope", "stream1"), new StreamCutImpl(Stream.of("scope", "stream1"), endStreamCut));
ReaderGroupConfig rgConfig = ReaderGroupConfig.builder().automaticCheckpointIntervalMillis(30000L).groupRefreshTimeMillis(20000L).maxOutstandingCheckpointRequest(2).retentionType(ReaderGroupConfig.StreamDataRetention.AUTOMATIC_RELEASE_AT_LAST_CHECKPOINT).startingStreamCuts(startSC).endingStreamCuts(endSC).build();
final ReaderGroupConfig config = ReaderGroupConfig.cloneConfig(rgConfig, UUID.randomUUID(), 0L);
StreamMetadataTasks mockStreamMetaTasks = mock(StreamMetadataTasks.class);
final String scope = "scope";
final String rgName = "subscriber";
when(this.mockControllerService.getStreamMetadataTasks()).thenReturn(mockStreamMetaTasks);
Controller.ReaderGroupConfiguration expectedConfig = ModelHelper.decode(scope, rgName, config);
when(mockStreamMetaTasks.createReaderGroupInternal(anyString(), any(), any(), anyLong(), anyLong())).thenReturn(CompletableFuture.completedFuture(Controller.CreateReaderGroupResponse.newBuilder().setConfig(expectedConfig).setStatus(Controller.CreateReaderGroupResponse.Status.SUCCESS).build()));
ReaderGroupConfig responseCfg = this.testController.createReaderGroup(scope, rgName, config).join();
Assert.assertEquals(UUID.fromString(expectedConfig.getReaderGroupId()), responseCfg.getReaderGroupId());
Assert.assertEquals(expectedConfig.getRetentionType(), responseCfg.getRetentionType().ordinal());
Assert.assertEquals(expectedConfig.getGeneration(), responseCfg.getGeneration());
Assert.assertEquals(expectedConfig.getGroupRefreshTimeMillis(), responseCfg.getGroupRefreshTimeMillis());
Assert.assertEquals(expectedConfig.getAutomaticCheckpointIntervalMillis(), responseCfg.getAutomaticCheckpointIntervalMillis());
Assert.assertEquals(expectedConfig.getMaxOutstandingCheckpointRequest(), responseCfg.getMaxOutstandingCheckpointRequest());
when(mockStreamMetaTasks.createReaderGroupInternal(anyString(), any(), any(), anyLong(), anyLong())).thenReturn(CompletableFuture.completedFuture(Controller.CreateReaderGroupResponse.newBuilder().setConfig(expectedConfig).setStatus(Controller.CreateReaderGroupResponse.Status.FAILURE).build()));
assertThrows("Expected ControllerFailureException", () -> this.testController.createReaderGroup("scope", "subscriber", config).join(), ex -> ex instanceof ControllerFailureException);
when(mockStreamMetaTasks.createReaderGroupInternal(anyString(), any(), any(), anyLong(), anyLong())).thenReturn(CompletableFuture.completedFuture(Controller.CreateReaderGroupResponse.newBuilder().setConfig(expectedConfig).setStatus(Controller.CreateReaderGroupResponse.Status.INVALID_RG_NAME).build()));
assertThrows("Expected IllegalArgumentException", () -> this.testController.createReaderGroup("scope", "subscriber", config).join(), ex -> ex instanceof IllegalArgumentException);
when(mockStreamMetaTasks.createReaderGroupInternal(anyString(), any(), any(), anyLong(), anyLong())).thenReturn(CompletableFuture.completedFuture(Controller.CreateReaderGroupResponse.newBuilder().setConfig(expectedConfig).setStatus(Controller.CreateReaderGroupResponse.Status.SCOPE_NOT_FOUND).build()));
assertThrows("Expected IllegalArgumentException", () -> this.testController.createReaderGroup("scope", "subscriber", config).join(), ex -> ex instanceof IllegalArgumentException);
when(mockStreamMetaTasks.createReaderGroupInternal(anyString(), any(), any(), anyLong(), anyLong())).thenReturn(CompletableFuture.completedFuture(Controller.CreateReaderGroupResponse.newBuilder().setStatusValue(-1).build()));
assertThrows("Expected ControllerFailureException", () -> this.testController.createReaderGroup("scope", "subscriber", config).join(), ex -> ex instanceof ControllerFailureException);
}
use of io.pravega.controller.stream.api.grpc.v1.Controller.StreamCut in project pravega by pravega.
the class LocalControllerTest method testGetReaderGroupConfig.
@Test(timeout = 10000)
public void testGetReaderGroupConfig() throws ExecutionException, InterruptedException {
final String scope = "scope";
final String streamName = "stream1";
final Segment seg0 = new Segment(scope, streamName, 0L);
final Segment seg1 = new Segment(scope, streamName, 1L);
ImmutableMap<Segment, Long> startStreamCut = ImmutableMap.of(seg0, 10L, seg1, 10L);
Map<Stream, StreamCut> startSC = ImmutableMap.of(Stream.of(scope, streamName), new StreamCutImpl(Stream.of(scope, streamName), startStreamCut));
ImmutableMap<Segment, Long> endStreamCut = ImmutableMap.of(seg0, 200L, seg1, 300L);
Map<Stream, StreamCut> endSC = ImmutableMap.of(Stream.of(scope, streamName), new StreamCutImpl(Stream.of(scope, streamName), endStreamCut));
ReaderGroupConfig rgConfig = ReaderGroupConfig.builder().automaticCheckpointIntervalMillis(30000L).groupRefreshTimeMillis(20000L).maxOutstandingCheckpointRequest(2).retentionType(ReaderGroupConfig.StreamDataRetention.AUTOMATIC_RELEASE_AT_LAST_CHECKPOINT).startingStreamCuts(startSC).endingStreamCuts(endSC).build();
ReaderGroupConfig config = ReaderGroupConfig.cloneConfig(rgConfig, UUID.randomUUID(), 0L);
final String rgName = "subscriber";
Controller.ReaderGroupConfiguration expectedConfig = ModelHelper.decode(scope, rgName, config);
when(this.mockControllerService.getReaderGroupConfig(anyString(), anyString(), anyLong())).thenReturn(CompletableFuture.completedFuture(Controller.ReaderGroupConfigResponse.newBuilder().setStatus(Controller.ReaderGroupConfigResponse.Status.SUCCESS).setConfig(expectedConfig).build()));
Assert.assertEquals(this.testController.getReaderGroupConfig(scope, rgName).join().getAutomaticCheckpointIntervalMillis(), config.getAutomaticCheckpointIntervalMillis());
when(this.mockControllerService.getReaderGroupConfig(anyString(), anyString(), anyLong())).thenReturn(CompletableFuture.completedFuture(Controller.ReaderGroupConfigResponse.newBuilder().setStatus(Controller.ReaderGroupConfigResponse.Status.FAILURE).setConfig(Controller.ReaderGroupConfiguration.getDefaultInstance()).build()));
assertThrows("Expected ControllerFailureException", () -> this.testController.getReaderGroupConfig("scope", "subscriber").join(), ex -> ex instanceof ControllerFailureException);
when(this.mockControllerService.getReaderGroupConfig(anyString(), anyString(), anyLong())).thenReturn(CompletableFuture.completedFuture(Controller.ReaderGroupConfigResponse.newBuilder().setStatus(Controller.ReaderGroupConfigResponse.Status.RG_NOT_FOUND).setConfig(Controller.ReaderGroupConfiguration.getDefaultInstance()).build()));
assertThrows("Expected IllegalArgumentException", () -> this.testController.getReaderGroupConfig("scope", "subscriber").join(), ex -> ex instanceof IllegalArgumentException);
when(this.mockControllerService.getReaderGroupConfig(eq("scope"), eq("subscriber"), anyLong())).thenReturn(CompletableFuture.completedFuture(Controller.ReaderGroupConfigResponse.newBuilder().setStatusValue(-1).build()));
assertThrows("Expected ControllerFailureException", () -> this.testController.getReaderGroupConfig("scope", "subscriber").join(), ex -> ex instanceof ControllerFailureException);
}
Aggregations