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; } }
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 protected long handleEvent(PushEvent< ? extends T> event) { // If we have already been soft closed, or hard closed then abort if (!softClose.compareAndSet(false, event.isTerminal()) || closed.get() == CLOSED) { return ABORT; } try { queuePolicy.doOffer(eventQueue, event); long backPressure = pushbackPolicy.pushback(eventQueue); if(backPressure < 0) { close(); return ABORT; } if(semaphore.tryAcquire()) { startWorker(); } return backPressure; } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }
@Override public PushStream<T> adjustBackPressure( ToLongBiFunction<T,Long> 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(event.getData(), Long.valueOf(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; }
@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; }
@Override public PushStream<T> filter(Predicate< ? super T> predicate) { AbstractPushStreamImpl<T> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext((event) -> { try { if (!event.isTerminal()) { if (predicate.test(event.getData())) { return eventStream.handleEvent(event); } else { return CONTINUE; } } return eventStream.handleEvent(event); } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public PushStream<T> filter(Predicate< ? super T> predicate) { AbstractPushStreamImpl<T> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext((event) -> { try { if (!event.isTerminal()) { if (predicate.test(event.getData())) { return eventStream.handleEvent(event); } else { return CONTINUE; } } return eventStream.handleEvent(event); } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public PushStream<T> filter(Predicate< ? super T> predicate) { AbstractPushStreamImpl<T> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext((event) -> { try { if (!event.isTerminal()) { if (predicate.test(event.getData())) { return eventStream.handleEvent(event); } else { return CONTINUE; } } return eventStream.handleEvent(event); } 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; }
@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; }