Class PageIO
java.lang.Object
org.apache.ignite.internal.persistence.tree.io.PageIO
- Direct Known Subclasses:
AbstractDataPageIO,BPlusIO,BPlusMetaIO,PageMetaIO,PagesListMetaIO,PagesListNodeIO
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 Summary
FieldsModifier and TypeFieldDescriptionstatic final intstatic final intstatic final shortMaximum payload size.static final intstatic final intstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortIndex for payload == 1.static final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final shortstatic final intstatic final int -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected final voidcopyPage(ByteBuffer page, ByteBuffer out, int pageSize) static <Q extends BPlusIO<?>>
QgetBPlusIO(int type, int ver) static <Q extends BPlusIO<?>>
QgetBPlusIO(long pageAddr) static shortgetCompactedSize(long pageAddr) static shortgetCompactedSize(ByteBuffer page) static shortgetCompressedSize(long pageAddr) static shortgetCompressedSize(ByteBuffer page) static bytegetCompressionType(long pageAddr) static bytegetCompressionType(ByteBuffer page) static intgetCrc(long pageAddr) static intgetCrc(ByteBuffer buf) static IOVersions<? extends BPlusInnerIO<?>>getInnerVersions(int idx, boolean mvcc) static IOVersions<? extends BPlusLeafIO<?>>getLeafVersions(int idx, boolean mvcc) static longgetPageId(long pageAddr) static longgetPageId(ByteBuffer buf) static <Q extends PageIO>
QgetPageIO(int type, int ver) static <Q extends PageIO>
QgetPageIO(long pageAddr) static <Q extends PageIO>
QgetPageIO(ByteBuffer page) static intgetRotatedIdPart(long pageAddr) final intgetType()static intgetType(long pageAddr) static intgetType(ByteBuffer buf) final intstatic intgetVersion(long pageAddr) static intgetVersion(ByteBuffer buf) voidinitNewPage(long pageAddr, long pageId, int pageSize) static booleanisDataPageType(int type) static StringprintPage(long addr, int pageSize) protected abstract voidprintPage(long addr, int pageSize, GridStringBuilder sb) static voidregisterH2(IOVersions<? extends BPlusInnerIO<?>> innerIOs, IOVersions<? extends BPlusLeafIO<?>> leafIOs, IOVersions<? extends BPlusInnerIO<?>> mvccInnerIOs, IOVersions<? extends BPlusLeafIO<?>> mvccLeafIOs) Registers this B+Tree IO versions.static voidregisterH2ExtraInner(IOVersions<? extends BPlusInnerIO<?>> innerExtIOs, boolean mvcc) Registers extra inner IO versions.static voidregisterH2ExtraLeaf(IOVersions<? extends BPlusLeafIO<?>> leafExtIOs, boolean mvcc) Registers extra inner IO versions.static voidregisterTest(BPlusInnerIO<?> innerIO, BPlusLeafIO<?> leafIO) Registers IOs for testing.static voidregisterTest(PageIO io) Registers IO for testing.static voidsetCompactedSize(ByteBuffer page, short compactedSize) static voidsetCompressedSize(ByteBuffer page, short compressedSize) static voidsetCompressionType(ByteBuffer page, byte compressType) static voidsetCrc(long pageAddr, int crc) static voidsetCrc(ByteBuffer buf, int crc) static voidsetPageId(long pageAddr, long pageId) static voidsetRotatedIdPart(long pageAddr, int rotatedIdPart) static voidsetType(long pageAddr, int type) protected static voidsetVersion(long pageAddr, int ver) toString()
-
Field Details
-
MAX_PAYLOAD_SIZE
public static final short MAX_PAYLOAD_SIZEMaximum payload size.- See Also:
-
TYPE_OFF
public static final int TYPE_OFF- See Also:
-
VER_OFF
public static final int VER_OFF- See Also:
-
CRC_OFF
public static final int CRC_OFF- See Also:
-
PAGE_ID_OFF
public static final int PAGE_ID_OFF- See Also:
-
ROTATED_ID_PART_OFF
public static final int ROTATED_ID_PART_OFF- See Also:
-
COMMON_HEADER_END
public static final int COMMON_HEADER_END- See Also:
-
T_DATA
public static final short T_DATA- See Also:
-
T_BPLUS_META
public static final short T_BPLUS_META- See Also:
-
T_H2_REF_LEAF
public static final short T_H2_REF_LEAF- See Also:
-
T_H2_REF_INNER
public static final short T_H2_REF_INNER- See Also:
-
T_DATA_REF_INNER
public static final short T_DATA_REF_INNER- See Also:
-
T_DATA_REF_LEAF
public static final short T_DATA_REF_LEAF- See Also:
-
T_METASTORE_INNER
public static final short T_METASTORE_INNER- See Also:
-
T_METASTORE_LEAF
public static final short T_METASTORE_LEAF- See Also:
-
T_PENDING_REF_INNER
public static final short T_PENDING_REF_INNER- See Also:
-
T_PENDING_REF_LEAF
public static final short T_PENDING_REF_LEAF- See Also:
-
T_META
public static final short T_META- See Also:
-
T_PAGE_LIST_META
public static final short T_PAGE_LIST_META- See Also:
-
T_PAGE_LIST_NODE
public static final short T_PAGE_LIST_NODE- See Also:
-
T_PART_META
public static final short T_PART_META- See Also:
-
T_PAGE_UPDATE_TRACKING
public static final short T_PAGE_UPDATE_TRACKING- See Also:
-
T_CACHE_ID_AWARE_DATA_REF_INNER
public static final short T_CACHE_ID_AWARE_DATA_REF_INNER- See Also:
-
T_CACHE_ID_AWARE_DATA_REF_LEAF
public static final short T_CACHE_ID_AWARE_DATA_REF_LEAF- See Also:
-
T_CACHE_ID_AWARE_PENDING_REF_INNER
public static final short T_CACHE_ID_AWARE_PENDING_REF_INNER- See Also:
-
T_CACHE_ID_AWARE_PENDING_REF_LEAF
public static final short T_CACHE_ID_AWARE_PENDING_REF_LEAF- See Also:
-
T_PART_CNTRS
public static final short T_PART_CNTRS- See Also:
-
T_DATA_METASTORAGE
public static final short T_DATA_METASTORAGE- See Also:
-
T_DATA_REF_METASTORAGE_INNER
public static final short T_DATA_REF_METASTORAGE_INNER- See Also:
-
T_DATA_REF_METASTORAGE_LEAF
public static final short T_DATA_REF_METASTORAGE_LEAF- See Also:
-
T_DATA_REF_MVCC_INNER
public static final short T_DATA_REF_MVCC_INNER- See Also:
-
T_DATA_REF_MVCC_LEAF
public static final short T_DATA_REF_MVCC_LEAF- See Also:
-
T_CACHE_ID_DATA_REF_MVCC_INNER
public static final short T_CACHE_ID_DATA_REF_MVCC_INNER- See Also:
-
T_CACHE_ID_DATA_REF_MVCC_LEAF
public static final short T_CACHE_ID_DATA_REF_MVCC_LEAF- See Also:
-
T_H2_MVCC_REF_LEAF
public static final short T_H2_MVCC_REF_LEAF- See Also:
-
T_H2_MVCC_REF_INNER
public static final short T_H2_MVCC_REF_INNER- See Also:
-
T_TX_LOG_LEAF
public static final short T_TX_LOG_LEAF- See Also:
-
T_TX_LOG_INNER
public static final short T_TX_LOG_INNER- See Also:
-
T_DATA_PART
public static final short T_DATA_PART- See Also:
-
T_MARKER_PAGE
public static final short T_MARKER_PAGE- See Also:
-
T_BM_OBJECT_DATA
public static final short T_BM_OBJECT_DATA- See Also:
-
T_BM_OBJECT_DATA_REF_INNER
public static final short T_BM_OBJECT_DATA_REF_INNER- See Also:
-
T_BM_OBJECT_DATA_REF_LEAF
public static final short T_BM_OBJECT_DATA_REF_LEAF- See Also:
-
T_BM_LONG_DATA
public static final short T_BM_LONG_DATA- See Also:
-
T_BM_LONG_DATA_REF_INNER
public static final short T_BM_LONG_DATA_REF_INNER- See Also:
-
T_BM_LONG_DATA_REF_LEAF
public static final short T_BM_LONG_DATA_REF_LEAF- See Also:
-
T_BM_INT_INT_INDEX_INNER
public static final short T_BM_INT_INT_INDEX_INNER- See Also:
-
T_BM_INT_INT_INDEX_LEAF
public static final short T_BM_INT_INT_INDEX_LEAF- See Also:
-
T_BM_CONTAINED_OBJECT_INDEX_INNER
public static final short T_BM_CONTAINED_OBJECT_INDEX_INNER- See Also:
-
T_BM_CONTAINED_OBJECT_INDEX_LEAF
public static final short T_BM_CONTAINED_OBJECT_INDEX_LEAF- See Also:
-
T_BM_BINARY_LONG_INDEX_INNER
public static final short T_BM_BINARY_LONG_INDEX_INNER- See Also:
-
T_BM_BINARY_LONG_INDEX_LEAF
public static final short T_BM_BINARY_LONG_INDEX_LEAF- See Also:
-
T_BM_BINARY_DATA
public static final short T_BM_BINARY_DATA- See Also:
-
T_H2_EX_REF_LEAF_START
public static final short T_H2_EX_REF_LEAF_STARTIndex for payload == 1.- See Also:
-
T_H2_EX_REF_LEAF_END
public static final short T_H2_EX_REF_LEAF_END- See Also:
-
T_H2_EX_REF_INNER_START
public static final short T_H2_EX_REF_INNER_START- See Also:
-
T_H2_EX_REF_INNER_END
public static final short T_H2_EX_REF_INNER_END- See Also:
-
T_H2_EX_REF_MVCC_LEAF_START
public static final short T_H2_EX_REF_MVCC_LEAF_START- See Also:
-
T_H2_EX_REF_MVCC_LEAF_END
public static final short T_H2_EX_REF_MVCC_LEAF_END- See Also:
-
T_H2_EX_REF_MVCC_INNER_START
public static final short T_H2_EX_REF_MVCC_INNER_START- See Also:
-
T_H2_EX_REF_MVCC_INNER_END
public static final short T_H2_EX_REF_MVCC_INNER_END- See Also:
-
-
Constructor Details
-
PageIO
protected PageIO(int type, int ver) - Parameters:
type- Page type.ver- Page format version.
-
-
Method Details
-
getType
- 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
- 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
- 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
- Parameters:
page- Page buffer.compressType- Compression type.
-
getCompressionType
- Parameters:
page- Page buffer.- Returns:
- Compression type.
-
getCompressionType
public static byte getCompressionType(long pageAddr) - Parameters:
pageAddr- Page address.- Returns:
- Compression type.
-
setCompressedSize
- Parameters:
page- Page buffer.compressedSize- Compressed size.
-
getCompressedSize
- Parameters:
page- Page buffer.- Returns:
- Compressed size.
-
getCompressedSize
public static short getCompressedSize(long pageAddr) - Parameters:
pageAddr- Page address.- Returns:
- Compressed size.
-
setCompactedSize
- Parameters:
page- Page buffer.compactedSize- Compacted size.
-
getCompactedSize
- 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
- Parameters:
buf- Buffer.- Returns:
- Checksum.
-
setCrc
- 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
- Parameters:
idx- Index.- Returns:
- IOVersions for given idx.
-
getLeafVersions
- Parameters:
idx- Index.- Returns:
- IOVersions for given idx.
-
registerTest
Registers IOs for testing.- Parameters:
innerIO- Inner IO.leafIO- Leaf IO.
-
registerTest
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
-
getPageIO
- Parameters:
pageAddr- Page address.- Returns:
- IO.
- Throws:
IgniteCheckedException- If failed.
-
getPageIO
- Parameters:
page- Page.- Returns:
- Page IO.
- Throws:
IgniteCheckedException- If failed.
-
getPageIO
- Parameters:
type- IO Type.ver- IO Version.- Returns:
- Page IO.
- Throws:
IgniteCheckedException- If failed.
-
getBPlusIO
- Parameters:
pageAddr- Page address.- Returns:
- IO for either inner or leaf B+Tree page.
- Throws:
IgniteCheckedException- If failed.
-
getBPlusIO
- 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:
Trueif 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
- Parameters:
page- Page.out- Output buffer.pageSize- Page size.
-
printPage
- Parameters:
addr- Address.
-