[ 
https://issues.apache.org/jira/browse/IGNITE-23588?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Ivan Bessonov updated IGNITE-23588:
-----------------------------------
    Description: 
{{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 800 (I 
used {{{}threads*50{}}}).

UPDATE: Reproducer has been implemented in 
https://issues.apache.org/jira/browse/IGNITE-24239

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 java.base@11.0.17/java.lang.Thread.run(Thread.java:834) {code}

  was:
{{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 800 (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 java.base@11.0.17/java.lang.Thread.run(Thread.java:834) {code}


> 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
>            Assignee: Ivan Bessonov
>            Priority: Critical
>              Labels: ignite-3
>
> {{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 800 (I 
> used {{{}threads*50{}}}).
> UPDATE: Reproducer has been implemented in 
> https://issues.apache.org/jira/browse/IGNITE-24239
> 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 java.base@11.0.17/java.lang.Thread.run(Thread.java:834) {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to