[
https://issues.apache.org/jira/browse/IGNITE-12375?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Ivan Pavlukhin updated IGNITE-12375:
------------------------------------
Component/s: mvcc
> Inconsistent persistent cache behaviour: containsKey returns false on a key
> returned by iterator
> ------------------------------------------------------------------------------------------------
>
> Key: IGNITE-12375
> URL: https://issues.apache.org/jira/browse/IGNITE-12375
> Project: Ignite
> Issue Type: Bug
> Components: mvcc
> Affects Versions: 2.7, 2.7.6
> Reporter: Matija Polajnar
> Priority: Major
> Attachments: ignite-bug.zip
>
>
> On a fairly complex spring boot application using embedded Ignite persistent
> storage, we've managed (multiple times) to get into a situation where some
> persistent caches start behaving weirdly. The symptoms are such: caches'
> {{iterator()}} method returns the elements we previously put into caches as
> expected. {{size()}} also returns the expected value. But
> {{containsKey(...)}} and {{get(...)}} return {{false}} and {{null}}
> respectively for some (or all) keys that are expected to be in the cache and
> are even returned by the {{iterator()}}.
> The problem never starts occurring mid-run, but always after cluster
> restarts; not at all always, and we suspect a necessary precondition is that
> cache configurations are slightly changed, like having modified QueryEntities
> and such. We also suspect this only happens on single-node clusters, so it
> might be related to IGNITE-12297, but the workaround that works for that
> problem does not fix the problem described here.
> The caches in question then cannot be repaired short of destroying and
> re-creating them and re-importing data.
>
> We tried and failed to reproduce the problem from scratch in a small demo
> application. We managed, however, to grab a {{work}} directory from our
> application after corruption and then create a demo application with a
> minimal set of classes needed to demonstrate the issue on reading (after
> corruption is already present).
> I'm attaching a zip file with the code (along with a maven pom.xml) and the
> corrupted work directory. You can directly execute the demo by issuing {{mvn
> compile exec:java}}, which will execute the
> {{care.better.demo.ignitebug.BugApp}} class. In this class there's this
> method:
> {code:java}
> private static void replicateProblem(IgniteCache<Object, Object> cache) {
> int seen = 0;
> Iterator<Cache.Entry<Object, Object>> entryIterator =
> cache.iterator();
> while (entryIterator.hasNext()) {
> Object key = entryIterator.next().getKey();
> if (!cache.containsKey(key) || cache.get(key) == null) {
> LOG.error("UNSEEN KEY: {}", key);
> } else {
> seen++;
> }
> }
> LOG.info("Size {}, seen {}.", cache.size(), seen);
> }
> {code}
>
> After execution you will note log records like this one:
> {code}
> ERROR care.better.demo.ignitebug.BugApp.replicateProblem - UNSEEN KEY:
> QueueKey{affinityKey=PartyIdArg{namespace='ЭМИАС Медработники', id='222'},
> entryId=c059b587-78d3-4c75-b64f-8575ae3d2318}
> {code}
> We had no success in trying to find any lead while debugging through Ignite
> source code so we kindly ask your assistance in hunting down this bug and,
> until it is fixed, suggesting any possible work-around should this occur in a
> production environment (it has not so far) where it is not practical to dump
> all data from some cache into a file to be able to destroy, re-create and
> re-import it.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)