]
Pedro Ruivo updated ISPN-7505:
------------------------------
Status: Resolved (was: Pull Request Sent)
Fix Version/s: 9.0.0.CR3
Resolution: Done
Non-functional read in transaction with modifications returns old
value
-----------------------------------------------------------------------
Key: ISPN-7505
URL:
https://issues.jboss.org/browse/ISPN-7505
Project: Infinispan
Issue Type: Bug
Components: Core
Affects Versions: 9.0.0.CR1
Reporter: Radim Vansa
Assignee: Radim Vansa
Fix For: 9.0.0.CR3
See this modified FunctionalTxInMemoryTest:
{code:java}
@Test(dataProvider = "owningModeAndReadWrites")
public void testReadWriteAfterMods(boolean isOwner, WriteMethod method) throws
Exception {
Object KEY = getKey(isOwner);
cache(0, DIST).put(KEY, "a");
tm.begin();
assertEquals("a", rw.eval(KEY, append("b")).join());
assertEquals("ab", rw.evalMany(Collections.singleton(KEY),
append("c")).findAny().get());
assertEquals("abc", cache(0, DIST).get(KEY)); // <-- THIS FAILS
assertEquals(null, rw.eval("otherKey", append("d")).join());
assertEquals("abc", method.action.eval(KEY, wo, rw,
MarshallableFunctions.returnReadOnlyFindOrNull(),
(BiConsumer<EntryView.WriteEntryView<String>, String> &
Serializable) (e, prev) -> {}, getClass()));
tm.commit();
}
{code}
When the entry was modified in given transaction, we have to do the read using functional
identity read which passes all modifications along. We need to do this for all
{{remoteGet}} s, including those invoked for {{putIfAbsent}} etc.