Vladimir Steshin created IGNITE-19980:
-----------------------------------------
Summary: NPE with OOM exception when defragmentation.
Key: IGNITE-19980
URL: https://issues.apache.org/jira/browse/IGNITE-19980
Project: Ignite
Issue Type: Bug
Reporter: Vladimir Steshin
During defragmentation, we can run out of defragmentation region memory. Then,
a OOM exception arises by
{code:java}
IgniteOutOfMemoryException PageMemoryImpl#oomException(String reason) {
DataRegionConfiguration dataRegionCfg =
getDataRegionConfiguration();
return new IgniteOutOfMemoryException("Failed to find a page for
eviction (" + reason + ") [" +
"segmentCapacity=" + loadedPages.capacity() +
", loaded=" + loadedPages.size() +
", maxDirtyPages=" + maxDirtyPages +
", dirtyPages=" + dirtyPagesCntr +
", cpPages=" + (checkpointPages() == null ? 0 :
checkpointPages().size()) +
", pinned=" + acquiredPages() +
']' + U.nl() + "Out of memory in data region [" +
"name=" + dataRegionCfg.getName() +
", initSize=" + U.readableSize(dataRegionCfg.getInitialSize(),
false) +
", maxSize=" + U.readableSize(dataRegionCfg.getMaxSize(),
false) +
", persistenceEnabled=" + dataRegionCfg.isPersistenceEnabled()
+ "] Try the following:" + U.nl() +
" ^-- Increase maximum off-heap memory size
(DataRegionConfiguration.maxSize)" + U.nl() +
" ^-- Enable eviction or expiration policies"
);
}
{code}.
The problem is that
{code:java}
DataRegionConfiguration dataRegionCfg = getDataRegionConfiguration();
{code}
is actually null.
Stacktrace:
{code:java}
[defragmentation-thread][CachePartitionDefragmentationManager] Defragmentation
process failed.
org.apache.ignite.internal.processors.cache.persistence.freelist.CorruptedFreeListException:
Failed to insert data row
at
org.apache.ignite.internal.processors.cache.persistence.freelist.AbstractFreeList.insertDataRow(AbstractFreeList.java:600)
~[classes/:?]
at
org.apache.ignite.internal.processors.cache.persistence.freelist.CacheFreeList.insertDataRow(CacheFreeList.java:74)
~[classes/:?]
at
org.apache.ignite.internal.processors.cache.persistence.freelist.CacheFreeList.insertDataRow(CacheFreeList.java:35)
~[classes/:?]
at
org.apache.ignite.internal.processors.cache.persistence.defragmentation.CachePartitionDefragmentationManager.lambda$copyPartitionData$4(CachePartitionDefragmentationManager.java:741)
~[classes/:?]
at
org.apache.ignite.internal.processors.cache.persistence.defragmentation.TreeIterator.iterate(TreeIterator.java:83)
~[classes/:?]
at
org.apache.ignite.internal.processors.cache.persistence.defragmentation.CachePartitionDefragmentationManager.copyPartitionData(CachePartitionDefragmentationManager.java:718)
~[classes/:?]
at
org.apache.ignite.internal.processors.cache.persistence.defragmentation.CachePartitionDefragmentationManager.defragmentOnePartition(CachePartitionDefragmentationManager.java:565)
~[classes/:?]
at
org.apache.ignite.internal.processors.cache.persistence.defragmentation.CachePartitionDefragmentationManager.lambda$executeDefragmentation$66155109$1(CachePartitionDefragmentationManager.java:382)
~[classes/:?]
at
org.apache.ignite.internal.util.IgniteUtils.lambda$doInParallel$3(IgniteUtils.java:11661)
~[classes/:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?]
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
~[?:?]
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
~[?:?]
at java.lang.Thread.run(Thread.java:829) [?:?]
Suppressed:
org.apache.ignite.internal.processors.cache.persistence.freelist.CorruptedFreeListException:
Failed to insert data row
at
org.apache.ignite.internal.processors.cache.persistence.freelist.AbstractFreeList.insertDataRow(AbstractFreeList.java:600)
~[classes/:?]
at
org.apache.ignite.internal.processors.cache.persistence.freelist.CacheFreeList.insertDataRow(CacheFreeList.java:74)
~[classes/:?]
at
org.apache.ignite.internal.processors.cache.persistence.freelist.CacheFreeList.insertDataRow(CacheFreeList.java:35)
~[classes/:?]
at
org.apache.ignite.internal.processors.cache.persistence.defragmentation.CachePartitionDefragmentationManager.lambda$copyPartitionData$4(CachePartitionDefragmentationManager.java:741)
~[classes/:?]
at
org.apache.ignite.internal.processors.cache.persistence.defragmentation.TreeIterator.iterate(TreeIterator.java:83)
~[classes/:?]
at
org.apache.ignite.internal.processors.cache.persistence.defragmentation.CachePartitionDefragmentationManager.copyPartitionData(CachePartitionDefragmentationManager.java:718)
~[classes/:?]
at
org.apache.ignite.internal.processors.cache.persistence.defragmentation.CachePartitionDefragmentationManager.defragmentOnePartition(CachePartitionDefragmentationManager.java:565)
~[classes/:?]
at
org.apache.ignite.internal.processors.cache.persistence.defragmentation.CachePartitionDefragmentationManager.lambda$executeDefragmentation$66155109$1(CachePartitionDefragmentationManager.java:382)
~[classes/:?]
at
org.apache.ignite.internal.util.IgniteUtils.lambda$doInParallel$3(IgniteUtils.java:11661)
~[classes/:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:264)
~[?:?]
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
~[?:?]
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
~[?:?]
at java.lang.Thread.run(Thread.java:829) [?:?]
Caused by: java.lang.NullPointerException
at
org.apache.ignite.internal.processors.cache.persistence.pagemem.PageMemoryImpl$Segment.oomException(PageMemoryImpl.java:2367)
~[classes/:?]
at
org.apache.ignite.internal.processors.cache.persistence.pagemem.ClockPageReplacementPolicy.replace(ClockPageReplacementPolicy.java:94)
~[classes/:?]
at
org.apache.ignite.internal.processors.cache.persistence.pagemem.PageMemoryImpl$Segment.removePageForReplacement(PageMemoryImpl.java:2341)
~[classes/:?]
at
org.apache.ignite.internal.processors.cache.persistence.pagemem.PageMemoryImpl$Segment.access$900(PageMemoryImpl.java:1981)
~[classes/:?]
at
org.apache.ignite.internal.processors.cache.persistence.pagemem.PageMemoryImpl.allocatePage(PageMemoryImpl.java:587)
~[classes/:?]
at
org.apache.ignite.internal.processors.cache.persistence.freelist.AbstractFreeList.allocateDataPage(AbstractFreeList.java:580)
~[classes/:?]
at
org.apache.ignite.internal.processors.cache.persistence.freelist.AbstractFreeList.writeSinglePage(AbstractFreeList.java:698)
~[classes/:?]
at
org.apache.ignite.internal.processors.cache.persistence.freelist.AbstractFreeList.insertDataRow(AbstractFreeList.java:592)
~[classes/:?]
{code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)