public class PageMemoryImpl extends Object implements PageMemoryEx
+--------+------------------------------------------------------+ |8 bytes | PAGE_SIZE + PAGE_OVERHEAD - 8 bytes | +--------+------------------------------------------------------+ |Next ptr| Page data | +--------+------------------------------------------------------+When page is allocated and is in use:
+------------------+--------+--------+----+----+--------+--------+----------------------+ | 8 bytes |8 bytes |8 bytes |4 b |4 b |8 bytes |8 bytes | PAGE_SIZE | +------------------+--------+--------+----+----+--------+--------+----------------------+ | Marker/Timestamp |Rel ptr |Page ID |C ID|PIN | LOCK |TMP BUF | Page data | +------------------+--------+--------+----+----+--------+--------+----------------------+Note that first 8 bytes of page header are used either for page marker or for next relative pointer depending on whether the page is in use or not.
| Modifier and Type | Class and Description |
|---|---|
static class |
PageMemoryImpl.ThrottlingPolicy
Throttling enabled and its type enum.
|
| Modifier and Type | Field and Description |
|---|---|
static String |
CHECKPOINT_POOL_OVERFLOW_ERROR_MSG
Checkpoint pool overflow error message.
|
static int |
PAGE_CACHE_ID_OFFSET
Page cache group ID offset.
|
static int |
PAGE_ID_OFFSET
Page ID offset
|
static int |
PAGE_LOCK_OFFSET
Page lock offset.
|
static long |
PAGE_MARKER |
static int |
PAGE_OVERHEAD
8b Marker/timestamp
8b Relative pointer
8b Page ID
4b Cache group ID
4b Pin count
8b Lock
8b Temporary buffer
|
static int |
PAGE_PIN_CNT_OFFSET
Page pin counter offset.
|
static int |
PAGE_TMP_BUF_OFFSET
Page temp copy buffer relative pointer offset.
|
static int |
RANDOM_PAGES_EVICT_NUM
Number of random pages that will be picked for eviction.
|
static int |
RELATIVE_PTR_OFFSET
Page relative pointer.
|
static int |
TRY_AGAIN_TAG
Try again tag.
|
FLAG_DATA, FLAG_IDX, INDEX_PARTITION, MAX_PARTITION_ID| Constructor and Description |
|---|
PageMemoryImpl(DirectMemoryProvider directMemoryProvider,
long[] sizes,
GridCacheSharedContext<?,?> ctx,
int pageSize,
ReplacedPageWriter flushDirtyPage,
GridInClosure3X<Long,FullPageId,PageMemoryEx> changeTracker,
CheckpointLockStateChecker stateChecker,
DataRegionMetricsImpl memMetrics,
PageMemoryImpl.ThrottlingPolicy throttlingPlc,
CheckpointWriteProgressSupplier cpProgressProvider) |
| Modifier and Type | Method and Description |
|---|---|
long |
acquiredPages() |
long |
acquirePage(int grpId,
long pageId)
Gets the page absolute pointer associated with the given page ID.
|
long |
acquirePage(int grpId,
long pageId,
boolean restore) |
int |
activePagesCount()
Gets the number of active pages across all segments.
|
long |
allocatePage(int grpId,
int partId,
byte flags)
Allocates a page from the space for the given partition ID and the given flags.
|
GridMultiCollectionWrapper<FullPageId> |
beginCheckpoint()
Gets a collection of dirty page IDs since the last checkpoint.
|
int |
checkpointBufferPagesCount()
Number of pages used in checkpoint buffer.
|
int |
checkpointBufferPagesSize()
Number of used pages in checkpoint buffer.
|
IgniteInternalFuture<Void> |
clearAsync(LoadedPagesMap.KeyPredicate pred,
boolean cleanDirty)
Asynchronously clears pages satisfying the given predicate.
|
void |
finishCheckpoint()
Finishes checkpoint operation.
|
boolean |
freePage(int grpId,
long pageId)
The given page is free now.
|
Integer |
getForCheckpoint(FullPageId fullId,
ByteBuffer outBuf,
CheckpointMetricsTracker tracker)
Gets page byte buffer for the checkpoint procedure.
|
boolean |
hasTempCopy(long absPtr)
Checks if a page has temp copy buffer.
|
int |
invalidate(int grpId,
int partId)
Marks partition as invalid / outdated.
|
boolean |
isDirty(int grpId,
long pageId,
long page) |
long |
loadedPages() |
long |
metaPageId(int grpId)
Gets or allocates metadata page for specified grpId.
|
void |
onCacheGroupDestroyed(int grpId)
Clears internal metadata of destroyed cache group.
|
ByteBuffer |
pageBuffer(long pageAddr) |
int |
pageSize() |
long |
partitionMetaPageId(int grpId,
int partId)
Gets or allocates partition metadata page for specified grpId and partId.
|
long |
readLock(int grpId,
long pageId,
long page) |
long |
readLockForce(int grpId,
long pageId,
long page)
Obtains read lock without checking page tag.
|
void |
readUnlock(int grpId,
long pageId,
long page)
Releases locked page.
|
int |
realPageSize(int grpId) |
void |
releasePage(int grpId,
long pageId,
long page) |
boolean |
safeToUpdate()
Heuristic method which allows a thread to check if it safe to start memory struture modifications
in regard with checkpointing.
|
static int |
segmentIndex(int grpId,
long pageId,
int segments) |
void |
start()
Start page memory.
|
void |
stop(boolean deallocate)
Stop page memory.
|
int |
systemPageSize() |
long |
totalPages() |
long |
tryWriteLock(int grpId,
long pageId,
long page) |
long |
writeLock(int grpId,
long pageId,
long page) |
long |
writeLock(int grpId,
long pageId,
long page,
boolean restore) |
void |
writeUnlock(int grpId,
long pageId,
long page,
Boolean walPlc,
boolean dirtyFlag)
Releases locked page.
|
void |
writeUnlock(int grpId,
long pageId,
long page,
Boolean walPlc,
boolean dirtyFlag,
boolean restore) |
public static final long PAGE_MARKER
public static final int RELATIVE_PTR_OFFSET
public static final int PAGE_ID_OFFSET
public static final int PAGE_CACHE_ID_OFFSET
public static final int PAGE_PIN_CNT_OFFSET
public static final int PAGE_LOCK_OFFSET
public static final int PAGE_TMP_BUF_OFFSET
public static final int PAGE_OVERHEAD
public static final int RANDOM_PAGES_EVICT_NUM
public static final int TRY_AGAIN_TAG
public static final String CHECKPOINT_POOL_OVERFLOW_ERROR_MSG
public PageMemoryImpl(DirectMemoryProvider directMemoryProvider, long[] sizes, GridCacheSharedContext<?,?> ctx, int pageSize, ReplacedPageWriter flushDirtyPage, @Nullable GridInClosure3X<Long,FullPageId,PageMemoryEx> changeTracker, CheckpointLockStateChecker stateChecker, DataRegionMetricsImpl memMetrics, @Nullable PageMemoryImpl.ThrottlingPolicy throttlingPlc, @NotNull CheckpointWriteProgressSupplier cpProgressProvider)
directMemoryProvider - Memory allocator to use.sizes - segments sizes, last is checkpoint pool size.ctx - Cache shared context.pageSize - Page size.flushDirtyPage - write callback invoked when a dirty page is removed for replacement.changeTracker - Callback invoked to track changes in pages.stateChecker - Checkpoint lock state provider. Used to ensure lock is held by thread, which modify pages.memMetrics - Memory metrics to track dirty pages count and page replace rate.throttlingPlc - Write throttle enabled and its type. Null equal to none.cpProgressProvider - checkpoint progress, base for throttling. Null disables throttling.public void start()
throws IgniteException
start in interface PageMemoryIgniteExceptionpublic void stop(boolean deallocate)
throws IgniteException
stop in interface PageMemorydeallocate - True to deallocate memory, false to allow memory reuse on subsequent PageMemory.start()IgniteExceptionpublic void releasePage(int grpId,
long pageId,
long page)
releasePage in interface PageSupportgrpId - Cache group ID.pageId - Page ID to release.page - Page pointer.public long readLock(int grpId,
long pageId,
long page)
readLock in interface PageSupportgrpId - Cache group ID.pageId - Page ID.page - Page pointer.public void readUnlock(int grpId,
long pageId,
long page)
readUnlock in interface PageSupportgrpId - Cache group ID.pageId - Page ID.page - Page pointer.public long writeLock(int grpId,
long pageId,
long page)
writeLock in interface PageSupportgrpId - Cache group ID.pageId - Page ID.page - Page pointer.0L if attempt to take the write lock failed.public long writeLock(int grpId,
long pageId,
long page,
boolean restore)
writeLock in interface PageMemoryExgrpId - Group ID.pageId - Page ID.page - Page pointer.restore - Determines if the page is locked for restore.public long tryWriteLock(int grpId,
long pageId,
long page)
tryWriteLock in interface PageSupportgrpId - Cache group ID.pageId - Page ID.page - Page pointer.0L if attempt to take the write lock failed.public void writeUnlock(int grpId,
long pageId,
long page,
Boolean walPlc,
boolean dirtyFlag)
writeUnlock in interface PageSupportgrpId - Cache group ID.pageId - Page ID.page - Page pointer.walPlc - True if page should be recorded to WAL, false if the page must not
be recorded and null for the default behavior.dirtyFlag - Determines whether the page was modified since the last checkpoint.public void writeUnlock(int grpId,
long pageId,
long page,
Boolean walPlc,
boolean dirtyFlag,
boolean restore)
writeUnlock in interface PageMemoryExgrpId - Group ID.pageId - Page ID.page - Page pointer.walPlc - True if page should be recorded to WAL, false if the page must not
be recorded and null for the default behavior.dirtyFlag - Determines whether the page was modified since the last checkpoint.restore - Determines if the page is locked for restore.public boolean isDirty(int grpId,
long pageId,
long page)
isDirty in interface PageSupportgrpId - Cache group ID.pageId - Page ID.page - Page pointer.True if the page is dirty.public long allocatePage(int grpId,
int partId,
byte flags)
throws IgniteCheckedException
allocatePage in interface PageIdAllocatorgrpId - Cache Group ID.partId - Partition ID.IgniteCheckedExceptionpublic ByteBuffer pageBuffer(long pageAddr)
pageBuffer in interface PageMemorypageAddr - Page address.public boolean freePage(int grpId,
long pageId)
throws IgniteCheckedException
freePage in interface PageIdAllocatorgrpId - Cache Group ID.pageId - Page ID.IgniteCheckedExceptionpublic long metaPageId(int grpId)
throws IgniteCheckedException
metaPageId in interface PageMemoryExgrpId - Group ID.IgniteCheckedException - If failed.public long partitionMetaPageId(int grpId,
int partId)
throws IgniteCheckedException
partitionMetaPageId in interface PageMemoryExgrpId - Group ID.partId - Partition ID.IgniteCheckedException - If failed.public long acquirePage(int grpId,
long pageId)
throws IgniteCheckedException
PageSupport.releasePage(int, long, long). This method will allocate page with given ID if it doesn't
exist.acquirePage in interface PageSupportgrpId - Cache group ID.pageId - Page ID.IgniteCheckedException - If failed.public long acquirePage(int grpId,
long pageId,
boolean restore)
throws IgniteCheckedException
acquirePage in interface PageMemoryExgrpId - Cache group ID.pageId - Page id.restore - Get page for restoreIgniteCheckedException - If failed.StorageException - If page reading failed from storage.Will not read page from file if it is not present in memorypublic int pageSize()
pageSize in interface PageMemorypublic int systemPageSize()
systemPageSize in interface PageMemorypublic int realPageSize(int grpId)
realPageSize in interface PageMemorygrpId - Group id.public boolean safeToUpdate()
safeToUpdate in interface PageMemoryExFalse if there are too many dirty pages and a thread should wait for a
checkpoint to begin.public long totalPages()
public GridMultiCollectionWrapper<FullPageId> beginCheckpoint() throws IgniteException
beginCheckpoint in interface PageMemoryExIgniteException - If checkpoint has been already started and was not finished.public void finishCheckpoint()
finishCheckpoint in interface PageMemoryExpublic Integer getForCheckpoint(FullPageId fullId, ByteBuffer outBuf, CheckpointMetricsTracker tracker)
getForCheckpoint in interface PageMemoryExfullId - Page ID to get byte buffer for. The page ID must be present in the collection returned by
the PageMemoryEx.beginCheckpoint() method call.outBuf - Temporary buffer to write changes into.tracker - Checkpoint metrics tracker.Partition generation if data was read, null otherwise (data already saved to storage).public int invalidate(int grpId,
int partId)
invalidate in interface PageMemoryExgrpId - Group ID.partId - Partition ID.public void onCacheGroupDestroyed(int grpId)
onCacheGroupDestroyed in interface PageMemoryExgrpId - Cache group ID.public IgniteInternalFuture<Void> clearAsync(LoadedPagesMap.KeyPredicate pred, boolean cleanDirty)
clearAsync in interface PageMemoryExpred - Predicate for cache group id, pageId.cleanDirty - Flag indicating that dirty pages collection should be cleaned.public long loadedPages()
loadedPages in interface PageMemorypublic long acquiredPages()
public long readLockForce(int grpId,
long pageId,
long page)
readLockForce in interface PageSupportgrpId - Cache group ID.pageId - Page ID.page - Page pointer.public boolean hasTempCopy(long absPtr)
absPtr - Absolute pointer.True if a page has temp buffer.public int activePagesCount()
public int checkpointBufferPagesCount()
checkpointBufferPagesCount in interface PageMemorypublic int checkpointBufferPagesSize()
public static int segmentIndex(int grpId,
long pageId,
int segments)
pageId - Page ID.
Follow @ApacheIgnite
Ignite Database and Caching Platform : ver. 2.7.5 Release Date : June 4 2019