Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
2.6
-
None
-
None
Description
When page is recycling (for example in BPlusTree.Remove#freePage() -> DataStructure#recyclePage()) tag of pageId is modified, but original pageId is passed to writeUnlock() method and this passed pageId is stored to PageSnapshot WAL record.
This bug may lead to errors in WAL applying during crash recovery.
Reproducer (ignite-indexing module must be in classpath):
public class WalFailReproducer extends AbstractWalDeltaConsistencyTest { @Override protected boolean checkPagesOnCheckpoint() { return true; } public final void testPutRemoveCacheDestroy() throws Exception { CacheConfiguration<Integer, Integer> ccfg = new CacheConfiguration<>("cache0"); ccfg.setIndexedTypes(Integer.class, Integer.class); IgniteEx ignite = startGrid(0); ignite.cluster().active(true); IgniteCache<Integer, Integer> cache0 = ignite.getOrCreateCache(ccfg); for (int i = 0; i < 5_000; i++) cache0.put(i, i); forceCheckpoint(); for (int i = 1_000; i < 4_000; i++) cache0.remove(i); forceCheckpoint(); stopAllGrids(); } }
Attachments
Issue Links
- duplicates
-
IGNITE-6580 Cluster can fail during concurrent re-balancing and cache destruction
- Open
-
IGNITE-10571 Crash in exchange worker during memory recovery on rebalance
- Resolved
-
IGNITE-8790 JVM crash during memory recovery
- Resolved
-
IGNITE-10644 CorruptedTreeException might occur after force node kill during transaction
- Resolved
- relates to
-
IGNITE-10822 AbstractFreelist init reused page in wrong way.
- Resolved
- links to