@Override public void add(final K k, final V v, final Handler<AsyncResult<Void>> completionHandler) { vertx.executeBlocking( () -> { map.put(k, HazelcastServerID.convertServerID(v)); return null; }, completionHandler); }
@Override public void removeAllForValue(final V val, final Handler<AsyncResult<Void>> completionHandler) { vertx.executeBlocking( () -> { for (Map.Entry<K, V> entry : map.entrySet()) { V v = entry.getValue(); if (val.equals(v)) { map.remove(entry.getKey(), v); } } return null; }, completionHandler); }
@Override public void get(final K k, final Handler<AsyncResult<ChoosableIterable<V>>> resultHandler) { ChoosableSet<V> entries = cache.get(k); Future<ChoosableIterable<V>> result = Future.future(); if (entries != null && entries.isInitialised()) { result.setResult(entries).setHandler(resultHandler); } else { vertx.executeBlocking( () -> map.get(k), (AsyncResult<Collection<V>> res2) -> { Future<ChoosableIterable<V>> sresult = Future.future(); if (res2.succeeded()) { Collection<V> entries2 = res2.result(); ChoosableSet<V> sids; if (entries2 != null) { sids = new ChoosableSet<>(entries2.size()); for (V hid : entries2) { sids.add(hid); } } else { sids = new ChoosableSet<>(0); } ChoosableSet<V> prev = cache.putIfAbsent(k, sids); if (prev != null) { // Merge them prev.merge(sids); sids = prev; } sids.setInitialised(); sresult.setResult(sids); } else { sresult.setFailure(result.cause()); } sresult.setHandler(resultHandler); }); } }
@Override public void remove(final K k, final V v, final Handler<AsyncResult<Boolean>> completionHandler) { vertx.executeBlocking(() -> map.remove(k, v), completionHandler); }