/** * Get the value of an entry that is on disk without * faulting it in . It checks for the presence in the buffer also. * This method is used for concurrent map operations, SQLFabric and CQ processing * * @throws DiskAccessException * @since 5.1 */ static Object getValueOnDiskOrBuffer(DiskEntry entry, DiskRegion dr, RegionEntryContext context) { @Released Object v = getOffHeapValueOnDiskOrBuffer(entry, dr, context); if (v instanceof CachedDeserializable) { if (v instanceof Chunk) { @Released Chunk ohv = (Chunk) v; try { v = ohv.getDeserializedValue(null, null); if (v == ohv) { throw new IllegalStateException("sqlf tried to use getValueOnDiskOrBuffer"); } } finally { ohv.release(); // OFFHEAP the offheap ref is decremented here } } else { v = ((CachedDeserializable)v).getDeserializedValue(null, null); } } return v; }
@Override public List asList() { if(valueInList == null){ valueInList = new ArrayList(1); } valueInList.clear(); Object val = this.entry.getValueOffHeapOrDiskWithoutFaultIn((LocalRegion) getRegion()); if (val instanceof Chunk) { @Retained @Released Chunk ohval = (Chunk) val; try { // TODO OFFHEAP: val may be off-heap PdxInstance 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; }
@Override public Object[] toArray() { if(valueInArray == null){ valueInArray = new Object[1]; } Object val = this.entry.getValueOffHeapOrDiskWithoutFaultIn((LocalRegion) getRegion()); if (val instanceof Chunk) { @Retained @Released Chunk ohval = (Chunk) val; try { // TODO OFFHEAP: val may be off-heap PdxInstance 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(((GemFireCacheImpl)getRegion().getCache()).getCachePerfStats()); values.setElementType(valueType); } values.clear(); Object val = this.entry.getValueOffHeapOrDiskWithoutFaultIn((LocalRegion) getRegion()); if (val instanceof Chunk) { @Retained @Released Chunk ohval = (Chunk) val; try { // TODO OFFHEAP: val may be off-heap PdxInstance 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; }