[
https://issues.jboss.org/browse/ISPN-7526?page=com.atlassian.jira.plugin....
]
Radim Vansa commented on ISPN-7526:
-----------------------------------
[~dan.berindei] I think that write skew check should check that *preconditions* of the
transaction did not changed, rather than any concurrent update to the value. If the
transactions were serialized, the update could happen just before the transaction
starts/read is executed.
However, the situation is even worse when the key is non-local: this test fails:
{code:java}
final Object key = new MagicKey("ignore-return-value", cache(0));
final AdvancedCache<Object, Object> c = advancedCache(1);
final TransactionManager tm = tm(1);
cache(0).put(key, "init");
tm.begin();
c.getAdvancedCache().withFlags(Flag.IGNORE_RETURN_VALUES).put(key, "v1");
c.replace(key, "v1", "v2");
tm.commit(); // throws WSCE
{code}
because the replace command is not forced to retrieve the remote entry (the value is
already cached in context). Therefore, the seen version for WSC is a non-existent version,
which does not match the actual version.
There are two ways to fix this: a) don't do the check as we haven't seen any
version b) force remote read with {{IGNORE_RETURN_VALUES}} if the entry is not yet in the
context.
Write skew check throws even if the previous value was not read
---------------------------------------------------------------
Key: ISPN-7526
URL:
https://issues.jboss.org/browse/ISPN-7526
Project: Infinispan
Issue Type: Bug
Components: Core, Transactions
Affects Versions: 9.0.0.CR2, 8.2.6.Final
Reporter: Radim Vansa
Assignee: Radim Vansa
When the entry was overwritten without reading previous value and then we read it (this
read is handled from the current context), write skew check is still applied and can fail,
despite that it's unnecessary.
{code:java}
cache.put("k", "init");
tm.begin();
cache.getAdvancedCache().withFlags(Flag.IGNORE_RETURN_VALUES).put("k",
"v1");
assertEquals("v1", cache.put("k", "v2"));
Transaction tx = tm.suspend();
assertEquals("init", cache.put("k", "other"));
tm.resume(tx);
tm.commit(); // fails with WriteSkewCheckException
{code}
--
This message was sent by Atlassian JIRA
(v7.2.3#72005)