private void discardUncachedBuffers(List<MemoryBuffer> list) { for (MemoryBuffer buffer : list) { bufferManager.getAllocator().deallocate(buffer); } }
public void discardData() { LlapIoImpl.LOG.debug("Discarding disk data (if any wasn't cached)"); for (CacheStripeData stripe : stripes) { if (stripe.colStreams == null || stripe.colStreams.isEmpty()) continue; for (List<CacheStreamData> streams : stripe.colStreams.values()) { for (CacheStreamData cos : streams) { for (MemoryBuffer buffer : cos.data) { if (LlapIoImpl.CACHE_LOGGER.isTraceEnabled()) { LlapIoImpl.CACHE_LOGGER.trace("Deallocating " + buffer); } bufferManager.getAllocator().deallocate(buffer); } } } stripe.colStreams.clear(); } }
private void unlockBuffer(LlapAllocatorBuffer buffer) { if (buffer.decRef() == 0) { if (LlapIoImpl.CACHE_LOGGER.isTraceEnabled()) { LlapIoImpl.CACHE_LOGGER.trace("Deallocating {} that was not cached", buffer); } allocator.deallocate(buffer); } metrics.decrCacheNumLockedBuffers(); }
private void unlockBuffer(LlapSerDeDataBuffer buffer, boolean handleLastDecRef) { boolean isLastDecref = (buffer.decRef() == 0); if (handleLastDecRef && isLastDecref) { if (buffer.isCached) { cachePolicy.notifyUnlock(buffer); } else { if (LlapIoImpl.CACHE_LOGGER.isTraceEnabled()) { LlapIoImpl.CACHE_LOGGER.trace("Deallocating {} that was not cached", buffer); } allocator.deallocate(buffer); } } metrics.decrCacheNumLockedBuffers(); }
private void unlockBuffer(LlapDataBuffer buffer, boolean handleLastDecRef) { boolean isLastDecref = (buffer.decRef() == 0); if (handleLastDecRef && isLastDecref) { // This is kind of not pretty, but this is how we detect whether buffer was cached. // We would always set this for lookups at put time. if (buffer.declaredCachedLength != LlapDataBuffer.UNKNOWN_CACHED_LENGTH) { cachePolicy.notifyUnlock(buffer); } else { if (LlapIoImpl.CACHE_LOGGER.isTraceEnabled()) { LlapIoImpl.CACHE_LOGGER.trace("Deallocating {} that was not cached", buffer); } allocator.deallocate(buffer); } } metrics.decrCacheNumLockedBuffers(); }
@Override public void handleCacheCollision(DataCache cacheWrapper, MemoryBuffer replacementBuffer, List<MemoryBuffer> cacheBuffers) { assert cacheBuffers == null; // This is done at pre-read stage where there's nothing special w/refcounts. Just release. cacheWrapper.getAllocator().deallocate(getBuffer()); // Replace the buffer in our big range list, as well as in current results. this.setBuffer(replacementBuffer); }
@Override public void handleCacheCollision(DataCache cacheWrapper, MemoryBuffer replacementBuffer, List<MemoryBuffer> cacheBuffers) { assert originalCbIndex >= 0; // Had the put succeeded for our new buffer, it would have refcount of 2 - 1 from put, // and 1 from notifyReused call above. "Old" buffer now has the 1 from put; new buffer // is not in cache. cacheWrapper.getAllocator().deallocate(getBuffer()); cacheWrapper.reuseBuffer(replacementBuffer); // Replace the buffer in our big range list, as well as in current results. this.buffer = replacementBuffer; cacheBuffers.set(originalCbIndex, replacementBuffer); originalCbIndex = -1; // This can only happen once at decompress time. }
@Override public void handleCacheCollision(DataCache cacheWrapper, MemoryBuffer replacementBuffer, List<MemoryBuffer> cacheBuffers) { assert cacheBuffers == null; // This is done at pre-read stage where there's nothing special w/refcounts. Just release. cacheWrapper.getAllocator().deallocate(getBuffer()); // Replace the buffer in our big range list, as well as in current results. this.setBuffer(replacementBuffer); }
csd.getCacheBuffers().remove(chunk.getBuffer()); try { cacheWrapper.getAllocator().deallocate(chunk.getBuffer()); } catch (Throwable t) { LOG.error("Ignoring the cleanup error after another error", t);
private void releaseInitialRefcounts(DiskRangeList current) { while (current != null) { DiskRangeList toFree = current; current = current.next; if (toFree instanceof ProcCacheChunk) { ProcCacheChunk pcc = (ProcCacheChunk)toFree; if (pcc.originalData != null) { // TODO: can this still happen? we now clean these up explicitly to avoid other issues. // This can only happen in case of failure - we read some data, but didn't decompress // it. Deallocate the buffer directly, do not decref. if (pcc.getBuffer() != null) { cacheWrapper.getAllocator().deallocate(pcc.getBuffer()); } continue; } } if (!(toFree instanceof CacheChunk)) continue; CacheChunk cc = (CacheChunk)toFree; if (cc.getBuffer() == null) continue; MemoryBuffer buffer = cc.getBuffer(); cacheWrapper.releaseBuffer(buffer); cc.setBuffer(null); } }
for (MemoryBuffer buffer : largeBuffers) { if (buffer == null) continue; allocator.deallocate(buffer); allocator.deallocate(smallBuffer[0]);
private void discardUncachedBuffers(List<MemoryBuffer> list) { for (MemoryBuffer buffer : list) { bufferManager.getAllocator().deallocate(buffer); } }
public void discardData() { LlapIoImpl.LOG.debug("Discarding disk data (if any wasn't cached)"); for (CacheStripeData stripe : stripes) { if (stripe.colStreams == null || stripe.colStreams.isEmpty()) continue; for (List<CacheStreamData> streams : stripe.colStreams.values()) { for (CacheStreamData cos : streams) { for (MemoryBuffer buffer : cos.data) { if (LlapIoImpl.CACHE_LOGGER.isTraceEnabled()) { LlapIoImpl.CACHE_LOGGER.trace("Deallocating " + buffer); } bufferManager.getAllocator().deallocate(buffer); } } } stripe.colStreams.clear(); } }
private void unlockBuffer(LlapAllocatorBuffer buffer) { if (buffer.decRef() == 0) { if (LlapIoImpl.CACHE_LOGGER.isTraceEnabled()) { LlapIoImpl.CACHE_LOGGER.trace("Deallocating {} that was not cached", buffer); } allocator.deallocate(buffer); } metrics.decrCacheNumLockedBuffers(); }
private void unlockBuffer(LlapSerDeDataBuffer buffer, boolean handleLastDecRef) { boolean isLastDecref = (buffer.decRef() == 0); if (handleLastDecRef && isLastDecref) { if (buffer.isCached) { cachePolicy.notifyUnlock(buffer); } else { if (LlapIoImpl.CACHE_LOGGER.isTraceEnabled()) { LlapIoImpl.CACHE_LOGGER.trace("Deallocating {} that was not cached", buffer); } allocator.deallocate(buffer); } } metrics.decrCacheNumLockedBuffers(); }
private void unlockBuffer(LlapDataBuffer buffer, boolean handleLastDecRef) { boolean isLastDecref = (buffer.decRef() == 0); if (handleLastDecRef && isLastDecref) { // This is kind of not pretty, but this is how we detect whether buffer was cached. // We would always set this for lookups at put time. if (buffer.declaredCachedLength != LlapDataBuffer.UNKNOWN_CACHED_LENGTH) { cachePolicy.notifyUnlock(buffer); } else { if (LlapIoImpl.CACHE_LOGGER.isTraceEnabled()) { LlapIoImpl.CACHE_LOGGER.trace("Deallocating {} that was not cached", buffer); } allocator.deallocate(buffer); } } metrics.decrCacheNumLockedBuffers(); }