@Test public void testDelayedDeserialization() { JavaSerializer<String> serializer = new JavaSerializer<>(getClass().getClassLoader()); String testValue = "Let's get binary!"; ByteBuffer serialized = serializer.serialize(testValue); OffHeapValueHolder<String> valueHolder = new LazyOffHeapValueHolder<>(1L, serialized, serializer, 10L, 20L, 15L, mock(WriteContext.class)); valueHolder.detach(); serialized.clear(); assertThat(valueHolder.get(), is(testValue)); }
mappedValue.detach(); valueHolderAtomicReference.set(mappedValue); return null;
if (valueHolder != null) { if (delayedDeserialization) { mappedValue.detach(); } else { mappedValue.forceDeserialization();
@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; }
mappedValue.detach(); valueHolderAtomicReference.set(mappedValue); return null;
if (valueHolder != null) { if (delayedDeserialization) { mappedValue.detach(); } else { mappedValue.forceDeserialization();
@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; }