Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
Description
On a persistent region the DiskId keyId will be set negative if the value is not in memory but can be read from disk.
The code correctly sets it the first time an entry is recovered from disk but does not correctly update it if a that same entry is recovered more than once from disk. This can happen when a krf for an oplog does not exist. The same entry can have multiple records for the same key.
They code that does not correctly update DiskId keyId is in these methods:
org.apache.geode.internal.cache.DiskEntry.Helper.basicUpdate(DiskEntry, LocalRegion, Object, EntryEventImpl): see the section that handles RecoveredEntry
and org.apache.geode.internal.cache.DiskEntry.Helper.updateRecoveredEntry(PlaceHolderDiskRegion, DiskEntry, RecoveredEntry, RegionEntryContext)
The only issue with not updating this keyId is that it can cause the "inVM" and "onDisk" statistics to be incorrect.