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)