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;
     }
 
     /**

Reply via email to