Uploaded image for project: 'Geode'
  1. Geode
  2. GEODE-1944

Index with method invocation in regionPath can throw exception when tombstones clean up during gii

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • 1.0.0-incubating
    • querying
    • None

    Description

      When a system is recovering from disk and indexes are created from cache.xml with certain region paths (say /region.entrySet()) and while recovering with gii, tombstones are cleaned up, it is possible that an exception is thrown from the index that prevents the system from recovering. This occurs when gii forces old tombstones to be removed and invokes index maintenance. Index maintenance, when trying to invoke the method on the region, will force the code down a path that requires a .get(key) on the region. The value was never present in the region and this causes an EntryDestroyedException to be thrown.

      A work around is to drop the indexes and recreate them after recovery.

      The idea to try to prevent index maintenance if old value is not present does not work because overflowed regions can have old value not present in memory.

      The solution will be to put a try catch around the evaluate method in the IMQEvaluator of the Compact and Hash indexes. Then force them to remove the region entry by crawling the entire index. It will not be present in the index for this specific case, but to be on the safe side, if the entry does not exist in the region during maintenance, it probably should not exist in the index any longer...

      Attachments

        Activity

          People

            jasonhuynh Jason Huynh
            jasonhuynh Jason Huynh
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: