Documentation for page ID.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/a3581160 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/a3581160 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/a3581160 Branch: refs/heads/ignite-db-x-10884 Commit: a35811601e67fb025821d401515b41781b302a42 Parents: ad5aacf Author: Alexey Goncharuk <[email protected]> Authored: Tue Apr 26 10:57:37 2016 -0700 Committer: Alexey Goncharuk <[email protected]> Committed: Tue Apr 26 10:57:37 2016 -0700 ---------------------------------------------------------------------- .../ignite/internal/pagemem/FullPageId.java | 29 +++++++++++++++++--- .../ignite/internal/pagemem/PageIdUtils.java | 11 +++++--- 2 files changed, 32 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/a3581160/modules/core/src/main/java/org/apache/ignite/internal/pagemem/FullPageId.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/FullPageId.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/FullPageId.java index 0247aec..650a446 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/FullPageId.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/FullPageId.java @@ -19,10 +19,31 @@ package org.apache.ignite.internal.pagemem; import org.apache.ignite.internal.util.typedef.internal.SB; -import static org.apache.ignite.internal.pagemem.PageIdAllocator.FLAG_IDX; - /** - * + * Compound object used to address a page in the global page space. + * <p> + * There are three types of pages in PageMemory system: + * <ul> + * <li>DATA pages</li> + * <li>INDEX pages</li> + * <li>META pages</li> + * </ul> + * Generally, a full page ID consists of a cache ID and page ID. A page ID consists of + * file ID (22 bits) and page index (30 bits). + * Higher 12 bits of page ID are reserved for use in index pages to address entries inside data pages. + * File ID consists of 8 reserved bits, page type (2 bits) and partition ID (14 bits). + * Note that partition ID is not used in full page ID comparison for non-data pages. + * <p> + * The structure of a page ID is shown in the next diagram: + * <pre> + * +------------+--------+--+--------------+------------------------------+ + * | 12 bits | 8 bits |2b| 14 bits | 30 bits | + * +------------+--------+--+--------------+------------------------------+ + * | OFFSET | RESRVD |FL| PARTITION ID | PAGE INDEX | + * +------------+--------+--+--------------+------------------------------+ + * | FILE ID | + * +--------------------------+ + * </pre> */ public class FullPageId { /** */ @@ -42,7 +63,7 @@ public class FullPageId { this.pageId = PageIdUtils.pageId(pageId); this.cacheId = cacheId; - effectivePageId = PageIdUtils.flag(pageId) == FLAG_IDX ? PageIdUtils.effectiveIndexPageId(pageId) : this.pageId; + effectivePageId = PageIdUtils.effectivePageId(pageId); } /** http://git-wip-us.apache.org/repos/asf/ignite/blob/a3581160/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageIdUtils.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageIdUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageIdUtils.java index 3a14c5f..2fed4b3 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageIdUtils.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageIdUtils.java @@ -17,6 +17,8 @@ package org.apache.ignite.internal.pagemem; +import static org.apache.ignite.internal.pagemem.PageIdAllocator.FLAG_DATA; + /** * Utility class for page ID parts manipulation. * @@ -54,7 +56,8 @@ public final class PageIdUtils { private static final int FLAG_MASK = ~(-1 << FLAG_SIZE); /** */ - private static final long EFFECTIVE_INDEX_PAGE_ID_MASK = ((long)FLAG_MASK << (PAGE_IDX_SIZE + PART_ID_SIZE)) | PAGE_IDX_MASK; + private static final long EFFECTIVE_NON_DATA_PAGE_ID_MASK = + ((long)FLAG_MASK << (PAGE_IDX_SIZE + PART_ID_SIZE)) | PAGE_IDX_MASK; /** Maximum page number. */ public static final int MAX_PAGE_NUM = (1 << PAGE_IDX_SIZE) - 1; @@ -144,10 +147,10 @@ public final class PageIdUtils { /** * @param link Page link. - * @return Effective index page id. + * @return Effective page id. */ - public static long effectiveIndexPageId(long link) { - return link & EFFECTIVE_INDEX_PAGE_ID_MASK; + public static long effectivePageId(long link) { + return flag(link) == FLAG_DATA ? pageId(link) : link & EFFECTIVE_NON_DATA_PAGE_ID_MASK; } /**
