private void sinkDataBuffer() { DataBuffer dataBuffer = this.dataBuffer.get(); Assert.state(dataBuffer != null, "DataBuffer should not be null"); this.sink.next(dataBuffer); this.dataBuffer.set(null); } }
protected void publish(List<InstanceEvent> events) { events.forEach(event -> { log.debug("Event published {}", event); this.sink.next(event); }); }
private void sinkDataBuffer() { DataBuffer dataBuffer = this.dataBuffer.get(); Assert.state(dataBuffer != null, "DataBuffer should not be null"); this.sink.next(dataBuffer); this.dataBuffer.set(null); } }
@Override protected void hookOnNext(DataBuffer dataBuffer) { try { ByteBuffer byteBuffer = dataBuffer.asByteBuffer(); while (byteBuffer.hasRemaining()) { this.channel.write(byteBuffer); } this.sink.next(dataBuffer); request(1); } catch (IOException ex) { this.sink.next(dataBuffer); this.sink.error(ex); } }
@Override public void onPartFinished(StreamStorage storage, Map<String, List<String>> headers) { HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.putAll(headers); this.sink.next(createPart(storage, httpHeaders)); }
@Override protected void hookOnNext(DataBuffer dataBuffer) { try { ByteBuffer byteBuffer = dataBuffer.asByteBuffer(); while (byteBuffer.hasRemaining()) { this.channel.write(byteBuffer); } this.sink.next(dataBuffer); request(1); } catch (IOException ex) { this.sink.next(dataBuffer); this.sink.error(ex); } }
@Override public void onPartFinished(StreamStorage storage, Map<String, List<String>> headers) { HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.putAll(headers); this.sink.next(createPart(storage, httpHeaders)); }
@Override public void completed(Integer read, DataBuffer dataBuffer) { if (read != -1) { long pos = this.position.addAndGet(read); dataBuffer.writePosition(read); this.sink.next(dataBuffer); if (!this.disposed.get()) { DataBuffer newDataBuffer = this.dataBufferFactory.allocateBuffer(this.bufferSize); ByteBuffer newByteBuffer = newDataBuffer.asByteBuffer(0, this.bufferSize); this.channel.read(newByteBuffer, pos, newDataBuffer, this); } } else { release(dataBuffer); this.sink.complete(); } }
public void pushToSink() { while (sink.requestedFromDownstream() > 0) { Integer item = queue.poll(); if (item != null) { sink.next(item); } else { break; } } }
@Test public void fluxCreateDropError() { Flux<String> created = Flux.create(s -> { s.next("test1"); s.next("test2"); s.next("test3"); s.error(new Exception("test")); }, FluxSink.OverflowStrategy.DROP); StepVerifier.create(created) .expectNext("test1", "test2", "test3") .verifyErrorMessage("test"); }
@Test public void fluxCreateErrorError() { Flux<String> created = Flux.create(s -> { s.next("test1"); s.next("test2"); s.next("test3"); s.error(new Exception("test")); }, FluxSink.OverflowStrategy.ERROR); StepVerifier.create(created) .expectNext("test1", "test2", "test3") .verifyErrorMessage("test"); }
@Test public void fluxCreateIgnoreError() { Flux<String> created = Flux.create(s -> { s.next("test1"); s.next("test2"); s.next("test3"); s.error(new Exception("test")); }, FluxSink.OverflowStrategy.IGNORE); StepVerifier.create(created) .expectNext("test1", "test2", "test3") .verifyErrorMessage("test"); }
Flux<String> exponentialRetryScenario() { AtomicInteger i = new AtomicInteger(); return Flux.<String>create(s -> { if (i.incrementAndGet() == 4) { s.next("hey"); } else { s.error(new RuntimeException("test " + i)); } }).retryWhen(repeat -> repeat.zipWith(Flux.range(1, 3), (t1, t2) -> t2) .flatMap(time -> Mono.delay(Duration.ofSeconds(time)))); }
@Test public void contextTest() { StepVerifier.create(Flux.create(s -> IntStream.range(0, 10).forEach(i -> s.next(s .currentContext() .get(AtomicInteger.class) .incrementAndGet()))) .take(10) .subscriberContext(ctx -> ctx.put(AtomicInteger.class, new AtomicInteger()))) .expectNext(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) .verifyComplete(); }
@Test public void contextTestPush() { StepVerifier.create(Flux.push(s -> IntStream.range(0, 10).forEach(i -> s.next(s .currentContext() .get(AtomicInteger.class) .incrementAndGet()))) .take(10) .subscriberContext(ctx -> ctx.put(AtomicInteger.class, new AtomicInteger()))) .expectNext(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) .verifyComplete(); }
@Test public void serializedSinkSingleProducer() throws Exception { WorkQueueProcessor<Integer> queueProcessor = WorkQueueProcessor.<Integer>builder() .share(false).build(); FluxSink<Integer> sink = queueProcessor.sink(); Assertions.assertThat(sink).isInstanceOf(SerializedSink.class); sink = sink.next(1); Assertions.assertThat(sink).isInstanceOf(SerializedSink.class); sink = sink.onRequest(n -> {}); Assertions.assertThat(sink).isInstanceOf(SerializedSink.class); }
@Test public void serializedSinkSingleProducer() throws Exception { TopicProcessor<Integer> processor = TopicProcessor.<Integer>builder() .share(false) .build(); FluxSink<Integer> sink = processor.sink(); assertThat(sink).isInstanceOf(SerializedSink.class); sink = sink.next(1); assertThat(sink).isInstanceOf(SerializedSink.class); sink = sink.onRequest(n -> {}); assertThat(sink).isInstanceOf(SerializedSink.class); }