]
Katia Aresti commented on ISPN-7820:
------------------------------------
[~rvansa] this makes all the sens to me now
Document store-by-reference effects in functional commands
----------------------------------------------------------
Key: ISPN-7820
URL:
https://issues.jboss.org/browse/ISPN-7820
Project: Infinispan
Issue Type: Bug
Components: Core, Test Suite - Core, Transactions
Affects Versions: 9.0.0.Final
Reporter: Radim Vansa
Assignee: Radim Vansa
In transactional mode, functional read write command loads the value into the context
without making a defensive copy. Then, the function is applied directly on that value,
exposing uncommitted changes to all other threads. Rollback is ineffective, the value is
already changed.
There are no tests for rollback in FunctionalTxInMemoryTest.
Reproducer:
{code:java}
@Test
public void testValueInContextIsACopy() throws Exception {
Object key = getKeyForCache(cache(0, DIST), cache(1, DIST));
cache(0, DIST).put(key, new ArrayList());
tm.begin();
// nasty cast
FunctionalMap.ReadWriteMap<Object, List> otherRw =
(FunctionalMap.ReadWriteMap) rw;
otherRw.eval(key, (Serializable &
Function<EntryView.ReadWriteEntryView<Object, List>, Object>) view -> {
List list = view.get();
list.add("woohoo");
view.set(list);
return null;
}).join();
tm.rollback();
assertEquals(new ArrayList(), cache(0, DIST).get(key));
}
{code}