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.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interfaceDefines closure interface for applying computations to data page items. -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final intstatic final intFields inherited from class org.apache.ignite.internal.persistence.tree.io.PageIO
COMMON_HEADER_END, CRC_OFF, MAX_PAYLOAD_SIZE, PAGE_ID_OFF, ROTATED_ID_PART_OFF, T_BM_BINARY_DATA, T_BM_BINARY_LONG_INDEX_INNER, T_BM_BINARY_LONG_INDEX_LEAF, T_BM_CONTAINED_OBJECT_INDEX_INNER, T_BM_CONTAINED_OBJECT_INDEX_LEAF, T_BM_INT_INT_INDEX_INNER, T_BM_INT_INT_INDEX_LEAF, T_BM_LONG_DATA, T_BM_LONG_DATA_REF_INNER, T_BM_LONG_DATA_REF_LEAF, T_BM_OBJECT_DATA, T_BM_OBJECT_DATA_REF_INNER, T_BM_OBJECT_DATA_REF_LEAF, T_BPLUS_META, T_CACHE_ID_AWARE_DATA_REF_INNER, T_CACHE_ID_AWARE_DATA_REF_LEAF, T_CACHE_ID_AWARE_PENDING_REF_INNER, T_CACHE_ID_AWARE_PENDING_REF_LEAF, T_CACHE_ID_DATA_REF_MVCC_INNER, T_CACHE_ID_DATA_REF_MVCC_LEAF, T_DATA, T_DATA_METASTORAGE, T_DATA_PART, T_DATA_REF_INNER, T_DATA_REF_LEAF, T_DATA_REF_METASTORAGE_INNER, T_DATA_REF_METASTORAGE_LEAF, T_DATA_REF_MVCC_INNER, T_DATA_REF_MVCC_LEAF, T_H2_EX_REF_INNER_END, T_H2_EX_REF_INNER_START, T_H2_EX_REF_LEAF_END, T_H2_EX_REF_LEAF_START, T_H2_EX_REF_MVCC_INNER_END, T_H2_EX_REF_MVCC_INNER_START, T_H2_EX_REF_MVCC_LEAF_END, T_H2_EX_REF_MVCC_LEAF_START, T_H2_MVCC_REF_INNER, T_H2_MVCC_REF_LEAF, T_H2_REF_INNER, T_H2_REF_LEAF, T_MARKER_PAGE, T_META, T_METASTORE_INNER, T_METASTORE_LEAF, T_PAGE_LIST_META, T_PAGE_LIST_NODE, T_PAGE_UPDATE_TRACKING, T_PART_CNTRS, T_PART_META, T_PENDING_REF_INNER, T_PENDING_REF_LEAF, T_TX_LOG_INNER, T_TX_LOG_LEAF, TYPE_OFF, VER_OFF -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionintaddRow(long pageAddr, byte[] payload, int pageSize) Adds row to this data page and sets respective link to the given row object.voidAdds row to this data page and sets respective link to the given row object.voidaddRowFragment(long pageId, long pageAddr, byte[] payload, long lastLink, int pageSize) Adds this payload as a fragment to this data page.intaddRowFragment(PageMemory pageMem, long pageId, long pageAddr, T row, int written, int rowSize, int pageSize) Adds maximum possible fragment of the given row to this data page and sets respective link to the row.protected booleancheckIndex(int idx) voidcompactPage(ByteBuffer page, ByteBuffer out, int pageSize) Compacts page contents to the output buffer.<T> List<T>forAllItems(long pageAddr, AbstractDataPageIO.CC<T> c) protected intgetDataOffset(long pageAddr, int itemId, int pageSize) longgetFreeListPageId(long pageAddr) intgetFreeSpace(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".intgetPayloadOffset(long pageAddr, int itemId, int pageSize, int reqLen) intgetRealFreeSpace(long pageAddr) Equivalent foractualFreeSpace(long, int)but reads saved value.intgetRowsCount(long pageAddr) voidinitNewPage(long pageAddr, long pageId, int pageSize) booleanisEmpty(long pageAddr) protected booleanisFragmented(long pageAddr, int dataOff) protected voidprintPageLayout(long pageAddr, int pageSize, GridStringBuilder b) readPayload(long pageAddr, int itemId, int pageSize) Sets position to start of actual fragment data and limit to it's end.longremoveRow(long pageAddr, int itemId, int pageSize) voidrestorePage(ByteBuffer page, int pageSize) Restores the original page in place.voidsetFreeListPageId(long pageAddr, long freeListPageId) booleanprotected abstract voidwriteFragmentData(T row, ByteBuffer buf, int rowOff, int payloadSize) Write row data fragment.protected voidwriteRowData(long pageAddr, int dataOff, byte[] payload) protected abstract voidwriteRowData(long pageAddr, int dataOff, int payloadSize, T row, boolean newRow) Methods inherited from class org.apache.ignite.internal.persistence.tree.io.PageIO
copyPage, getBPlusIO, getBPlusIO, getCompactedSize, getCompactedSize, getCompressedSize, getCompressedSize, getCompressionType, getCompressionType, getCrc, getCrc, getInnerVersions, getLeafVersions, getPageId, getPageId, getPageIO, getPageIO, getPageIO, getRotatedIdPart, getType, getType, getType, getVersion, getVersion, getVersion, isDataPageType, printPage, printPage, registerH2, registerH2ExtraInner, registerH2ExtraLeaf, registerTest, registerTest, setCompactedSize, setCompressedSize, setCompressionType, setCrc, setCrc, setPageId, setRotatedIdPart, setType, setVersion, toString
-
Field Details
-
ITEMS_OFF
public static final int ITEMS_OFF- See Also:
-
MIN_DATA_PAGE_OVERHEAD
public static final int MIN_DATA_PAGE_OVERHEAD- See Also:
-
-
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:
initNewPagein classPageIO- 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:
trueIf there is no useful data in this page.
-
getRealFreeSpace
public int getRealFreeSpace(long pageAddr) Equivalent foractualFreeSpace(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:
trueIf the index is valid.
-
printPageLayout
- 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:
trueIf the data row is fragmented across multiple pages.
-
readPayload
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:
DataPagePayloadobject.
-
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:
Trueif entry is not fragmented.- Throws:
IgniteCheckedException- If failed.
-
removeRow
- 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
0if 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
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
Compacts page contents to the output buffer. Implementation must not change contents, position and limit of the original page buffer.- Specified by:
compactPagein interfaceCompactablePageIO- Parameters:
page- Page buffer.out- Output buffer.pageSize- Page size.
-
restorePage
Restores the original page in place.- Specified by:
restorePagein interfaceCompactablePageIO- 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-Falseif 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
-