Uploaded image for project: 'Ignite'
  1. Ignite
  2. IGNITE-9303

PageSnapshot can contain wrong pageId tag when not dirty page is recycling

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 2.6
    • 2.8
    • 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

          Activity

            People

              ilantukh Ilya Lantukh
              alex_pl Aleksey Plekhanov
              Votes:
              0 Vote for this issue
              Watchers:
              8 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 10m
                  10m