Class AbstractDataPageIO<T extends org.apache.ignite.internal.Storable>

java.lang.Object
org.apache.ignite.internal.persistence.tree.io.PageIO
org.apache.ignite.internal.persistence.tree.io.AbstractDataPageIO<T>
All Implemented Interfaces:
CompactablePageIO
Direct Known Subclasses:
BinaryDataIO, LongDataPageIO, ObjectDataPageIO, SimpleDataPageIO

public abstract class AbstractDataPageIO<T extends org.apache.ignite.internal.Storable> extends PageIO implements CompactablePageIO
Data pages IO.
  • Field Details

  • Constructor Details

    • AbstractDataPageIO

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

    • initNewPage

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

      public void setFreeListPageId(long pageAddr, long freeListPageId)
      Parameters:
      pageAddr - Page address.
      freeListPageId - Free list page ID.
    • getFreeListPageId

      public long getFreeListPageId(long pageAddr)
      Parameters:
      pageAddr - Page address.
      Returns:
      Free list page ID.
    • getFreeSpace

      public int getFreeSpace(long pageAddr)
      Free space refers to a "max row size (without any data page specific overhead) which is guaranteed to fit into this data page".
      Parameters:
      pageAddr - Page address.
      Returns:
      Free space.
    • isEmpty

      public boolean isEmpty(long pageAddr)
      Parameters:
      pageAddr - Page address.
      Returns:
      true If there is no useful data in this page.
    • getRealFreeSpace

      public int getRealFreeSpace(long pageAddr)
      Equivalent for actualFreeSpace(long, int) but reads saved value.
      Parameters:
      pageAddr - Page address.
      Returns:
      Free space.
    • getRowsCount

      public int getRowsCount(long pageAddr)
      Parameters:
      pageAddr - Page address.
      Returns:
      Rows number in the given data page.
    • forAllItems

      public <T> List<T> forAllItems(long pageAddr, AbstractDataPageIO.CC<T> c) throws IgniteCheckedException
      Type Parameters:
      T - Closure return type.
      Parameters:
      pageAddr - Page address.
      c - Closure.
      Returns:
      Collection of closure results for all items in page.
      Throws:
      IgniteCheckedException - In case of error in closure body.
    • checkIndex

      protected boolean checkIndex(int idx)
      Parameters:
      idx - Index.
      Returns:
      true If the index is valid.
    • printPageLayout

      protected void printPageLayout(long pageAddr, int pageSize, GridStringBuilder b)
      Parameters:
      pageAddr - Page address.
      pageSize - Page size.
      b - B.
    • getDataOffset

      protected int getDataOffset(long pageAddr, int itemId, int pageSize)
      Parameters:
      pageAddr - Page address.
      itemId - Fixed item ID (the index used for referencing an entry from the outside).
      pageSize - Page size.
      Returns:
      Data entry offset in bytes.
    • isFragmented

      protected boolean isFragmented(long pageAddr, int dataOff)
      Parameters:
      pageAddr - Page address.
      dataOff - Data offset.
      Returns:
      true If the data row is fragmented across multiple pages.
    • readPayload

      public DataPagePayload readPayload(long pageAddr, int itemId, int pageSize)
      Sets position to start of actual fragment data and limit to it's end.
      Parameters:
      pageAddr - Page address.
      itemId - Item to position on.
      pageSize - Page size.
      Returns:
      DataPagePayload object.
    • getPayloadOffset

      public int getPayloadOffset(long pageAddr, int itemId, int pageSize, int reqLen)
      Parameters:
      pageAddr - Page address.
      itemId - Item to position on.
      pageSize - Page size.
      reqLen - Required payload length.
      Returns:
      Offset to start of actual fragment data.
    • updateRow

      public boolean updateRow(long pageAddr, int itemId, int pageSize, byte[] payload, T row, int rowSize) throws IgniteCheckedException
      Parameters:
      pageAddr - Page address.
      itemId - Item ID.
      pageSize - Page size.
      payload - Row data.
      row - Row.
      rowSize - Row size.
      Returns:
      True if entry is not fragmented.
      Throws:
      IgniteCheckedException - If failed.
    • removeRow

      public long removeRow(long pageAddr, int itemId, int pageSize) throws IgniteCheckedException
      Parameters:
      pageAddr - Page address.
      itemId - Fixed item ID (the index used for referencing an entry from the outside).
      pageSize - Page size.
      Returns:
      Next link for fragmented entries or 0 if none.
      Throws:
      IgniteCheckedException - If failed.
    • addRow

      public void addRow(long pageId, long pageAddr, T row, int rowSize, int pageSize) throws IgniteCheckedException
      Adds row to this data page and sets respective link to the given row object.
      Parameters:
      pageAddr - Page address.
      row - Data row.
      rowSize - Row size.
      pageSize - Page size.
      Throws:
      IgniteCheckedException - If failed.
    • addRow

      public int addRow(long pageAddr, byte[] payload, int pageSize) throws IgniteCheckedException
      Adds row to this data page and sets respective link to the given row object.
      Parameters:
      pageAddr - Page address.
      payload - Payload.
      pageSize - Page size.
      Returns:
      Item ID.
      Throws:
      IgniteCheckedException - If failed.
    • addRowFragment

      public int addRowFragment(PageMemory pageMem, long pageId, long pageAddr, T row, int written, int rowSize, int pageSize) throws IgniteCheckedException
      Adds maximum possible fragment of the given row to this data page and sets respective link to the row.
      Parameters:
      pageMem - Page memory.
      pageId - Page ID to use to construct a link.
      pageAddr - Page address.
      row - Data row.
      written - Number of bytes of row size that was already written.
      rowSize - Row size.
      pageSize - Page size.
      Returns:
      Written payload size.
      Throws:
      IgniteCheckedException - If failed.
    • addRowFragment

      public void addRowFragment(long pageId, long pageAddr, byte[] payload, long lastLink, int pageSize) throws IgniteCheckedException
      Adds this payload as a fragment to this data page.
      Parameters:
      pageId - Page ID to use to construct a link.
      pageAddr - Page address.
      payload - Payload bytes.
      lastLink - Link to the previous written fragment (link to the tail).
      pageSize - Page size.
      Throws:
      IgniteCheckedException - If failed.
    • writeFragmentData

      protected abstract void writeFragmentData(T row, ByteBuffer buf, int rowOff, int payloadSize) throws IgniteCheckedException
      Write row data fragment.
      Parameters:
      row - Row.
      buf - Byte buffer.
      rowOff - Offset in row data bytes.
      payloadSize - Data length that should be written in a fragment.
      Throws:
      IgniteCheckedException - If failed.
    • compactPage

      public void compactPage(ByteBuffer page, ByteBuffer out, int pageSize)
      Compacts page contents to the output buffer. Implementation must not change contents, position and limit of the original page buffer.
      Specified by:
      compactPage in interface CompactablePageIO
      Parameters:
      page - Page buffer.
      out - Output buffer.
      pageSize - Page size.
    • restorePage

      public void restorePage(ByteBuffer page, int pageSize)
      Restores the original page in place.
      Specified by:
      restorePage in interface CompactablePageIO
      Parameters:
      page - Compact page.
      pageSize - Page size.
    • writeRowData

      protected abstract void writeRowData(long pageAddr, int dataOff, int payloadSize, T row, boolean newRow) throws IgniteCheckedException
      Parameters:
      pageAddr - Page address.
      dataOff - Data offset.
      payloadSize - Payload size.
      row - Data row.
      newRow - False if existing cache entry is updated, in this case skip key data write.
      Throws:
      IgniteCheckedException - If failed.
    • writeRowData

      protected void writeRowData(long pageAddr, int dataOff, byte[] payload)
      Parameters:
      pageAddr - Page address.
      dataOff - Data offset.
      payload - Payload