public <K, V> SnapshotRecord(LocalRegion region, Entry<K, V> entry) throws IOException { key = BlobHelper.serializeToBlob(entry.getKey()); if (entry instanceof NonTXEntry && region != null) { @Released Object v = ((NonTXEntry) entry).getRegionEntry().getValueOffHeapOrDiskWithoutFaultIn(region); try { value = convertToBytes(v); } finally { OffHeapHelper.release(v); } } else { value = convertToBytes(entry.getValue()); } }
@Override public List asList() { if (valueInList == null) { valueInList = new ArrayList(1); } valueInList.clear(); Object val = this.entry.getValueOffHeapOrDiskWithoutFaultIn((LocalRegion) getRegion()); if (val instanceof StoredObject) { @Retained @Released StoredObject ohval = (StoredObject) val; try { val = ohval.getDeserializedValue(getRegion(), this.entry); } finally { ohval.release(); } } else if (val instanceof CachedDeserializable) { val = ((CachedDeserializable) val).getDeserializedValue(getRegion(), this.entry); } valueInList.add(val); return valueInList; }
@Test public void setsEventOldValueToExistingRegionEntryValue_ifOperationGuaranteesOldValue() { givenExistingRegionEntry(); givenAnOperationThatGuaranteesOldValue(); Object oldValue = new Object(); when(existingRegionEntry.getValueOffHeapOrDiskWithoutFaultIn(same(internalRegion))) .thenReturn(oldValue); doPut(); verify(event, times(1)).setOldValue(same(oldValue), eq(true)); verify(event, never()).setOldValue(not(same(oldValue)), eq(true)); }
/** * establish the old value in this event as the current cache value, whether in memory or on disk */ public void setOldValueForQueryProcessing() { RegionEntry reentry = getRegion().getRegionMap().getEntry(this.getKey()); if (reentry != null) { @Retained Object v = reentry.getValueOffHeapOrDiskWithoutFaultIn(getRegion()); if (!(v instanceof Token)) { // v has already been retained. basicSetOldValue(v); // this event now owns the retention of v. } } }
private void setOldValueEvenIfFaultedOut() { final EntryEventImpl event = getEvent(); ReferenceCountHelper.skipRefCountTracking(); @Released Object oldValueInVMOrDisk = getRegionEntry().getValueOffHeapOrDiskWithoutFaultIn(event.getRegion()); ReferenceCountHelper.unskipRefCountTracking(); try { event.setOldValue(oldValueInVMOrDisk, true); } finally { OffHeapHelper.releaseWithNoTracking(oldValueInVMOrDisk); } }
private Object getTargetObjectForUpdate(RegionEntry entry) { if (this.indexOnValues) { Object o = entry.getValueOffHeapOrDiskWithoutFaultIn((LocalRegion) getRegion()); try { if (o instanceof StoredObject) { StoredObject ohval = (StoredObject) o; try { o = ohval.getDeserializedForReading(); } finally { ohval.release(); } } else if (o instanceof CachedDeserializable) { o = ((CachedDeserializable) o).getDeserializedForReading(); } } catch (EntryDestroyedException ignored) { return Token.INVALID; } return o; } else if (this.indexOnRegionKeys) { return entry.getKey(); } return ((LocalRegion) getRegion()).new NonTXEntry(entry); }
@Override public Object[] toArray() { if (valueInArray == null) { valueInArray = new Object[1]; } Object val = this.entry.getValueOffHeapOrDiskWithoutFaultIn((LocalRegion) getRegion()); if (val instanceof StoredObject) { @Retained @Released StoredObject ohval = (StoredObject) val; try { val = ohval.getDeserializedValue(getRegion(), this.entry); } finally { ohval.release(); } } else if (val instanceof CachedDeserializable) { val = ((CachedDeserializable) val).getDeserializedValue(getRegion(), this.entry); } valueInArray[0] = val; return valueInArray; }
@Override public SelectResults getValues() { if (values == null) { values = new ResultsBag(((HasCachePerfStats) getRegion().getCache()).getCachePerfStats()); values.setElementType(valueType); } values.clear(); Object val = this.entry.getValueOffHeapOrDiskWithoutFaultIn((LocalRegion) getRegion()); if (val instanceof StoredObject) { @Retained @Released StoredObject ohval = (StoredObject) val; try { val = ohval.getDeserializedValue(getRegion(), this.entry); } finally { ohval.release(); } } else if (val instanceof CachedDeserializable) { val = ((CachedDeserializable) val).getDeserializedValue(getRegion(), this.entry); } values.add(val); return values; }