@Override public CompletableFuture<Boolean> createStream(String scope, String streamName, final StreamConfiguration streamConfig) { return this.controller.createStream(scope, streamName, streamConfig, System.currentTimeMillis()).thenApply(x -> { switch (x.getStatus()) { case FAILURE: throw new ControllerFailureException("Failed to createing stream: " + streamConfig); case INVALID_STREAM_NAME: throw new IllegalArgumentException("Illegal stream name: " + streamConfig); case SCOPE_NOT_FOUND: throw new IllegalArgumentException("Scope does not exist: " + streamConfig); case STREAM_EXISTS: return false; case SUCCESS: return true; default: throw new ControllerFailureException("Unknown return status creating stream " + streamConfig + " " + x.getStatus()); } }); }
.thenApply(streamStatus -> { Response resp = null; if (streamStatus.getStatus() == CreateStreamStatus.Status.SUCCESS) { log.info("Successfully created stream: {}/{}", scopeName, streamName); resp = Response.status(Status.CREATED). entity(ModelHelper.encodeStreamResponse(scopeName, streamName, streamConfiguration)).build(); } else if (streamStatus.getStatus() == CreateStreamStatus.Status.STREAM_EXISTS) { log.warn("Stream already exists: {}/{}", scopeName, streamName); resp = Response.status(Status.CONFLICT).build(); } else if (streamStatus.getStatus() == CreateStreamStatus.Status.SCOPE_NOT_FOUND) { log.warn("Scope not found: {}", scopeName); resp = Response.status(Status.NOT_FOUND).build(); } else if (streamStatus.getStatus() == CreateStreamStatus.Status.INVALID_STREAM_NAME) { log.warn("Invalid stream name: {}", streamName); resp = Response.status(Status.BAD_REQUEST).build();
assertEquals(Controller.CreateScopeStatus.Status.SUCCESS, scopeStatus.getStatus()); Controller.CreateStreamStatus streamStatus = consumer.createStream(SCOPE, STREAM, configuration1, start).get(); assertEquals(Controller.CreateStreamStatus.Status.SUCCESS, streamStatus.getStatus());
this.controllerService.createStream(ModelHelper.decode(SCOPE1, STREAM1, configuration1), result1); status = result1.get(); Assert.assertEquals(status.getStatus(), CreateStreamStatus.Status.SUCCESS); Assert.assertEquals(status.getStatus(), CreateStreamStatus.Status.SUCCESS); this.controllerService.createStream(ModelHelper.decode(SCOPE1, STREAM1, configuration1), result3); status = result3.get(); Assert.assertEquals(status.getStatus(), CreateStreamStatus.Status.STREAM_EXISTS); this.controllerService.createStream(ModelHelper.decode("SCOPE3", STREAM2, configuration3), result4); status = result4.get(); Assert.assertEquals(status.getStatus(), CreateStreamStatus.Status.SCOPE_NOT_FOUND); this.controllerService.createStream(ModelHelper.decode("SCOPE3", "abc/def", configuration4), result5); status = result5.get(); assertEquals(status.getStatus(), CreateStreamStatus.Status.INVALID_STREAM_NAME); this.controllerService.createStream(ModelHelper.decode(SCOPE1, "abcdef", configuration6), result6); status = result6.get(); assertEquals(status.getStatus(), CreateStreamStatus.Status.SUCCESS);
createStreamStatus = result4.get(); Assert.assertEquals("Create stream", CreateStreamStatus.Status.SUCCESS, createStreamStatus.getStatus());
this.controllerService.createStream(ModelHelper.decode(SCOPE2, STREAM1, configuration1), result4); createStreamStatus = result4.get(); assertEquals(createStreamStatus.getStatus(), CreateStreamStatus.Status.SUCCESS);
this.controllerService.createStream(ModelHelper.decode(SCOPE1, STREAM1, configuration1), result2); createStreamStatus = result2.get(); assertEquals("Create stream", CreateStreamStatus.Status.SUCCESS, createStreamStatus.getStatus());
assertEquals(Controller.CreateScopeStatus.Status.SUCCESS, scopeStatus.getStatus()); Controller.CreateStreamStatus streamStatus = consumer.createStream(SCOPE, STREAM, configuration1, start).get(); assertEquals(Controller.CreateStreamStatus.Status.SUCCESS, streamStatus.getStatus());
@Test public void truncateStreamTests() { CreateScopeStatus createScopeStatus; CreateStreamStatus createStreamStatus; final StreamConfiguration configuration1 = StreamConfiguration.builder().scalingPolicy(ScalingPolicy.fixed(4)).build(); // Create a test scope. ResultObserver<CreateScopeStatus> result1 = new ResultObserver<>(); this.controllerService.createScope(ModelHelper.createScopeInfo(SCOPE1), result1); createScopeStatus = result1.get(); assertEquals("Create Scope", CreateScopeStatus.Status.SUCCESS, createScopeStatus.getStatus()); // Create a test stream. ResultObserver<CreateStreamStatus> result2 = new ResultObserver<>(); this.controllerService.createStream(ModelHelper.decode(SCOPE1, STREAM1, configuration1), result2); createStreamStatus = result2.get(); assertEquals("Create stream", CreateStreamStatus.Status.SUCCESS, createStreamStatus.getStatus()); //Truncate the stream ResultObserver<UpdateStreamStatus> result3 = new ResultObserver<>(); this.controllerService.truncateStream(Controller.StreamCut.newBuilder() .setStreamInfo(StreamInfo.newBuilder() .setScope(SCOPE1) .setStream(STREAM1) .build()) .putCut(0, 0).putCut(1, 0).putCut(2, 0).putCut(3, 0).build(), result3); UpdateStreamStatus truncateStreamStatus = result3.get(); assertEquals(UpdateStreamStatus.Status.SUCCESS, truncateStreamStatus.getStatus()); }
protected void createScopeAndStream(String scope, String stream, ScalingPolicy scalingPolicy) { final StreamConfiguration configuration1 = StreamConfiguration.builder().scalingPolicy(scalingPolicy).build(); // Create a test scope. ResultObserver<CreateScopeStatus> result1 = new ResultObserver<>(); this.controllerService.createScope(ModelHelper.createScopeInfo(scope), result1); CreateScopeStatus createScopeStatus = result1.get(); assertEquals("Create Scope", CreateScopeStatus.Status.SUCCESS, createScopeStatus.getStatus()); // Create a test stream. ResultObserver<CreateStreamStatus> result2 = new ResultObserver<>(); this.controllerService.createStream(ModelHelper.decode(scope, stream, configuration1), result2); CreateStreamStatus createStreamStatus = result2.get(); assertEquals("Create stream", CreateStreamStatus.Status.SUCCESS, createStreamStatus.getStatus()); }