List of usage examples for io.netty.util.concurrent Future cause
Throwable cause();
From source file:org.redisson.reactive.NettyFuturePublisher.java
License:Apache License
@Override public void subscribe(final Subscriber<? super T> subscriber) { try {/*from w w w. j ava 2 s. c o m*/ subscriber.onSubscribe(new ReactiveSubscription<T>(this, subscriber) { @Override public void request(long elements) { Action.checkRequest(elements); if (isComplete()) return; that.addListener(new FutureListener<T>() { @Override public void operationComplete(Future<T> future) throws Exception { if (!future.isSuccess()) { subscriber.onError(future.cause()); return; } if (future.getNow() != null) { subscriber.onNext(future.getNow()); } onComplete(); } }); } }); } catch (Throwable throwable) { Exceptions.throwIfFatal(throwable); subscriber.onError(throwable); } }
From source file:org.redisson.RedissonBinaryStream.java
License:Apache License
private void write(final byte[] value, final RPromise<Void> result, final int chunkSize, final int i) { final int len = Math.min(value.length - i * chunkSize, chunkSize); byte[] bytes = Arrays.copyOfRange(value, i * chunkSize, i * chunkSize + len); writeAsync(bytes).addListener(new FutureListener<Void>() { @Override/*w w w . ja v a 2s .co m*/ public void operationComplete(Future<Void> future) throws Exception { if (!future.isSuccess()) { result.tryFailure(future.cause()); return; } int j = i + 1; if (j * chunkSize > value.length) { result.trySuccess(null); } else { write(value, result, chunkSize, j); } } }); }
From source file:org.redisson.RedissonBlockingFairQueue.java
License:Apache License
@Override public RFuture<V> takeAsync() { final RPromise<V> promise = newPromise(); RFuture<Long> tryAcquireFuture = tryAcquireAsync(); tryAcquireFuture.addListener(new FutureListener<Long>() { @Override/*from ww w . j a v a2s. c o m*/ public void operationComplete(Future<Long> future) throws Exception { if (!future.isSuccess()) { promise.tryFailure(future.cause()); return; } final Long currentTimeout = future.getNow(); if (currentTimeout == null) { final RFuture<V> pollFuture = RedissonBlockingFairQueue.super.takeAsync(); pollFuture.addListener(new FutureListener<V>() { @Override public void operationComplete(Future<V> future) throws Exception { if (!future.isSuccess()) { promise.tryFailure(future.cause()); return; } promise.trySuccess(future.getNow()); } }); } else { final RFuture<RedissonLockEntry> subscribeFuture = subscribe(); final AtomicReference<Timeout> futureRef = new AtomicReference<Timeout>(); subscribeFuture.addListener(new FutureListener<RedissonLockEntry>() { @Override public void operationComplete(Future<RedissonLockEntry> future) throws Exception { if (!future.isSuccess()) { promise.tryFailure(future.cause()); return; } if (futureRef.get() != null) { futureRef.get().cancel(); } tryTakeAsync(subscribeFuture, promise); } }); } } }); return promise; }
From source file:org.redisson.RedissonBlockingFairQueue.java
License:Apache License
@Override public RFuture<V> pollAsync() { final RPromise<V> promise = newPromise(); RFuture<Long> tryAcquireFuture = tryAcquireAsync(); tryAcquireFuture.addListener(new FutureListener<Long>() { @Override//from w w w . j a v a2s.c o m public void operationComplete(Future<Long> future) throws Exception { if (!future.isSuccess()) { promise.tryFailure(future.cause()); return; } final Long currentTimeout = future.getNow(); if (currentTimeout == null) { final RFuture<V> pollFuture = RedissonBlockingFairQueue.super.pollAsync(); pollFuture.addListener(new FutureListener<V>() { @Override public void operationComplete(Future<V> future) throws Exception { if (!future.isSuccess()) { promise.tryFailure(future.cause()); return; } promise.trySuccess(future.getNow()); } }); } else { promise.trySuccess(null); } } }); return promise; }
From source file:org.redisson.RedissonBlockingFairQueue.java
License:Apache License
@Override public RFuture<V> pollAsync(final long timeout, final TimeUnit unit) { final long startTime = System.currentTimeMillis(); final RPromise<V> promise = newPromise(); RFuture<Long> tryAcquireFuture = tryAcquireAsync(); tryAcquireFuture.addListener(new FutureListener<Long>() { @Override//from w ww. j a va 2 s . c o m public void operationComplete(Future<Long> future) throws Exception { if (!future.isSuccess()) { promise.tryFailure(future.cause()); return; } Long currentTimeout = future.getNow(); if (currentTimeout == null) { long spentTime = System.currentTimeMillis() - startTime; long remainTime = unit.toMillis(timeout) - spentTime; if (remainTime > 0) { final RFuture<V> pollFuture = RedissonBlockingFairQueue.super.pollAsync(remainTime, TimeUnit.MILLISECONDS); pollFuture.addListener(new FutureListener<V>() { @Override public void operationComplete(Future<V> future) throws Exception { if (!future.isSuccess()) { promise.tryFailure(future.cause()); return; } promise.trySuccess(future.getNow()); } }); } else { promise.trySuccess(null); } } else { long spentTime = System.currentTimeMillis() - startTime; long remainTime = unit.toMillis(timeout) - spentTime; remainTime = Math.min(remainTime, currentTimeout); if (remainTime <= 0) { promise.trySuccess(null); return; } final RFuture<RedissonLockEntry> subscribeFuture = subscribe(); final AtomicReference<Timeout> futureRef = new AtomicReference<Timeout>(); subscribeFuture.addListener(new FutureListener<RedissonLockEntry>() { @Override public void operationComplete(Future<RedissonLockEntry> future) throws Exception { if (!future.isSuccess()) { promise.tryFailure(future.cause()); return; } if (futureRef.get() != null) { futureRef.get().cancel(); } tryPollAsync(startTime, timeout, unit, subscribeFuture, promise); } }); if (!subscribeFuture.isDone()) { Timeout scheduledFuture = commandExecutor.getConnectionManager() .newTimeout(new TimerTask() { @Override public void run(Timeout timeout) throws Exception { if (!subscribeFuture.isDone()) { subscribeFuture.cancel(false); promise.trySuccess(null); } } }, remainTime, TimeUnit.MILLISECONDS); futureRef.set(scheduledFuture); } } } }); return promise; }
From source file:org.redisson.RedissonBlockingFairQueue.java
License:Apache License
private void tryTakeAsync(final RFuture<RedissonLockEntry> subscribeFuture, final RPromise<V> promise) { if (promise.isDone()) { unsubscribe(subscribeFuture);//w w w .jav a 2s .c o m return; } RFuture<Long> tryAcquireFuture = tryAcquireAsync(); tryAcquireFuture.addListener(new FutureListener<Long>() { @Override public void operationComplete(Future<Long> future) throws Exception { if (!future.isSuccess()) { unsubscribe(subscribeFuture); promise.tryFailure(future.cause()); return; } Long currentTimeout = future.getNow(); if (currentTimeout == null) { final RFuture<V> pollFuture = RedissonBlockingFairQueue.super.takeAsync(); pollFuture.addListener(new FutureListener<V>() { @Override public void operationComplete(Future<V> future) throws Exception { unsubscribe(subscribeFuture); if (!future.isSuccess()) { promise.tryFailure(future.cause()); return; } promise.trySuccess(future.getNow()); } }); } else { final RedissonLockEntry entry = getEntry(); synchronized (entry) { if (entry.getLatch().tryAcquire()) { tryTakeAsync(subscribeFuture, promise); } else { final AtomicBoolean executed = new AtomicBoolean(); final AtomicReference<Timeout> futureRef = new AtomicReference<Timeout>(); final Runnable listener = new Runnable() { @Override public void run() { executed.set(true); if (futureRef.get() != null) { futureRef.get().cancel(); } tryTakeAsync(subscribeFuture, promise); } }; entry.addListener(listener); if (!executed.get()) { Timeout scheduledFuture = commandExecutor.getConnectionManager() .newTimeout(new TimerTask() { @Override public void run(Timeout t) throws Exception { synchronized (entry) { if (entry.removeListener(listener)) { tryTakeAsync(subscribeFuture, promise); } } } }, currentTimeout, TimeUnit.MILLISECONDS); futureRef.set(scheduledFuture); } } } } }; }); }
From source file:org.redisson.RedissonBlockingFairQueue.java
License:Apache License
private void tryPollAsync(final long startTime, final long timeout, final TimeUnit unit, final RFuture<RedissonLockEntry> subscribeFuture, final RPromise<V> promise) { if (promise.isDone()) { unsubscribe(subscribeFuture);/*from w ww . j a v a2 s . co m*/ return; } long spentTime = System.currentTimeMillis() - startTime; long remainTime = unit.toMillis(timeout) - spentTime; if (remainTime <= 0) { unsubscribe(subscribeFuture); promise.trySuccess(null); return; } RFuture<Long> tryAcquireFuture = tryAcquireAsync(); tryAcquireFuture.addListener(new FutureListener<Long>() { @Override public void operationComplete(Future<Long> future) throws Exception { if (!future.isSuccess()) { unsubscribe(subscribeFuture); promise.tryFailure(future.cause()); return; } Long currentTimeout = future.getNow(); if (currentTimeout == null) { long spentTime = System.currentTimeMillis() - startTime; long remainTime = unit.toMillis(timeout) - spentTime; if (remainTime > 0) { final RFuture<V> pollFuture = RedissonBlockingFairQueue.super.pollAsync(remainTime, TimeUnit.MILLISECONDS); pollFuture.addListener(new FutureListener<V>() { @Override public void operationComplete(Future<V> future) throws Exception { unsubscribe(subscribeFuture); if (!future.isSuccess()) { promise.tryFailure(future.cause()); return; } promise.trySuccess(future.getNow()); } }); } else { unsubscribe(subscribeFuture); promise.trySuccess(null); } } else { final RedissonLockEntry entry = getEntry(); synchronized (entry) { if (entry.getLatch().tryAcquire()) { tryPollAsync(startTime, timeout, unit, subscribeFuture, promise); } else { final AtomicBoolean executed = new AtomicBoolean(); final AtomicReference<Timeout> futureRef = new AtomicReference<Timeout>(); final Runnable listener = new Runnable() { @Override public void run() { executed.set(true); if (futureRef.get() != null) { futureRef.get().cancel(); } tryPollAsync(startTime, timeout, unit, subscribeFuture, promise); } }; entry.addListener(listener); if (!executed.get()) { long spentTime = System.currentTimeMillis() - startTime; long remainTime = unit.toMillis(timeout) - spentTime; Timeout scheduledFuture = commandExecutor.getConnectionManager() .newTimeout(new TimerTask() { @Override public void run(Timeout t) throws Exception { synchronized (entry) { if (entry.removeListener(listener)) { tryPollAsync(startTime, timeout, unit, subscribeFuture, promise); } } } }, remainTime, TimeUnit.MILLISECONDS); futureRef.set(scheduledFuture); } } } } }; }); }
From source file:org.redisson.RedissonBlockingFairQueue.java
License:Apache License
@Override public RFuture<V> pollLastAndOfferFirstToAsync(final String queueName, final long timeout, final TimeUnit unit) { final long startTime = System.currentTimeMillis(); final RPromise<V> promise = newPromise(); RFuture<Long> tryAcquireFuture = tryAcquireAsync(); tryAcquireFuture.addListener(new FutureListener<Long>() { @Override// w w w .ja va 2s. c o m public void operationComplete(Future<Long> future) throws Exception { if (!future.isSuccess()) { promise.tryFailure(future.cause()); return; } Long currentTimeout = future.getNow(); if (currentTimeout == null) { long spentTime = System.currentTimeMillis() - startTime; long remainTime = unit.toMillis(timeout) - spentTime; if (remainTime > 0) { final RFuture<V> pollFuture = RedissonBlockingFairQueue.super.pollLastAndOfferFirstToAsync( queueName, remainTime, TimeUnit.MILLISECONDS); pollFuture.addListener(new FutureListener<V>() { @Override public void operationComplete(Future<V> future) throws Exception { if (!future.isSuccess()) { promise.tryFailure(future.cause()); return; } promise.trySuccess(future.getNow()); } }); } else { promise.trySuccess(null); } } else { long spentTime = System.currentTimeMillis() - startTime; long remainTime = unit.toMillis(timeout) - spentTime; remainTime = Math.min(remainTime, currentTimeout); if (remainTime <= 0) { promise.trySuccess(null); return; } final RFuture<RedissonLockEntry> subscribeFuture = subscribe(); final AtomicReference<Timeout> futureRef = new AtomicReference<Timeout>(); subscribeFuture.addListener(new FutureListener<RedissonLockEntry>() { @Override public void operationComplete(Future<RedissonLockEntry> future) throws Exception { if (!future.isSuccess()) { promise.tryFailure(future.cause()); return; } if (futureRef.get() != null) { futureRef.get().cancel(); } tryPollLastAndOfferFirstToAsync(startTime, timeout, unit, subscribeFuture, promise, queueName); } }); if (!subscribeFuture.isDone()) { Timeout scheduledFuture = commandExecutor.getConnectionManager() .newTimeout(new TimerTask() { @Override public void run(Timeout timeout) throws Exception { if (!subscribeFuture.isDone()) { subscribeFuture.cancel(false); promise.trySuccess(null); } } }, remainTime, TimeUnit.MILLISECONDS); futureRef.set(scheduledFuture); } } } }); return promise; }
From source file:org.redisson.RedissonBlockingFairQueue.java
License:Apache License
private void tryPollLastAndOfferFirstToAsync(final long startTime, final long timeout, final TimeUnit unit, final RFuture<RedissonLockEntry> subscribeFuture, final RPromise<V> promise, final String queueName) { if (promise.isDone()) { unsubscribe(subscribeFuture);/*from w w w. j a v a2s . com*/ return; } long spentTime = System.currentTimeMillis() - startTime; long remainTime = unit.toMillis(timeout) - spentTime; if (remainTime <= 0) { unsubscribe(subscribeFuture); promise.trySuccess(null); return; } RFuture<Long> tryAcquireFuture = tryAcquireAsync(); tryAcquireFuture.addListener(new FutureListener<Long>() { @Override public void operationComplete(Future<Long> future) throws Exception { if (!future.isSuccess()) { unsubscribe(subscribeFuture); promise.tryFailure(future.cause()); return; } Long currentTimeout = future.getNow(); if (currentTimeout == null) { long spentTime = System.currentTimeMillis() - startTime; long remainTime = unit.toMillis(timeout) - spentTime; if (remainTime > 0) { final RFuture<V> pollFuture = RedissonBlockingFairQueue.super.pollLastAndOfferFirstToAsync( queueName, remainTime, TimeUnit.MILLISECONDS); pollFuture.addListener(new FutureListener<V>() { @Override public void operationComplete(Future<V> future) throws Exception { unsubscribe(subscribeFuture); if (!future.isSuccess()) { promise.tryFailure(future.cause()); return; } promise.trySuccess(future.getNow()); } }); } else { unsubscribe(subscribeFuture); promise.trySuccess(null); } } else { final RedissonLockEntry entry = getEntry(); synchronized (entry) { if (entry.getLatch().tryAcquire()) { tryPollAsync(startTime, timeout, unit, subscribeFuture, promise); } else { final AtomicBoolean executed = new AtomicBoolean(); final AtomicReference<Timeout> futureRef = new AtomicReference<Timeout>(); final Runnable listener = new Runnable() { @Override public void run() { executed.set(true); if (futureRef.get() != null) { futureRef.get().cancel(); } tryPollLastAndOfferFirstToAsync(startTime, timeout, unit, subscribeFuture, promise, queueName); } }; entry.addListener(listener); if (!executed.get()) { long spentTime = System.currentTimeMillis() - startTime; long remainTime = unit.toMillis(timeout) - spentTime; Timeout scheduledFuture = commandExecutor.getConnectionManager() .newTimeout(new TimerTask() { @Override public void run(Timeout t) throws Exception { synchronized (entry) { if (entry.removeListener(listener)) { tryPollLastAndOfferFirstToAsync(startTime, timeout, unit, subscribeFuture, promise, queueName); } } } }, remainTime, TimeUnit.MILLISECONDS); futureRef.set(scheduledFuture); } } } } }; }); }
From source file:org.redisson.RedissonBoundedBlockingQueue.java
License:Apache License
private RPromise<V> wrapTakeFuture(final RFuture<V> takeFuture) { final RPromise<V> result = new PromiseDelegator<V>(commandExecutor.getConnectionManager().<V>newPromise()) { @Override/*w ww .jav a2 s. c om*/ public boolean cancel(boolean mayInterruptIfRunning) { super.cancel(mayInterruptIfRunning); return takeFuture.cancel(mayInterruptIfRunning); }; }; takeFuture.addListener(new FutureListener<V>() { @Override public void operationComplete(Future<V> future) throws Exception { if (!future.isSuccess()) { result.tryFailure(future.cause()); return; } createSemaphore(null).releaseAsync().addListener(new FutureListener<Void>() { @Override public void operationComplete(Future<Void> future) throws Exception { result.trySuccess(takeFuture.getNow()); } }); } }); return result; }