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)

Reply via email to