]
Tristan Tarrant updated ISPN-11981:
-----------------------------------
Status: Resolved (was: Pull Request Sent)
Fix Version/s: 12.0.0.Dev01
(was: 11.0.2.Final)
Resolution: Done
Stale immortal entry metadata
-----------------------------
Key: ISPN-11981
URL:
https://issues.redhat.com/browse/ISPN-11981
Project: Infinispan
Issue Type: Bug
Components: Core
Affects Versions: 11.0.0.CR1, 10.1.8.Final
Reporter: Dan Berindei
Assignee: Dan Berindei
Priority: Major
Fix For: 12.0.0.Dev01
When an entry is updated, {{InternalEntryFactoryImpl}} tries to reuse the existing
{{InternalCacheEntry}} instance instead of creating a new one. The condition is that both
the new and the old entry have the same implementation implementation: immortal, immortal
w/ external metadata, transient, transient w/ metadata etc.
BecauseĀ {{MetadataImmortalCacheEntry}} extends {{ImmortalCacheEntry}}, that logic is
broken: when an immortal entry with external metadata is replaced with a new entry without
external metadata, the external metadata is not removed.
This impacts the anchored keys module, which I am changing to store the key location in
the metadata (currently it is stored as a value, and it is broken with BINARY/OFF_HEAP
storage). When a node leaves and an entry located on the leaver is updated, the key is
written on the newest joiner. The joiner already has a local entry with
{{RemoteMetadata}}, and is trying to write a value without any metadata.