List of usage examples for io.netty.util.concurrent Future cause
Throwable cause();
From source file:org.redisson.RedissonKeys.java
License:Apache License
@Override public RFuture<Long> deleteByPatternAsync(String pattern) { if (!commandExecutor.getConnectionManager().isClusterMode()) { return commandExecutor.evalWriteAsync((String) null, null, RedisCommands.EVAL_LONG, "local keys = redis.call('keys', ARGV[1]) " + "local n = 0 " + "for i=1, #keys,5000 do " + "n = n + redis.call('del', unpack(keys, i, math.min(i+4999, table.getn(keys)))) " + "end " + "return n;", Collections.emptyList(), pattern); }/*from w ww . jav a 2 s. co m*/ final RPromise<Long> result = commandExecutor.getConnectionManager().newPromise(); final AtomicReference<Throwable> failed = new AtomicReference<Throwable>(); final AtomicLong count = new AtomicLong(); Set<MasterSlaveEntry> entries = commandExecutor.getConnectionManager().getEntrySet(); final AtomicLong executed = new AtomicLong(entries.size()); final FutureListener<Long> listener = new FutureListener<Long>() { @Override public void operationComplete(Future<Long> future) throws Exception { if (future.isSuccess()) { count.addAndGet(future.getNow()); } else { failed.set(future.cause()); } checkExecution(result, failed, count, executed); } }; for (MasterSlaveEntry entry : entries) { RFuture<Collection<String>> findFuture = commandExecutor.readAsync(entry, null, RedisCommands.KEYS, pattern); findFuture.addListener(new FutureListener<Collection<String>>() { @Override public void operationComplete(Future<Collection<String>> future) throws Exception { if (!future.isSuccess()) { failed.set(future.cause()); checkExecution(result, failed, count, executed); return; } Collection<String> keys = future.getNow(); if (keys.isEmpty()) { checkExecution(result, failed, count, executed); return; } RFuture<Long> deleteFuture = deleteAsync(keys.toArray(new String[keys.size()])); deleteFuture.addListener(listener); } }); } return result; }
From source file:org.redisson.RedissonKeys.java
License:Apache License
@Override public RFuture<Long> deleteAsync(String... keys) { if (!commandExecutor.getConnectionManager().isClusterMode()) { return commandExecutor.writeAsync(null, RedisCommands.DEL, keys); }// ww w. ja v a 2 s. c o m Map<MasterSlaveEntry, List<String>> range2key = new HashMap<MasterSlaveEntry, List<String>>(); for (String key : keys) { int slot = commandExecutor.getConnectionManager().calcSlot(key); for (MasterSlaveEntry entry : commandExecutor.getConnectionManager().getEntrySet()) { List<String> list = range2key.get(entry); if (list == null) { list = new ArrayList<String>(); range2key.put(entry, list); } list.add(key); } } final RPromise<Long> result = commandExecutor.getConnectionManager().newPromise(); final AtomicReference<Throwable> failed = new AtomicReference<Throwable>(); final AtomicLong count = new AtomicLong(); final AtomicLong executed = new AtomicLong(range2key.size()); FutureListener<List<?>> listener = new FutureListener<List<?>>() { @Override public void operationComplete(Future<List<?>> future) throws Exception { if (future.isSuccess()) { List<Long> result = (List<Long>) future.get(); for (Long res : result) { count.addAndGet(res); } } else { failed.set(future.cause()); } checkExecution(result, failed, count, executed); } }; for (Entry<MasterSlaveEntry, List<String>> entry : range2key.entrySet()) { // executes in batch due to CROSSLOT error CommandBatchService executorService = new CommandBatchService(commandExecutor.getConnectionManager()); for (String key : entry.getValue()) { executorService.writeAsync(entry.getKey(), null, RedisCommands.DEL, key); } RFuture<List<?>> future = executorService.executeAsync(); future.addListener(listener); } return result; }
From source file:org.redisson.RedissonPermitExpirableSemaphore.java
License:Apache License
private RFuture<String> acquireAsync(final int permits, final long ttl, final TimeUnit timeUnit) { final RPromise<String> result = newPromise(); long timeoutDate = calcTimeout(ttl, timeUnit); RFuture<String> tryAcquireFuture = tryAcquireAsync(permits, timeoutDate); tryAcquireFuture.addListener(new FutureListener<String>() { @Override//w ww . ja va 2 s. c om public void operationComplete(Future<String> future) throws Exception { if (!future.isSuccess()) { result.tryFailure(future.cause()); return; } String permitId = future.getNow(); if (permitId != null && !permitId.startsWith(":")) { if (!result.trySuccess(permitId)) { releaseAsync(permitId); } return; } final RFuture<RedissonLockEntry> subscribeFuture = subscribe(); subscribeFuture.addListener(new FutureListener<RedissonLockEntry>() { @Override public void operationComplete(Future<RedissonLockEntry> future) throws Exception { if (!future.isSuccess()) { result.tryFailure(future.cause()); return; } acquireAsync(permits, subscribeFuture, result, ttl, timeUnit); } }); } }); return result; }
From source file:org.redisson.RedissonPermitExpirableSemaphore.java
License:Apache License
private void tryAcquireAsync(final AtomicLong time, final int permits, final RFuture<RedissonLockEntry> subscribeFuture, final RPromise<String> result, final long ttl, final TimeUnit timeUnit) { if (result.isDone()) { unsubscribe(subscribeFuture);//from w w w . jav a 2s . com return; } if (time.get() <= 0) { unsubscribe(subscribeFuture); result.trySuccess(null); return; } long timeoutDate = calcTimeout(ttl, timeUnit); final long current = System.currentTimeMillis(); RFuture<String> tryAcquireFuture = tryAcquireAsync(permits, timeoutDate); tryAcquireFuture.addListener(new FutureListener<String>() { @Override public void operationComplete(Future<String> future) throws Exception { if (!future.isSuccess()) { unsubscribe(subscribeFuture); result.tryFailure(future.cause()); return; } final Long nearestTimeout; String permitId = future.getNow(); if (permitId != null) { if (!permitId.startsWith(":")) { unsubscribe(subscribeFuture); if (!result.trySuccess(permitId)) { releaseAsync(permitId); } return; } else { nearestTimeout = Long.valueOf(permitId.substring(1)) - System.currentTimeMillis(); } } else { nearestTimeout = null; } long elapsed = System.currentTimeMillis() - current; time.addAndGet(-elapsed); if (time.get() <= 0) { unsubscribe(subscribeFuture); result.trySuccess(null); return; } // waiting for message final long current = System.currentTimeMillis(); final RedissonLockEntry entry = getEntry(); synchronized (entry) { if (entry.getLatch().tryAcquire()) { tryAcquireAsync(time, permits, subscribeFuture, result, ttl, timeUnit); } else { final AtomicReference<Timeout> waitTimeoutFutureRef = new AtomicReference<Timeout>(); final Timeout scheduledFuture; if (nearestTimeout != null) { scheduledFuture = commandExecutor.getConnectionManager().newTimeout(new TimerTask() { @Override public void run(Timeout timeout) throws Exception { if (waitTimeoutFutureRef.get() != null && !waitTimeoutFutureRef.get().cancel()) { return; } long elapsed = System.currentTimeMillis() - current; time.addAndGet(-elapsed); tryAcquireAsync(time, permits, subscribeFuture, result, ttl, timeUnit); } }, nearestTimeout, TimeUnit.MILLISECONDS); } else { scheduledFuture = null; } final Runnable listener = new Runnable() { @Override public void run() { if (waitTimeoutFutureRef.get() != null && !waitTimeoutFutureRef.get().cancel()) { entry.getLatch().release(); return; } if (scheduledFuture != null && !scheduledFuture.cancel()) { entry.getLatch().release(); return; } long elapsed = System.currentTimeMillis() - current; time.addAndGet(-elapsed); tryAcquireAsync(time, permits, subscribeFuture, result, ttl, timeUnit); } }; entry.addListener(listener); long t = time.get(); Timeout waitTimeoutFuture = commandExecutor.getConnectionManager() .newTimeout(new TimerTask() { @Override public void run(Timeout timeout) throws Exception { if (scheduledFuture != null && !scheduledFuture.cancel()) { return; } synchronized (entry) { if (entry.removeListener(listener)) { long elapsed = System.currentTimeMillis() - current; time.addAndGet(-elapsed); tryAcquireAsync(time, permits, subscribeFuture, result, ttl, timeUnit); } } } }, t, TimeUnit.MILLISECONDS); waitTimeoutFutureRef.set(waitTimeoutFuture); } } } }); }
From source file:org.redisson.RedissonPermitExpirableSemaphore.java
License:Apache License
private void acquireAsync(final int permits, final RFuture<RedissonLockEntry> subscribeFuture, final RPromise<String> result, final long ttl, final TimeUnit timeUnit) { if (result.isDone()) { unsubscribe(subscribeFuture);/*from ww w . j ava 2s. co m*/ return; } long timeoutDate = calcTimeout(ttl, timeUnit); RFuture<String> tryAcquireFuture = tryAcquireAsync(permits, timeoutDate); tryAcquireFuture.addListener(new FutureListener<String>() { @Override public void operationComplete(Future<String> future) throws Exception { if (!future.isSuccess()) { unsubscribe(subscribeFuture); result.tryFailure(future.cause()); return; } final Long nearestTimeout; String permitId = future.getNow(); if (permitId != null) { if (!permitId.startsWith(":")) { unsubscribe(subscribeFuture); if (!result.trySuccess(permitId)) { releaseAsync(permitId); } return; } else { nearestTimeout = Long.valueOf(permitId.substring(1)) - System.currentTimeMillis(); } } else { nearestTimeout = null; } final RedissonLockEntry entry = getEntry(); synchronized (entry) { if (entry.getLatch().tryAcquire(permits)) { acquireAsync(permits, subscribeFuture, result, ttl, timeUnit); } else { final Timeout scheduledFuture; if (nearestTimeout != null) { scheduledFuture = commandExecutor.getConnectionManager().newTimeout(new TimerTask() { @Override public void run(Timeout timeout) throws Exception { acquireAsync(permits, subscribeFuture, result, ttl, timeUnit); } }, nearestTimeout, TimeUnit.MILLISECONDS); } else { scheduledFuture = null; } Runnable listener = new Runnable() { @Override public void run() { if (scheduledFuture != null && !scheduledFuture.cancel()) { entry.getLatch().release(); return; } acquireAsync(permits, subscribeFuture, result, ttl, timeUnit); } }; entry.addListener(listener); } } } }); }
From source file:org.redisson.RedissonPermitExpirableSemaphore.java
License:Apache License
public RFuture<String> tryAcquireAsync() { final RPromise<String> result = newPromise(); RFuture<String> res = tryAcquireAsync(1, nonExpirableTimeout); res.addListener(new FutureListener<String>() { @Override//from w ww. j a v a 2 s .c o m public void operationComplete(Future<String> future) throws Exception { if (!future.isSuccess()) { result.tryFailure(future.cause()); return; } String permitId = future.getNow(); if (permitId != null && !permitId.startsWith(":")) { if (!result.trySuccess(permitId)) { releaseAsync(permitId); } } else { result.trySuccess(null); } } }); return result; }
From source file:org.redisson.RedissonPermitExpirableSemaphore.java
License:Apache License
private RFuture<String> tryAcquireAsync(final int permits, long waitTime, final long ttl, final TimeUnit timeUnit) { final RPromise<String> result = newPromise(); final AtomicLong time = new AtomicLong(timeUnit.toMillis(waitTime)); final long current = System.currentTimeMillis(); long timeoutDate = calcTimeout(ttl, timeUnit); RFuture<String> tryAcquireFuture = tryAcquireAsync(permits, timeoutDate); tryAcquireFuture.addListener(new FutureListener<String>() { @Override//from w ww. j a v a 2s. c o m public void operationComplete(Future<String> future) throws Exception { if (!future.isSuccess()) { result.tryFailure(future.cause()); return; } String permitId = future.getNow(); if (permitId != null && !permitId.startsWith(":")) { if (!result.trySuccess(permitId)) { releaseAsync(permitId); } return; } long elapsed = System.currentTimeMillis() - current; time.addAndGet(-elapsed); if (time.get() <= 0) { result.trySuccess(null); return; } final long current = System.currentTimeMillis(); final AtomicReference<Timeout> futureRef = new AtomicReference<Timeout>(); final RFuture<RedissonLockEntry> subscribeFuture = subscribe(); subscribeFuture.addListener(new FutureListener<RedissonLockEntry>() { @Override public void operationComplete(Future<RedissonLockEntry> future) throws Exception { if (!future.isSuccess()) { result.tryFailure(future.cause()); return; } if (futureRef.get() != null) { futureRef.get().cancel(); } long elapsed = System.currentTimeMillis() - current; time.addAndGet(-elapsed); tryAcquireAsync(time, permits, subscribeFuture, result, ttl, timeUnit); } }); if (!subscribeFuture.isDone()) { Timeout scheduledFuture = commandExecutor.getConnectionManager().newTimeout(new TimerTask() { @Override public void run(Timeout timeout) throws Exception { if (!subscribeFuture.isDone()) { result.trySuccess(null); } } }, time.get(), TimeUnit.MILLISECONDS); futureRef.set(scheduledFuture); } } }); return result; }
From source file:org.redisson.RedissonPermitExpirableSemaphore.java
License:Apache License
@Override public RFuture<Void> releaseAsync(final String permitId) { final RPromise<Void> result = newPromise(); tryReleaseAsync(permitId).addListener(new FutureListener<Boolean>() { @Override/*from w w w. ja v a2s .c om*/ public void operationComplete(Future<Boolean> future) throws Exception { if (!future.isSuccess()) { result.tryFailure(future.cause()); return; } if (future.getNow()) { result.trySuccess(null); } else { result.tryFailure(new IllegalArgumentException( "Permit with id " + permitId + " has already been released or doesn't exist")); } } }); return result; }
From source file:org.redisson.RedissonPriorityDeque.java
License:Apache License
public RFuture<V> pollLastAsync() { final long threadId = Thread.currentThread().getId(); final RPromise<V> result = new RedissonPromise<V>(); lock.lockAsync(threadId).addListener(new FutureListener<Void>() { @Override// w w w. j a v a2s. co m public void operationComplete(Future<Void> future) throws Exception { if (!future.isSuccess()) { result.tryFailure(future.cause()); return; } RFuture<V> f = commandExecutor.writeAsync(getName(), codec, RedisCommands.RPOP, getName()); f.addListener(new FutureListener<V>() { @Override public void operationComplete(Future<V> future) throws Exception { if (!future.isSuccess()) { result.tryFailure(future.cause()); return; } final V value = future.getNow(); lock.unlockAsync(threadId).addListener(new FutureListener<Void>() { @Override public void operationComplete(Future<Void> future) throws Exception { if (!future.isSuccess()) { result.tryFailure(future.cause()); return; } result.trySuccess(value); } }); } }); } }); return result; }
From source file:org.redisson.RedissonPriorityQueue.java
License:Apache License
public RFuture<V> pollAsync() { final long threadId = Thread.currentThread().getId(); final RPromise<V> result = new RedissonPromise<V>(); lock.lockAsync(threadId).addListener(new FutureListener<Void>() { @Override//from www . j av a 2 s . c o m public void operationComplete(Future<Void> future) throws Exception { if (!future.isSuccess()) { result.tryFailure(future.cause()); return; } RFuture<V> f = commandExecutor.writeAsync(getName(), codec, RedisCommands.LPOP, getName()); f.addListener(new FutureListener<V>() { @Override public void operationComplete(Future<V> future) throws Exception { if (!future.isSuccess()) { result.tryFailure(future.cause()); return; } final V value = future.getNow(); lock.unlockAsync(threadId).addListener(new FutureListener<Void>() { @Override public void operationComplete(Future<Void> future) throws Exception { if (!future.isSuccess()) { result.tryFailure(future.cause()); return; } result.trySuccess(value); } }); } }); } }); return result; }