@Override public void createTransaction(CreateTxnRequest request, StreamObserver<Controller.CreateTxnResponse> responseObserver) { log.info("createTransaction called for stream {}/{}.", request.getStreamInfo().getScope(), request.getStreamInfo().getStream()); authenticateExecuteAndProcessResults(() -> this.authHelper.checkAuthorizationAndCreateToken(request.getStreamInfo().getScope() + "/" + request.getStreamInfo().getStream(), AuthHandler.Permissions.READ_UPDATE), delegationToken -> controllerService.createTransaction(request.getStreamInfo().getScope(), request.getStreamInfo().getStream(), request.getLease()) .thenApply(pair -> Controller.CreateTxnResponse.newBuilder() .setDelegationToken(delegationToken) .setTxnId(ModelHelper.decode(pair.getKey())) .addAllActiveSegments(pair.getValue()) .build()), responseObserver); }