@Override public StreamObserver<alluxio.grpc.WriteRequest> writeBlock( final StreamObserver<WriteResponse> responseObserver) { DelegationWriteHandler handler = new DelegationWriteHandler(mWorkerProcess, responseObserver); ServerCallStreamObserver<WriteResponse> serverResponseObserver = (ServerCallStreamObserver<WriteResponse>) responseObserver; serverResponseObserver.setOnCancelHandler(handler::onCancel); return handler; }
@Override public StreamObserver<CreateLocalBlockRequest> createLocalBlock( StreamObserver<CreateLocalBlockResponse> responseObserver) { ShortCircuitBlockWriteHandler handler = new ShortCircuitBlockWriteHandler( mWorkerProcess.getWorker(BlockWorker.class), responseObserver); ServerCallStreamObserver<CreateLocalBlockResponse> serverCallStreamObserver = (ServerCallStreamObserver<CreateLocalBlockResponse>) responseObserver; serverCallStreamObserver.setOnCancelHandler(handler::onCancel); return handler; }
@Override public void streamClientCancelsBeforeResponseClosedCancels( SimpleRequest request, StreamObserver<SimpleResponse> responseObserver) { ((ServerCallStreamObserver<?>) responseObserver).setOnCancelHandler(() -> COMPLETED.set(true)); responseObserver.onNext(SimpleResponse.getDefaultInstance()); } }
BlockingStreamObserver(CallStreamObserver<T> delegate) { this.delegate = delegate; final Runnable notifyAll = () -> { synchronized (lock) { lock.notifyAll(); // wake up our thread } }; this.delegate.setOnReadyHandler(notifyAll); if (delegate instanceof ServerCallStreamObserver) { ((ServerCallStreamObserver<T>) delegate).setOnCancelHandler(notifyAll); } }
private StreamObserver<DiscoveryRequest> createRequestHandler( StreamObserver<DiscoveryResponse> responseObserver, boolean ads, String defaultTypeUrl) { long streamId = streamCount.getAndIncrement(); Executor executor = executorGroup.next(); LOGGER.info("[{}] open stream from {}", streamId, defaultTypeUrl); callbacks.forEach(cb -> cb.onStreamOpen(streamId, defaultTypeUrl)); final DiscoveryRequestStreamObserver requestStreamObserver = new DiscoveryRequestStreamObserver(defaultTypeUrl, responseObserver, streamId, ads, executor); if (responseObserver instanceof ServerCallStreamObserver) { ((ServerCallStreamObserver) responseObserver).setOnCancelHandler(requestStreamObserver::onCancelled); } return requestStreamObserver; }