@Override public void error(Throwable t) { enqueueEvent(PushEvent.error(t)); }
@Override public void error(Throwable t) { enqueueEvent(PushEvent.error(t)); }
@Override public void error(Throwable t) { enqueueEvent(PushEvent.error(t)); }
void check(AtomicLong lastTime, long timeout) { long now = System.nanoTime(); long elapsed = now - lastTime.get(); if (elapsed < timeout) { promiseFactory.scheduledExecutor().schedule( () -> check(lastTime, timeout), timeout - elapsed, NANOSECONDS); } else { PushEvent<T> error = PushEvent.error(new TimeoutException()); close(error); // Upstream close is needed as we have no direct backpressure upstreamClose(error); } }
void check(AtomicLong lastTime, long timeout) { long now = System.nanoTime(); long elapsed = now - lastTime.get(); if (elapsed < timeout) { promiseFactory.scheduledExecutor().schedule( () -> check(lastTime, timeout), timeout - elapsed, NANOSECONDS); } else { PushEvent<T> error = PushEvent.error(new TimeoutException()); close(error); // Upstream close is needed as we have no direct backpressure upstreamClose(error); } }
void check(AtomicLong lastTime, long timeout) { long now = System.nanoTime(); long elapsed = now - lastTime.get(); if (elapsed < timeout) { promiseFactory.scheduledExecutor().schedule( () -> check(lastTime, timeout), timeout - elapsed, NANOSECONDS); } else { PushEvent<T> error = PushEvent.error(new TimeoutException()); close(error); // Upstream close is needed as we have no direct backpressure upstreamClose(error); } }
private <R> void aggregateAndForward(BiFunction<Long,Collection<T>,R> f, AbstractPushStreamImpl<R> eventStream, PushEvent< ? extends T> event, Queue<T> queue, Executor executor, long elapsed) { executor.execute(() -> { try { if (!queue.offer(event.getData())) { ((ArrayQueue<T>) queue).forcePush(event.getData()); } long result = eventStream.handleEvent(PushEvent.data( f.apply(Long.valueOf(NANOSECONDS.toMillis(elapsed)), queue))); if (result < 0) { close(); } } catch (Exception e) { close(PushEvent.error(e)); } }); }
private void doSend(PushEventConsumer< ? super T> pec, PushEvent<T> event) { try { promiseFactory.executor().execute(() -> safePush(pec, event)); } catch (RejectedExecutionException ree) { // TODO log? if (!event.isTerminal()) { close(PushEvent.error(ree)); } else { safePush(pec, event); } } }
private void doSend(PushEventConsumer< ? super T> pec, PushEvent<T> event) { try { promiseFactory.executor().execute(() -> safePush(pec, event)); } catch (RejectedExecutionException ree) { // TODO log? if (!event.isTerminal()) { close(PushEvent.error(ree)); } else { safePush(pec, event); } } }
private void doSend(PushEventConsumer< ? super T> pec, PushEvent<T> event) { try { promiseFactory.executor().execute(() -> safePush(pec, event)); } catch (RejectedExecutionException ree) { // TODO log? if (!event.isTerminal()) { close(PushEvent.error(ree)); } else { safePush(pec, event); } } }
private Promise<Long> doSendWithBackPressure( PushEventConsumer< ? super T> pec, PushEvent<T> event) { Deferred<Long> d = sameThread.deferred(); try { promiseFactory.executor().execute( () -> d.resolve(Long.valueOf( System.nanoTime() + safePush(pec, event)))); } catch (RejectedExecutionException ree) { // TODO log? if (!event.isTerminal()) { close(PushEvent.error(ree)); d.resolve(Long.valueOf(System.nanoTime())); } else { d.resolve( Long.valueOf(System.nanoTime() + safePush(pec, event))); } } return d.getPromise(); }
private Promise<Long> doSendWithBackPressure( PushEventConsumer< ? super T> pec, PushEvent<T> event) { Deferred<Long> d = sameThread.deferred(); try { promiseFactory.executor().execute( () -> d.resolve(Long.valueOf( System.nanoTime() + safePush(pec, event)))); } catch (RejectedExecutionException ree) { // TODO log? if (!event.isTerminal()) { close(PushEvent.error(ree)); d.resolve(Long.valueOf(System.nanoTime())); } else { d.resolve( Long.valueOf(System.nanoTime() + safePush(pec, event))); } } return d.getPromise(); }
private Promise<Long> doSendWithBackPressure( PushEventConsumer< ? super T> pec, PushEvent<T> event) { Deferred<Long> d = sameThread.deferred(); try { promiseFactory.executor().execute( () -> d.resolve(Long.valueOf( System.nanoTime() + safePush(pec, event)))); } catch (RejectedExecutionException ree) { // TODO log? if (!event.isTerminal()) { close(PushEvent.error(ree)); d.resolve(Long.valueOf(System.nanoTime())); } else { d.resolve( Long.valueOf(System.nanoTime() + safePush(pec, event))); } } return d.getPromise(); }
@Override public PushStream<T> adjustBackPressure(LongUnaryOperator adjustment) { AbstractPushStreamImpl<T> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext(event -> { try { long bp = eventStream.handleEvent(event); if (event.isTerminal()) { return ABORT; } else { return bp < 0 ? bp : adjustment.applyAsLong(bp); } } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public PushStream<T> adjustBackPressure(LongUnaryOperator adjustment) { AbstractPushStreamImpl<T> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext(event -> { try { long bp = eventStream.handleEvent(event); if (event.isTerminal()) { return ABORT; } else { return bp < 0 ? bp : adjustment.applyAsLong(bp); } } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
private long safePush(PushEventConsumer< ? super T> pec, PushEvent<T> event) { try { long backpressure = pec.accept(event) * 1000000; if (backpressure < 0 && !event.isTerminal()) { closeConsumer(pec, PushEvent.close()); return -1; } return event.isTerminal() ? -1 : backpressure; } catch (Exception e) { // TODO log? if (!event.isTerminal()) { closeConsumer(pec, PushEvent.error(e)); } return -1; } }
private long safePush(PushEventConsumer< ? super T> pec, PushEvent<T> event) { try { long backpressure = pec.accept(event) * 1000000; if (backpressure < 0 && !event.isTerminal()) { closeConsumer(pec, PushEvent.close()); return -1; } return event.isTerminal() ? -1 : backpressure; } catch (Exception e) { // TODO log? if (!event.isTerminal()) { closeConsumer(pec, PushEvent.error(e)); } return -1; } }
private long safePush(PushEventConsumer< ? super T> pec, PushEvent<T> event) { try { long backpressure = pec.accept(event) * 1000000; if (backpressure < 0 && !event.isTerminal()) { closeConsumer(pec, PushEvent.close()); return -1; } return event.isTerminal() ? -1 : backpressure; } catch (Exception e) { // TODO log? if (!event.isTerminal()) { closeConsumer(pec, PushEvent.error(e)); } return -1; } }
@Override public <R> PushStream<R> map(Function< ? super T, ? extends R> mapper) { AbstractPushStreamImpl<R> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext(event -> { try { if (!event.isTerminal()) { return eventStream.handleEvent( PushEvent.data(mapper.apply(event.getData()))); } else { return eventStream.handleEvent(event.nodata()); } } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public <R> PushStream<R> map(Function< ? super T, ? extends R> mapper) { AbstractPushStreamImpl<R> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext(event -> { try { if (!event.isTerminal()) { return eventStream.handleEvent( PushEvent.data(mapper.apply(event.getData()))); } else { return eventStream.handleEvent(event.nodata()); } } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }