/** * Extracts a page ID from the given page link. * * @param link Page link. * @return Page ID. */ public static long pageId(long link) { return flag(link) == PageIdAllocator.FLAG_IDX ? link : link & PAGE_ID_MASK; }
/** * @param pageId Page ID. * @param statHolder Statistics holder to track IO operations. * @return Page absolute pointer. * @throws IgniteCheckedException If failed. */ protected final long acquirePage(long pageId, IoStatisticsHolder statHolder) throws IgniteCheckedException { assert PageIdUtils.flag(pageId) == FLAG_IDX && PageIdUtils.partId(pageId) == INDEX_PARTITION || PageIdUtils.flag(pageId) == FLAG_DATA && PageIdUtils.partId(pageId) <= MAX_PARTITION_ID : U.hexLong(pageId) + " flag=" + PageIdUtils.flag(pageId) + " part=" + PageIdUtils.partId(pageId); return pageMem.acquirePage(grpId, pageId, statHolder); }
/** */ private void checkRootsPageIdFlag(long treeRoot, long reuseListRoot) throws StorageException { if (PageIdUtils.flag(treeRoot) != PageMemory.FLAG_DATA) throw new StorageException("Wrong tree root page id flag: treeRoot=" + U.hexLong(treeRoot) + ", METASTORAGE_CACHE_ID=" + METASTORAGE_CACHE_ID); if (PageIdUtils.flag(reuseListRoot) != PageMemory.FLAG_DATA) throw new StorageException("Wrong reuse list root page id flag: reuseListRoot=" + U.hexLong(reuseListRoot) + ", METASTORAGE_CACHE_ID=" + METASTORAGE_CACHE_ID); }
/** * @param pageId Page ID. * @param partId Partition ID. */ public static long changePartitionId(long pageId, int partId) { byte flag = flag(pageId); int pageIdx = pageIndex(pageId); return pageId(partId, flag, pageIdx); } }
/** * @param pageId Page id. */ public static String toDetailString(long pageId) { return "pageId=" + pageId + "(offset=" + itemId(pageId) + ", flags=" + Integer.toBinaryString(flag(pageId)) + ", partId=" + partId(pageId) + ", index=" + pageIndex(pageId) + ")" ; }
/** * @param pageId Page id. * @param pageSize Page size. * @return Page id of tracking page which set pageId belongs to. */ public long trackingPageFor(long pageId, int pageSize) { assert PageIdUtils.pageIndex(pageId) > 0; int pageIdx = ((PageIdUtils.pageIndex(pageId) - COUNT_OF_EXTRA_PAGE) / countOfPageToTrack(pageSize)) * countOfPageToTrack(pageSize) + COUNT_OF_EXTRA_PAGE; long trackingPageId = PageIdUtils.pageId(PageIdUtils.partId(pageId), PageIdUtils.flag(pageId), pageIdx); assert PageIdUtils.pageIndex(trackingPageId) <= PageIdUtils.pageIndex(pageId); return trackingPageId; }
if (PageIdUtils.flag(pageId) == FLAG_DATA) { int rotatedIdPart = PageIO.getRotatedIdPart(pageAddr);
pendingTreeRoot = pageMem.allocatePage(grpId, partId, PageMemory.FLAG_DATA); assert PageIdUtils.flag(treeRoot) == PageMemory.FLAG_DATA; assert PageIdUtils.flag(reuseListRoot) == PageMemory.FLAG_DATA; assert PageIdUtils.flag(pendingTreeRoot) == PageMemory.FLAG_DATA; pendingTreeRoot = io.getPendingTreeRoot(pageAddr); if (PageIdUtils.flag(treeRoot) != PageMemory.FLAG_DATA) throw new StorageException("Wrong tree root page id flag: treeRoot=" + U.hexLong(treeRoot) + ", part=" + partId + ", grpId=" + grpId); if (PageIdUtils.flag(reuseListRoot) != PageMemory.FLAG_DATA) throw new StorageException("Wrong reuse list root page id flag: reuseListRoot=" + U.hexLong(reuseListRoot) + ", part=" + partId + ", grpId=" + grpId); if (PageIdUtils.flag(pendingTreeRoot) != PageMemory.FLAG_DATA) throw new StorageException("Wrong pending tree root page id flag: reuseListRoot=" + U.hexLong(reuseListRoot) + ", part=" + partId + ", grpId=" + grpId);
reuseListRoot = pageMemory.allocatePage(TX_LOG_CACHE_ID, INDEX_PARTITION, PageMemory.FLAG_IDX); assert PageIdUtils.flag(treeRoot) == PageMemory.FLAG_IDX; assert PageIdUtils.flag(reuseListRoot) == PageMemory.FLAG_IDX; reuseListRoot = io.getReuseListRoot(pageAddr); assert PageIdUtils.flag(treeRoot) == PageMemory.FLAG_IDX : U.hexLong(treeRoot) + ", TX_LOG_CACHE_ID=" + TX_LOG_CACHE_ID; assert PageIdUtils.flag(reuseListRoot) == PageMemory.FLAG_IDX : U.hexLong(reuseListRoot) + ", TX_LOG_CACHE_ID=" + TX_LOG_CACHE_ID;
/** * Extracts a page ID from the given page link. * * @param link Page link. * @return Page ID. */ public static long pageId(long link) { return flag(link) == PageIdAllocator.FLAG_IDX ? link : link & PAGE_ID_MASK; }
/** * @param pageId Page ID. * @return Page absolute pointer. * @throws IgniteCheckedException If failed. */ protected final long acquirePage(long pageId) throws IgniteCheckedException { assert PageIdUtils.flag(pageId) == FLAG_IDX && PageIdUtils.partId(pageId) == INDEX_PARTITION || PageIdUtils.flag(pageId) == FLAG_DATA && PageIdUtils.partId(pageId) <= MAX_PARTITION_ID : U.hexLong(pageId) + " flag=" + PageIdUtils.flag(pageId) + " part=" + PageIdUtils.partId(pageId); return pageMem.acquirePage(grpId, pageId); }
/** */ private void checkRootsPageIdFlag(long treeRoot, long reuseListRoot) throws StorageException { if (PageIdUtils.flag(treeRoot) != PageMemory.FLAG_DATA) throw new StorageException("Wrong tree root page id flag: treeRoot=" + U.hexLong(treeRoot) + ", METASTORAGE_CACHE_ID=" + METASTORAGE_CACHE_ID); if (PageIdUtils.flag(reuseListRoot) != PageMemory.FLAG_DATA) throw new StorageException("Wrong reuse list root page id flag: reuseListRoot=" + U.hexLong(reuseListRoot) + ", METASTORAGE_CACHE_ID=" + METASTORAGE_CACHE_ID); }
/** * @param pageId Page ID. * @param partId Partition ID. */ public static long changePartitionId(long pageId, int partId) { byte flag = flag(pageId); int pageIdx = pageIndex(pageId); return pageId(partId, flag, pageIdx); } }
/** * @param pageId Page id. */ public static String toDetailString(long pageId) { return "pageId=" + pageId + "(offset=" + itemId(pageId) + ", flags=" + Integer.toBinaryString(flag(pageId)) + ", partId=" + partId(pageId) + ", index=" + pageIndex(pageId) + ")" ; }
/** * @param pageId Page id. * @param pageSize Page size. * @return Page id of tracking page which set pageId belongs to. */ public long trackingPageFor(long pageId, int pageSize) { assert PageIdUtils.pageIndex(pageId) > 0; int pageIdx = ((PageIdUtils.pageIndex(pageId) - COUNT_OF_EXTRA_PAGE) / countOfPageToTrack(pageSize)) * countOfPageToTrack(pageSize) + COUNT_OF_EXTRA_PAGE; long trackingPageId = PageIdUtils.pageId(PageIdUtils.partId(pageId), PageIdUtils.flag(pageId), pageIdx); assert PageIdUtils.pageIndex(trackingPageId) <= PageIdUtils.pageIndex(pageId); return trackingPageId; }
reuseListRoot = pageMemory.allocatePage(TX_LOG_CACHE_ID, INDEX_PARTITION, PageMemory.FLAG_IDX); assert PageIdUtils.flag(treeRoot) == PageMemory.FLAG_IDX; assert PageIdUtils.flag(reuseListRoot) == PageMemory.FLAG_IDX; reuseListRoot = io.getReuseListRoot(pageAddr); assert PageIdUtils.flag(treeRoot) == PageMemory.FLAG_IDX : U.hexLong(treeRoot) + ", TX_LOG_CACHE_ID=" + TX_LOG_CACHE_ID; assert PageIdUtils.flag(reuseListRoot) == PageMemory.FLAG_IDX : U.hexLong(reuseListRoot) + ", TX_LOG_CACHE_ID=" + TX_LOG_CACHE_ID;
pendingTreeRoot = pageMem.allocatePage(grpId, partId, PageMemory.FLAG_DATA); assert PageIdUtils.flag(treeRoot) == PageMemory.FLAG_DATA; assert PageIdUtils.flag(reuseListRoot) == PageMemory.FLAG_DATA; assert PageIdUtils.flag(pendingTreeRoot) == PageMemory.FLAG_DATA; pendingTreeRoot = io.getPendingTreeRoot(pageAddr); if (PageIdUtils.flag(treeRoot) != PageMemory.FLAG_DATA) throw new StorageException("Wrong tree root page id flag: treeRoot=" + U.hexLong(treeRoot) + ", part=" + partId + ", grpId=" + grpId); if (PageIdUtils.flag(reuseListRoot) != PageMemory.FLAG_DATA) throw new StorageException("Wrong reuse list root page id flag: reuseListRoot=" + U.hexLong(reuseListRoot) + ", part=" + partId + ", grpId=" + grpId); if (PageIdUtils.flag(pendingTreeRoot) != PageMemory.FLAG_DATA) throw new StorageException("Wrong pending tree root page id flag: reuseListRoot=" + U.hexLong(reuseListRoot) + ", part=" + partId + ", grpId=" + grpId);