[infinispan-issues] [JBoss JIRA] (ISPN-7820) Uncommitted functional command modifies value
Radim Vansa (JIRA)
issues at jboss.org
Tue May 9 18:23:00 EDT 2017
[ https://issues.jboss.org/browse/ISPN-7820?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13403921#comment-13403921 ]
Radim Vansa commented on ISPN-7820:
-----------------------------------
In fact this has to be handled in user code and we should just add a warning to the docs; both to functional API and to compute*. Otherwise, we would have to create a defensive copy even for reads (because we can't guarantee that the should-be-read-only function won't access the value in modifying way) and that would result in excessive overhead.
> Uncommitted functional command modifies value
> ---------------------------------------------
>
> 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}
--
This message was sent by Atlassian JIRA
(v7.2.3#72005)
More information about the infinispan-issues
mailing list