private void sendSync(boolean sync, List<Object> msg) { if (sync) { RSemaphore semaphore = redisson.getSemaphore(getSyncName(msg.get(2))); semaphore.release(); } }
@Override public int countActiveWorkers() { String id = generateRequestId(); int subscribers = (int) workersTopic.publish(id); if (subscribers == 0) { return 0; } RSemaphore semaphore = redisson.getSemaphore(workersSemaphoreName + ":" + id); try { semaphore.tryAcquire(subscribers, 10, TimeUnit.MINUTES); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } RAtomicLong atomicLong = redisson.getAtomicLong(workersCounterName + ":" + id); long result = atomicLong.get(); redisson.getKeys().delete(semaphore, atomicLong); return (int) result; }
void waitSync(List<Object> result) { if (result.size() < 2) { return; } Long syncs = (Long) result.get(result.size() - 2); Double syncId = (Double) result.get(result.size() - 1); if (syncs != null && syncs > 0) { RSemaphore semaphore = redisson.getSemaphore(getSyncName(syncId)); try { semaphore.acquire(syncs.intValue()); semaphore.delete(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } }
@Override @SneakyThrows public Lock tryGetLock(String lockName, long timeout, TimeUnit timeUnit) { String id = IdUtils.newUUID(); RSemaphore semaphore = rSemaphoreMap.computeIfAbsent(lockName, key -> { RSemaphore rSemaphore = redissonClient.getSemaphore(key); rSemaphore.trySetPermits(1); return rSemaphore; }); log.debug("try lock {} permits:{},id={}", lockName, semaphore.availablePermits(), id); boolean success = semaphore.tryAcquire(timeout, timeUnit); if (!success) { throw new TimeoutException("try lock " + lockName + " timeout"); } return () -> { semaphore.release(); log.debug("unlock {},id={}", lockName, id); }; }
@Override public boolean acquire(Object key, int permits) { RSemaphore rSemaphore = redisson.getSemaphore(key.toString()); rSemaphore.trySetPermits(permits); return rSemaphore.tryAcquire(); }
public static void main(String[] args) throws InterruptedException { // connects to 127.0.0.1:6379 by default RedissonClient redisson = Redisson.create(); RSemaphore s = redisson.getSemaphore("test"); s.trySetPermits(5); s.acquire(3); Thread t = new Thread() { @Override public void run() { RSemaphore s = redisson.getSemaphore("test"); s.release(); s.release(); } }; t.start(); s.acquire(4); redisson.shutdown(); }
/** * get named semaphore * * @param name * @return */ public RSemaphore getSemaphore(String name) { RSemaphore semaphore = redissonClient.getSemaphore(name); semaphore.trySetPermits(1); return semaphore; } }
protected RFuture<Void> tryAcquire(long timeout, TimeUnit timeUnit, int value) { final RPromise<Void> acquireResult = new RedissonPromise<Void>(); semaphore.tryAcquireAsync(value, timeout, timeUnit).addListener(new FutureListener<Boolean>() { @Override public void operationComplete(Future<Boolean> future) throws Exception { if (!future.isSuccess()) { acquireResult.tryFailure(future.cause()); return; } if (future.getNow()) { acquireResult.trySuccess(null); } else { acquireResult.tryFailure(new TimeoutException()); } } }); return acquireResult; }
semaphore.releaseAsync().addListener(new FutureListener<Void>() { @Override public void operationComplete(Future<Void> future) throws Exception {
/** * get named semaphore * * @param name * @return */ public RSemaphore getSemaphore(String name) { RSemaphore semaphore = redissonClient.getSemaphore(name); semaphore.trySetPermits(1); return semaphore; } }
protected RFuture<Void> tryAcquire(long timeout, TimeUnit timeUnit, int value) { final RPromise<Void> acquireResult = new RedissonPromise<Void>(); semaphore.tryAcquireAsync(value, timeout, timeUnit).addListener(new FutureListener<Boolean>() { @Override public void operationComplete(Future<Boolean> future) throws Exception { if (!future.isSuccess()) { acquireResult.tryFailure(future.cause()); return; } if (future.getNow()) { acquireResult.trySuccess(null); } else { acquireResult.tryFailure(new TimeoutException()); } } }); return acquireResult; }
semaphore.releaseAsync().addListener(new FutureListener<Void>() { @Override public void operationComplete(Future<Void> future) throws Exception {
private void sendSync(boolean sync, List<Object> msg) { if (sync) { RSemaphore semaphore = redisson.getSemaphore(getSyncName(msg.get(2))); semaphore.release(); } }
@Override public int countActiveWorkers() { String id = generateRequestId(); int subscribers = (int) workersTopic.publish(id); if (subscribers == 0) { return 0; } RSemaphore semaphore = redisson.getSemaphore(workersSemaphoreName + ":" + id); try { semaphore.tryAcquire(subscribers, 10, TimeUnit.MINUTES); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } RAtomicLong atomicLong = redisson.getAtomicLong(workersCounterName + ":" + id); long result = atomicLong.get(); redisson.getKeys().delete(semaphore, atomicLong); return (int) result; }
void waitSync(List<Object> result) { if (result.size() < 2) { return; } Long syncs = (Long) result.get(result.size() - 2); Double syncId = (Double) result.get(result.size() - 1); if (syncs != null && syncs > 0) { RSemaphore semaphore = redisson.getSemaphore(getSyncName(syncId)); try { semaphore.acquire(syncs.intValue()); semaphore.delete(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } }
protected RFuture<Void> tryAcquire(long timeout, TimeUnit timeUnit, int value) { final RPromise<Void> acquireResult = new RedissonPromise<Void>(); semaphore.tryAcquireAsync(value, timeout, timeUnit).addListener(new FutureListener<Boolean>() { @Override public void operationComplete(Future<Boolean> future) throws Exception { if (!future.isSuccess()) { acquireResult.tryFailure(future.cause()); return; } if (future.getNow()) { acquireResult.trySuccess(null); } else { acquireResult.tryFailure(new TimeoutException()); } } }); return acquireResult; }
semaphore.releaseAsync().addListener(new FutureListener<Void>() { @Override public void operationComplete(Future<Void> future) throws Exception {
@Override public void onMessage(CharSequence channel, String id) { redisson.getAtomicLong(workersCounterName + ":" + id).getAndAdd(workers); redisson.getSemaphore(workersSemaphoreName + ":" + id).release(); } });
private void waitFor(String uuid, int subscribers) { RSemaphore semaphore = redissonClient.getSemaphore(String.format(JobConfig.WORKER_REQ, uuid)); try { semaphore.tryAcquire(subscribers, 10L, TimeUnit.SECONDS); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } redissonClient.getKeys().delete(semaphore); }
void waitSync(List<Object> result) { if (result.size() < 2) { return; } Long syncs = (Long) result.get(result.size() - 2); Double syncId = (Double) result.get(result.size() - 1); if (syncs != null && syncs > 0) { RSemaphore semaphore = redisson.getSemaphore(getSyncName(syncId)); try { semaphore.acquire(syncs.intValue()); semaphore.delete(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } }