[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