Jason Huynh created GEODE-1944:
----------------------------------

             Summary: Index with method invocation in regionPath can throw 
exception when tombstones clean up during gii
                 Key: GEODE-1944
                 URL: https://issues.apache.org/jira/browse/GEODE-1944
             Project: Geode
          Issue Type: Bug
          Components: querying
            Reporter: Jason Huynh


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...





--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to