[ https://issues.apache.org/jira/browse/IGNITE-15026?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Kirill Tkalenko updated IGNITE-15026: ------------------------------------- Reviewer: Ivan Bessonov > Remove storage of physical page ids in a DurableBackgroundCleanupIndexTreeTask > ------------------------------------------------------------------------------ > > Key: IGNITE-15026 > URL: https://issues.apache.org/jira/browse/IGNITE-15026 > Project: Ignite > Issue Type: Improvement > Components: persistence, sql > Reporter: Kirill Tkalenko > Assignee: Kirill Tkalenko > Priority: Major > Fix For: 2.12 > > Time Spent: 10m > Remaining Estimate: 0h > > DurableBackgroundCleanupIndexTreeTask does one bad thing - it stores page id > into a logical metastorage record. BUT, there are no guarantees that this > page exists in current checkpoint state on the storage device. > Imagine that someone waits for checkpoint, then before the next checkpoint > they create SQL index, then drop it and end the process with "kill -9". > There's a chance that something like this could happen by accident. > Then page id in DurableBackgroundCleanupIndexTreeTask will either point to a > nonexistent page (trace 1) or to the existing page that has nothing to do > with meta tree (trace 2). > {noformat} > java.lang.ArrayIndexOutOfBoundsException: 4937 > at > org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.getStore(FilePageStoreManager.java:1085) > at > org.apache.ignite.internal.processors.cache.persistence.pagemem.PageReadWriteManagerImpl.read(PageReadWriteManagerImpl.java:65) > at > org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.read(FilePageStoreManager.java:510) > at > org.apache.ignite.internal.processors.cache.persistence.pagemem.PageMemoryImpl.acquirePage(PageMemoryImpl.java:871) > at > org.apache.ignite.internal.processors.cache.persistence.pagemem.PageMemoryImpl.acquirePage(PageMemoryImpl.java:697) > at > org.apache.ignite.internal.processors.cache.persistence.pagemem.PageMemoryImpl.acquirePage(PageMemoryImpl.java:686) > at > org.apache.ignite.internal.processors.cache.persistence.DataStructure.acquirePage(DataStructure.java:185) > at > org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.acquirePage(BPlusTree.java:6061) > at > org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.destroyDownPages(BPlusTree.java:2607) > at > org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.destroy(BPlusTree.java:2555) > at > org.apache.ignite.internal.processors.query.h2.DurableBackgroundCleanupIndexTreeTask.execute(DurableBackgroundCleanupIndexTreeTask.java:231) > at > org.apache.ignite.internal.processors.localtask.DurableBackgroundTasksProcessor$1.body(DurableBackgroundTasksProcessor.java:121) > at > org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:119) > at java.lang.Thread.run(Thread.java:748) > {noformat} > {noformat} > 4d11-9351-08a40b89548c > java.lang.IllegalStateException: Failed to get page IO instance (page content > is corrupted) > at > org.apache.ignite.internal.processors.cache.persistence.tree.io.IOVersions.forVersion(IOVersions.java:84) > at > org.apache.ignite.internal.processors.cache.persistence.tree.io.IOVersions.forPage(IOVersions.java:96) > at > org.apache.ignite.internal.processors.query.h2.database.H2Tree.getMetaInfo(H2Tree.java:508) > at > org.apache.ignite.internal.processors.query.h2.database.H2Tree.<init>(H2Tree.java:240) > at > org.apache.ignite.internal.processors.query.h2.DurableBackgroundCleanupIndexTreeTask$H2TreeToDestroy.<init>(DurableBackgroundCleanupIndexTreeTask.java:359) > at > org.apache.ignite.internal.processors.query.h2.DurableBackgroundCleanupIndexTreeTask.execute(DurableBackgroundCleanupIndexTreeTask.java:208) > at > org.apache.ignite.internal.processors.localtask.DurableBackgroundTasksProcessor$1.body(DurableBackgroundTasksProcessor.java:121) > at > org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:119) > at java.lang.Thread.run(Thread.java:748) > {noformat} -- This message was sent by Atlassian Jira (v8.3.4#803005)