@SuppressWarnings("unchecked") private <K, V> void getLocalAsyncMap(String name, Handler<AsyncResult<AsyncMap<K, V>>> resultHandler) { LocalAsyncMapImpl<K, V> asyncMap = (LocalAsyncMapImpl<K, V>) localAsyncMaps.computeIfAbsent(name, n -> new LocalAsyncMapImpl<>(vertx)); resultHandler.handle(Future.succeededFuture(new WrappedAsyncMap<>(asyncMap))); }
@Override public void putIfAbsent(K k, V v, long timeout, Handler<AsyncResult<V>> completionHandler) { long timestamp = System.nanoTime(); long timerId = vertx.setTimer(timeout, l -> removeIfExpired(k)); Holder<V> existing = map.putIfAbsent(k, new Holder<>(v, timerId, timeout, timestamp)); if (existing != null) { if (existing.expires()) { vertx.cancelTimer(timerId); } completionHandler.handle(Future.succeededFuture(existing.value)); } else { completionHandler.handle(Future.succeededFuture()); } }
@Override @SuppressWarnings("unchecked") public <K, V> void getAsyncMap(String name, Handler<AsyncResult<AsyncMap<K, V>>> resultHandler) { LocalAsyncMapImpl<K, V> asyncMap = asyncMaps.computeIfAbsent(name, n -> new LocalAsyncMapImpl(vertx)); vertx.runOnContext(v -> resultHandler.handle(Future.succeededFuture(asyncMap))); }
@Override public void put(K k, V v, long timeout, Handler<AsyncResult<Void>> completionHandler) { long timestamp = System.nanoTime(); long timerId = vertx.setTimer(timeout, l -> removeIfExpired(k)); Holder<V> previous = map.put(k, new Holder<>(v, timerId, timeout, timestamp)); if (previous != null && previous.expires()) { vertx.cancelTimer(previous.timerId); } completionHandler.handle(Future.succeededFuture()); }
@SuppressWarnings("unchecked") private <K, V> void getLocalAsyncMap(String name, Handler<AsyncResult<AsyncMap<K, V>>> resultHandler) { LocalAsyncMapImpl<K, V> asyncMap = (LocalAsyncMapImpl<K, V>) localAsyncMaps.computeIfAbsent(name, n -> new LocalAsyncMapImpl<>(vertx)); resultHandler.handle(Future.succeededFuture(new WrappedAsyncMap<>(asyncMap))); }
@Override public void put(K k, V v, long timeout, Handler<AsyncResult<Void>> completionHandler) { long timestamp = System.nanoTime(); long timerId = vertx.setTimer(timeout, l -> removeIfExpired(k)); Holder<V> previous = map.put(k, new Holder<>(v, timerId, timeout, timestamp)); if (previous != null && previous.expires()) { vertx.cancelTimer(previous.timerId); } completionHandler.handle(Future.succeededFuture()); }
@Override @SuppressWarnings("unchecked") public <K, V> void getAsyncMap(String name, Handler<AsyncResult<AsyncMap<K, V>>> resultHandler) { LocalAsyncMapImpl<K, V> asyncMap = asyncMaps.computeIfAbsent(name, n -> new LocalAsyncMapImpl(vertx)); vertx.runOnContext(v -> resultHandler.handle(Future.succeededFuture(asyncMap))); }
@Override public void putIfAbsent(K k, V v, long timeout, Handler<AsyncResult<V>> completionHandler) { long timestamp = System.nanoTime(); long timerId = vertx.setTimer(timeout, l -> removeIfExpired(k)); Holder<V> existing = map.putIfAbsent(k, new Holder<>(v, timerId, timeout, timestamp)); if (existing != null) { if (existing.expires()) { vertx.cancelTimer(timerId); } completionHandler.handle(Future.succeededFuture(existing.value)); } else { completionHandler.handle(Future.succeededFuture()); } }