@Override public void fixupCapacityOnLargeRead(ICachedPageInternal cPage) throws HyracksDataException { ByteBuffer oldBuffer = ((CachedPage) cPage).buffer; final int multiplier = cPage.getFrameSizeMultiplier(); final int newSize = pageSize * multiplier; final int delta = multiplier - 1; oldBuffer.position(0); ensureBudgetForLargePages(delta); ByteBuffer newBuffer = allocator.allocate(newSize, 1)[0]; newBuffer.put(oldBuffer); numPages.getAndAdd(delta); ((CachedPage) cPage).buffer = newBuffer; }
private ICachedPageInternal allocatePage(int multiplier) { Integer cpId = cpIdFreeList.poll(); if (cpId == null) { cpId = cpIdCounter.getAndIncrement(); } CachedPage cPage = new CachedPage(cpId, allocator.allocate(pageSize * multiplier, 1)[0], this); cPage.setFrameSizeMultiplier(multiplier); bufferCache.addPage(cPage); numPages.getAndAdd(multiplier); return cPage; }
private VirtualPage getOrAllocPage(long dpid) { VirtualPage page = freePages.poll(); if (page == null) { page = new VirtualPage(allocator.allocate(pageSize, 1)[0], pageSize); page.multiplier(1); } page.dpid(dpid); used.incrementAndGet(); return page; }
ByteBuffer newBuffer = allocator.allocate(pageSize * multiplier, 1)[0]; oldBuffer.position(0); if (multiplier < origMultiplier) {
ByteBuffer newBuffer = allocator.allocate(newSize, 1)[0]; newBuffer.put(oldBuffer); numPages.getAndAdd(delta);