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; }
private void recycle(VirtualPage page) { // recycle only if // 1. not a large page // 2. allocation is not above budget if (DEBUG) { int readCount = page.getReadLatchCount(); if (readCount > 0 || page.isWriteLatched()) { throw new IllegalStateException("Attempt to delete a file with latched pages (read: " + readCount + ", write: " + page.isWriteLatched() + ")"); } } if (used.get() < pageBudget && !page.isLargePage()) { page.reset(); freePages.offer(page); } }
private void recycleAllPages() { for (int i = 0; i < buckets.length; i++) { final CacheBucket bucket = buckets[i]; bucket.bucketLock.lock(); try { VirtualPage curr = bucket.cachedPage; while (curr != null) { bucket.cachedPage = curr.next(); recycle(curr); curr = bucket.cachedPage; } } finally { bucket.bucketLock.unlock(); } } }
@Override public String toString() { StringBuilder str = new StringBuilder(); str.append("{\"class\":\"").append(getClass().getSimpleName()).append("\", \"readers\":") .append(getReadLatchCount()).append(",\"writers\":").append(isWriteLatched()); str.append(",\"next\":").append(next); str.append("}"); return str.toString(); }
VirtualPage curr = bucket.cachedPage; while (curr != null) { if (BufferedFileHandle.getFileId(curr.dpid()) == fileId) { reclaimedPages++; if (curr.isLargePage()) { largePages.getAndAdd(-curr.getFrameSizeMultiplier()); used.addAndGet(-curr.getFrameSizeMultiplier()); } else { used.decrementAndGet(); bucket.cachedPage = curr.next(); recycle(curr); curr = bucket.cachedPage; } else { prev.next(curr.next()); recycle(curr); curr = prev.next(); curr = curr.next();
((VirtualPage) cPage).buffer(newBuffer); ((VirtualPage) cPage).multiplier(multiplier);
@Test public void test() throws HyracksDataException { LIFOMetaDataFrame frame = new LIFOMetaDataFrame(); VirtualPage page = new VirtualPage(ByteBuffer.allocate(512), 512); MutableArrayValueReference testKey = new MutableArrayValueReference("TestLSNKey".getBytes()); frame.setPage(page);