@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; }
@Override public void open() throws HyracksDataException { if (open) { throw HyracksDataException.create(ErrorCode.VBC_ALREADY_OPEN); } allocator.reserveAllocation(pageSize, pageBudget); for (int i = 0; i < pageBudget; i++) { buckets[i] = new CacheBucket(); } largePages.set(0); used.set(0); open = true; }
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);