@Override public boolean containsKey(K key) throws StoreAccessException { checkKey(key); return internalGet(key, false, false) != null; }
@Override public Map<K, ValueHolder<V>> bulkComputeIfAbsent(Set<? extends K> keys, final Function<Iterable<? extends K>, Iterable<? extends Map.Entry<? extends K, ? extends V>>> mappingFunction) throws StoreAccessException { Map<K, ValueHolder<V>> result = new HashMap<>(keys.size()); for (K key : keys) { checkKey(key); Function<K, V> function = k -> { java.util.Iterator<? extends Map.Entry<? extends K, ? extends V>> iterator = mappingFunction.apply(Collections.singleton(k)).iterator(); Map.Entry<? extends K, ? extends V> result1 = iterator.next(); if (result1 != null) { checkKey(result1.getKey()); return result1.getValue(); } else { return null; } }; ValueHolder<V> computed = computeIfAbsent(key, function); result.put(key, computed); } return result; }
Map<K, ValueHolder<V>> result = new HashMap<>(keys.size()); for (K key : keys) { checkKey(key); BiFunction<K, V, V> biFunction = (k, v) -> { Map.Entry<K, V> entry = new Map.Entry<K, V>() { Map.Entry<? extends K, ? extends V> result1 = iterator.next(); if (result1 != null) { checkKey(result1.getKey()); return result1.getValue(); } else {
@Override public Store.ValueHolder<V> get(K key) throws StoreAccessException { checkKey(key); getObserver.begin(); ValueHolder<V> result = internalGet(key, true, true); if (result == null) { getObserver.end(StoreOperationOutcomes.GetOutcome.MISS); } else { getObserver.end(StoreOperationOutcomes.GetOutcome.HIT); } return result; }
@Override public ValueHolder<V> getAndCompute(K key, BiFunction<? super K, ? super V, ? extends V> mappingFunction) throws StoreAccessException { checkKey(key);
@Override public RemoveStatus remove(final K key, final V value) throws StoreAccessException { checkKey(key); checkValue(value);
@Override public ReplaceStatus replace(final K key, final V oldValue, final V newValue) throws NullPointerException, IllegalArgumentException, StoreAccessException { checkKey(key); checkValue(oldValue); checkValue(newValue);
@Override public boolean remove(final K key) throws StoreAccessException { checkKey(key);
@Override public ValueHolder<V> computeAndGet(final K key, final BiFunction<? super K, ? super V, ? extends V> mappingFunction, final Supplier<Boolean> replaceEqual, Supplier<Boolean> invokeWriter) throws StoreAccessException { checkKey(key);
@Override public PutStatus put(final K key, final V value) throws StoreAccessException { checkKey(key); checkValue(value);
@Override public ValueHolder<V> replace(final K key, final V value) throws NullPointerException, StoreAccessException { checkKey(key); checkValue(value);
private Store.ValueHolder<V> internalComputeIfAbsent(final K key, final Function<? super K, ? extends V> mappingFunction, boolean fault, final boolean delayedDeserialization) throws StoreAccessException { checkKey(key);
@Override public Store.ValueHolder<V> putIfAbsent(final K key, final V value, Consumer<Boolean> put) throws NullPointerException, StoreAccessException { checkKey(key); checkValue(value);
@Override public ValueHolder<V> getAndFault(K key) throws StoreAccessException { checkKey(key); getAndFaultObserver.begin(); ValueHolder<V> mappedValue; final StoreEventSink<K, V> eventSink = eventDispatcher.eventSink(); try { mappedValue = backingMap().computeIfPresentAndPin(key, (mappedKey, mappedValue1) -> { if(mappedValue1.isExpired(timeSource.getTimeMillis())) { onExpiration(mappedKey, mappedValue1, eventSink); return null; } mappedValue1.detach(); return mappedValue1; }); eventDispatcher.releaseEventSink(eventSink); if (mappedValue == null) { getAndFaultObserver.end(AuthoritativeTierOperationOutcomes.GetAndFaultOutcome.MISS); } else { getAndFaultObserver.end(AuthoritativeTierOperationOutcomes.GetAndFaultOutcome.HIT); } } catch (RuntimeException re) { eventDispatcher.releaseEventSinkAfterFailure(eventSink, re); throw handleException(re); } return mappedValue; }
@Override public boolean flush(K key, final ValueHolder<V> valueFlushed) { checkKey(key); flushObserver.begin(); final StoreEventSink<K, V> eventSink = eventDispatcher.eventSink(); try { boolean result = backingMap().computeIfPinned(key, (k, valuePresent) -> { if (valuePresent.getId() == valueFlushed.getId()) { if (valueFlushed.isExpired(timeSource.getTimeMillis())) { onExpiration(k, valuePresent, eventSink); return null; } valuePresent.updateMetadata(valueFlushed); valuePresent.writeBack(); } return valuePresent; }, valuePresent -> valuePresent.getId() == valueFlushed.getId()); eventDispatcher.releaseEventSink(eventSink); if (result) { flushObserver.end(AuthoritativeTierOperationOutcomes.FlushOutcome.HIT); return true; } else { flushObserver.end(AuthoritativeTierOperationOutcomes.FlushOutcome.MISS); return false; } } catch (RuntimeException re) { eventDispatcher.releaseEventSinkAfterFailure(eventSink, re); throw re; } }
@Override public boolean containsKey(K key) throws StoreAccessException { checkKey(key); return internalGet(key, false, false) != null; }
@Override public Map<K, ValueHolder<V>> bulkComputeIfAbsent(Set<? extends K> keys, final Function<Iterable<? extends K>, Iterable<? extends Map.Entry<? extends K, ? extends V>>> mappingFunction) throws StoreAccessException { Map<K, ValueHolder<V>> result = new HashMap<>(keys.size()); for (K key : keys) { checkKey(key); Function<K, V> function = k -> { java.util.Iterator<? extends Map.Entry<? extends K, ? extends V>> iterator = mappingFunction.apply(Collections.singleton(k)).iterator(); Map.Entry<? extends K, ? extends V> result1 = iterator.next(); if (result1 != null) { checkKey(result1.getKey()); return result1.getValue(); } else { return null; } }; ValueHolder<V> computed = computeIfAbsent(key, function); result.put(key, computed); } return result; }
@Override public Store.ValueHolder<V> get(K key) throws StoreAccessException { checkKey(key); getObserver.begin(); ValueHolder<V> result = internalGet(key, true, true); if (result == null) { getObserver.end(StoreOperationOutcomes.GetOutcome.MISS); } else { getObserver.end(StoreOperationOutcomes.GetOutcome.HIT); } return result; }
@Override public ValueHolder<V> getAndFault(K key) throws StoreAccessException { checkKey(key); getAndFaultObserver.begin(); ValueHolder<V> mappedValue; final StoreEventSink<K, V> eventSink = eventDispatcher.eventSink(); try { mappedValue = backingMap().computeIfPresentAndPin(key, (mappedKey, mappedValue1) -> { if(mappedValue1.isExpired(timeSource.getTimeMillis(), TimeUnit.MILLISECONDS)) { onExpiration(mappedKey, mappedValue1, eventSink); return null; } mappedValue1.detach(); return mappedValue1; }); eventDispatcher.releaseEventSink(eventSink); if (mappedValue == null) { getAndFaultObserver.end(AuthoritativeTierOperationOutcomes.GetAndFaultOutcome.MISS); } else { getAndFaultObserver.end(AuthoritativeTierOperationOutcomes.GetAndFaultOutcome.HIT); } } catch (RuntimeException re) { eventDispatcher.releaseEventSinkAfterFailure(eventSink, re); throw handleException(re); } return mappedValue; }