java.lang.Object
org.apache.ignite.internal.persistence.tree.io.PageIO
Direct Known Subclasses:
AbstractDataPageIO, BPlusIO, BPlusMetaIO, PageMetaIO, PagesListMetaIO, PagesListNodeIO

public abstract class PageIO extends Object
Base format for all the page types. Checklist for page IO implementations and usage (The Rules): 1. IO should not have any `public static` methods. We have versioned IOs and any static method will mean that it have to always work in backward compatible way between all the IO versions. The base class PageIO has static methods (like {@link #getPageId(long)}) intentionally: this base format can not be changed between versions. 2. IO must correctly override initNewPage(long, long, int) method and call super. We have logic that relies on this behavior. 3. Page IO type ID constant must be declared in this class to have a list of all the existing IO types in a single place. 4. IO must be added to getBPlusIO(int, int) or to getPageIO(int, int). 5. Always keep in mind that IOs are versioned and their format can change from version to version. In this respect it is a good practice to avoid exposing details of IO internal format on it's API. The API should be minimalistic and abstract, so that internal format in future IO version can be completely changed without any changes to the API of this page IO. 6. Page IO API should not have any version dependent semantics and should not change API semantics in newer versions. 7. It is almost always preferable to read or write (especially write) page contents using static methods on PageAccessHelper. To just initialize new page use PageAccessHelper#initPage(PageMemory, int, long, PageIO, IgniteWriteAheadLogManager, PageLockListener, IoStatisticsHolder) method with needed IO instance.
  • Field Details

  • Constructor Details

    • PageIO

      protected PageIO(int type, int ver)
      Parameters:
      type - Page type.
      ver - Page format version.
  • Method Details

    • getType

      public static int getType(ByteBuffer buf)
      Parameters:
      buf - Buffer.
      Returns:
      Page type.
    • getType

      public static int getType(long pageAddr)
      Parameters:
      pageAddr - Page address.
      Returns:
      Page type.
    • setType

      public static void setType(long pageAddr, int type)
      Parameters:
      pageAddr - Page address.
      type - Type.
    • getVersion

      public static int getVersion(ByteBuffer buf)
      Parameters:
      buf - Buffer.
      Returns:
      Version.
    • getVersion

      public static int getVersion(long pageAddr)
      Parameters:
      pageAddr - Page address.
      Returns:
      Version.
    • setVersion

      protected static void setVersion(long pageAddr, int ver)
      Parameters:
      pageAddr - Page address.
      ver - Version.
    • getPageId

      public static long getPageId(ByteBuffer buf)
      Parameters:
      buf - Buffer.
      Returns:
      Page ID.
    • getPageId

      public static long getPageId(long pageAddr)
      Parameters:
      pageAddr - Page address.
      Returns:
      Page ID.
    • setPageId

      public static void setPageId(long pageAddr, long pageId)
      Parameters:
      pageAddr - Page address.
      pageId - Page ID.
    • getRotatedIdPart

      public static int getRotatedIdPart(long pageAddr)
      Parameters:
      pageAddr - Page address.
      Returns:
      Rotated page ID part.
    • setRotatedIdPart

      public static void setRotatedIdPart(long pageAddr, int rotatedIdPart)
      Parameters:
      pageAddr - Page address.
      rotatedIdPart - Rotated page ID part.
    • setCompressionType

      public static void setCompressionType(ByteBuffer page, byte compressType)
      Parameters:
      page - Page buffer.
      compressType - Compression type.
    • getCompressionType

      public static byte getCompressionType(ByteBuffer page)
      Parameters:
      page - Page buffer.
      Returns:
      Compression type.
    • getCompressionType

      public static byte getCompressionType(long pageAddr)
      Parameters:
      pageAddr - Page address.
      Returns:
      Compression type.
    • setCompressedSize

      public static void setCompressedSize(ByteBuffer page, short compressedSize)
      Parameters:
      page - Page buffer.
      compressedSize - Compressed size.
    • getCompressedSize

      public static short getCompressedSize(ByteBuffer page)
      Parameters:
      page - Page buffer.
      Returns:
      Compressed size.
    • getCompressedSize

      public static short getCompressedSize(long pageAddr)
      Parameters:
      pageAddr - Page address.
      Returns:
      Compressed size.
    • setCompactedSize

      public static void setCompactedSize(ByteBuffer page, short compactedSize)
      Parameters:
      page - Page buffer.
      compactedSize - Compacted size.
    • getCompactedSize

      public static short getCompactedSize(ByteBuffer page)
      Parameters:
      page - Page buffer.
      Returns:
      Compacted size.
    • getCompactedSize

      public static short getCompactedSize(long pageAddr)
      Parameters:
      pageAddr - Page address.
      Returns:
      Compacted size.
    • getCrc

      public static int getCrc(long pageAddr)
      Parameters:
      pageAddr - Page address.
      Returns:
      Checksum.
    • setCrc

      public static void setCrc(long pageAddr, int crc)
      Parameters:
      pageAddr - Page address.
      crc - Checksum.
    • getCrc

      public static int getCrc(ByteBuffer buf)
      Parameters:
      buf - Buffer.
      Returns:
      Checksum.
    • setCrc

      public static void setCrc(ByteBuffer buf, int crc)
      Parameters:
      buf - Buffer.
      crc - Checksum.
    • registerH2

      public static void registerH2(IOVersions<? extends BPlusInnerIO<?>> innerIOs, IOVersions<? extends BPlusLeafIO<?>> leafIOs, IOVersions<? extends BPlusInnerIO<?>> mvccInnerIOs, IOVersions<? extends BPlusLeafIO<?>> mvccLeafIOs)
      Registers this B+Tree IO versions.
      Parameters:
      innerIOs - Inner IO versions.
      leafIOs - Leaf IO versions.
      mvccInnerIOs - Inner IO versions with mvcc enabled.
      mvccLeafIOs - Leaf IO versions with mvcc enabled.
    • registerH2ExtraInner

      public static void registerH2ExtraInner(IOVersions<? extends BPlusInnerIO<?>> innerExtIOs, boolean mvcc)
      Registers extra inner IO versions.
      Parameters:
      innerExtIOs - Extra versions.
    • registerH2ExtraLeaf

      public static void registerH2ExtraLeaf(IOVersions<? extends BPlusLeafIO<?>> leafExtIOs, boolean mvcc)
      Registers extra inner IO versions.
      Parameters:
      leafExtIOs - Extra versions.
    • getInnerVersions

      public static IOVersions<? extends BPlusInnerIO<?>> getInnerVersions(int idx, boolean mvcc)
      Parameters:
      idx - Index.
      Returns:
      IOVersions for given idx.
    • getLeafVersions

      public static IOVersions<? extends BPlusLeafIO<?>> getLeafVersions(int idx, boolean mvcc)
      Parameters:
      idx - Index.
      Returns:
      IOVersions for given idx.
    • registerTest

      public static void registerTest(BPlusInnerIO<?> innerIO, BPlusLeafIO<?> leafIO)
      Registers IOs for testing.
      Parameters:
      innerIO - Inner IO.
      leafIO - Leaf IO.
    • registerTest

      public static void registerTest(PageIO io)
      Registers IO for testing.
      Parameters:
      io - Page IO.
    • getType

      public final int getType()
      Returns:
      Type.
    • getVersion

      public final int getVersion()
      Returns:
      Version.
    • initNewPage

      public void initNewPage(long pageAddr, long pageId, int pageSize)
      Parameters:
      pageAddr - Page address.
      pageId - Page ID.
      pageSize - Page size.
      See Also:
      • EncryptionSpi#encryptedSize(int)
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • getPageIO

      public static <Q extends PageIO> Q getPageIO(long pageAddr)
      Parameters:
      pageAddr - Page address.
      Returns:
      IO.
      Throws:
      IgniteCheckedException - If failed.
    • getPageIO

      public static <Q extends PageIO> Q getPageIO(ByteBuffer page) throws IgniteCheckedException
      Parameters:
      page - Page.
      Returns:
      Page IO.
      Throws:
      IgniteCheckedException - If failed.
    • getPageIO

      public static <Q extends PageIO> Q getPageIO(int type, int ver)
      Parameters:
      type - IO Type.
      ver - IO Version.
      Returns:
      Page IO.
      Throws:
      IgniteCheckedException - If failed.
    • getBPlusIO

      public static <Q extends BPlusIO<?>> Q getBPlusIO(long pageAddr) throws IgniteCheckedException
      Parameters:
      pageAddr - Page address.
      Returns:
      IO for either inner or leaf B+Tree page.
      Throws:
      IgniteCheckedException - If failed.
    • getBPlusIO

      public static <Q extends BPlusIO<?>> Q getBPlusIO(int type, int ver)
      Parameters:
      type - IO Type.
      ver - IO Version.
      Returns:
      IO for either inner or leaf B+Tree page.
      Throws:
      IgniteCheckedException - If failed.
    • isDataPageType

      public static boolean isDataPageType(int type)
      Parameters:
      type - Type to test.
      Returns:
      True if data page.
    • printPage

      protected abstract void printPage(long addr, int pageSize, GridStringBuilder sb) throws IgniteCheckedException
      Parameters:
      addr - Address.
      pageSize - Page size.
      sb - Sb.
      Throws:
      IgniteCheckedException
    • copyPage

      protected final void copyPage(ByteBuffer page, ByteBuffer out, int pageSize)
      Parameters:
      page - Page.
      out - Output buffer.
      pageSize - Page size.
    • printPage

      public static String printPage(long addr, int pageSize)
      Parameters:
      addr - Address.