Ivan Bessonov created IGNITE-23588:
--------------------------------------
Summary: B+Tree corruption during concurrent removes
Key: IGNITE-23588
URL: https://issues.apache.org/jira/browse/IGNITE-23588
Project: Ignite
Issue Type: Bug
Reporter: Ivan Bessonov
ItBplusTreePersistentPageMemoryTest#testMassiveRemove2_true fails on TC
sometimes.
Can be reproduced locally. In order to make it faster, data region can be
reduced to 32Mb, number of threads to 16 and number of keys to about 8000 (I
used {{{}threads*50{}}}).
It's not clear how precisely it happens, but during a remove theĀ
{{needReplaceInner}} logic does not work as it should sometimes, leading to an
inner node that holds an obsolete key.
Must be fixed in both Ignite 2 and Ignite 3.
{code:java}
[org.apache.ignite.internal.pagememory.tree.persistence.ItBplusTreePersistentPageMemoryTest.testMassiveRemove2_true()]
org.opentest4j.AssertionFailedError: Removed row:
683[11:44:19][org.apache.ignite.internal.pagememory.tree.persistence.ItBplusTreePersistentPageMemoryTest.testMassiveRemove2_true()]
org.opentest4j.AssertionFailedError: Removed row: 683
at
app//org.apache.ignite.internal.pagememory.tree.AbstractBplusTreePageMemoryTest$LongInnerIo.checkNotRemoved(AbstractBplusTreePageMemoryTest.java:2948)
at
app//org.apache.ignite.internal.pagememory.tree.AbstractBplusTreePageMemoryTest$LongInnerIo.getLookupRow(AbstractBplusTreePageMemoryTest.java:2965)
at
app//org.apache.ignite.internal.pagememory.tree.AbstractBplusTreePageMemoryTest$LongInnerIo.getLookupRow(AbstractBplusTreePageMemoryTest.java:2918)
at
app//org.apache.ignite.internal.pagememory.tree.AbstractBplusTreePageMemoryTest$TestTree.compare(AbstractBplusTreePageMemoryTest.java:2844)
at
app//org.apache.ignite.internal.pagememory.tree.AbstractBplusTreePageMemoryTest$TestTree.compare(AbstractBplusTreePageMemoryTest.java:2787)
at
app//org.apache.ignite.internal.pagememory.tree.BplusTree.compare(BplusTree.java:5748)
at
app//org.apache.ignite.internal.pagememory.tree.BplusTree.findInsertionPoint(BplusTree.java:5652)
at
app//org.apache.ignite.internal.pagememory.tree.BplusTree$Search.run0(BplusTree.java:398)
at
app//org.apache.ignite.internal.pagememory.tree.BplusTree$GetPageHandler.run(BplusTree.java:6422)
at
app//org.apache.ignite.internal.pagememory.tree.BplusTree$Search.run(BplusTree.java:370)
at
app//org.apache.ignite.internal.pagememory.tree.BplusTree$GetPageHandler.run(BplusTree.java:6398)
at
app//org.apache.ignite.internal.pagememory.util.PageHandler.readPage(PageHandler.java:157)
at
app//org.apache.ignite.internal.pagememory.datastructure.DataStructure.read(DataStructure.java:391)
at
app//org.apache.ignite.internal.pagememory.tree.BplusTree.read(BplusTree.java:6639)
at
app//org.apache.ignite.internal.pagememory.tree.BplusTree.removeDown(BplusTree.java:2300)
at
app//org.apache.ignite.internal.pagememory.tree.BplusTree.removeDown(BplusTree.java:2320)
at
app//org.apache.ignite.internal.pagememory.tree.BplusTree.removeDown(BplusTree.java:2320)
at
app//org.apache.ignite.internal.pagememory.tree.BplusTree.doRemove(BplusTree.java:2238)
at
app//org.apache.ignite.internal.pagememory.tree.BplusTree.remove(BplusTree.java:2067)
at
app//org.apache.ignite.internal.pagememory.tree.AbstractBplusTreePageMemoryTest.lambda$doTestMassiveRemove$0(AbstractBplusTreePageMemoryTest.java:894)
at
app//org.apache.ignite.internal.testframework.IgniteTestUtils.lambda$runMultiThreaded$2(IgniteTestUtils.java:569)
at [email protected]/java.lang.Thread.run(Thread.java:834) {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)