You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Kirill Tkalenko (Jira)" <ji...@apache.org> on 2021/06/29 13:53:00 UTC
[jira] [Created] (IGNITE-15026) Remove storage of physical page ids
in a DurableBackgroundCleanupIndexTreeTask
Kirill Tkalenko created IGNITE-15026:
----------------------------------------
Summary: 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
Fix For: 2.12
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)