[infinispan-issues] [JBoss JIRA] (ISPN-7820) Document store-by-reference effects in functional commands

Radim Vansa (JIRA) issues at jboss.org
Tue Jun 6 09:53:00 EDT 2017


    [ https://issues.jboss.org/browse/ISPN-7820?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13417001#comment-13417001 ] 

Radim Vansa commented on ISPN-7820:
-----------------------------------

Actually it is a problem for non-transactional commands as well: since we may have concurrent readers and writers, without internal synchronization the concurrent operation could be processed concurrently.
Besides, if there's a retry operation, we'd be modifying the collection twice (and version history wouldn't help us).

> 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}



--
This message was sent by Atlassian JIRA
(v7.2.3#72005)


More information about the infinispan-issues mailing list