[
https://issues.jboss.org/browse/ISPN-3766?page=com.atlassian.jira.plugin....
]
V L updated ISPN-3766:
----------------------
Description:
I'm not new with Infinispan, we use it from 5.3 version. Now I'm working on
integrating WriteSkew functional in our project, but unfortunately it's not worked
properly in our situation.
We use infinispan like a "cache" for some data source (doesn't matter for
what)
The problem is that WriteSkewException is available in specific situation, here are steps
for reproducing:
1) begin tx -> create an new element -> commit tx.
2) wait until cache expires. cache is empty now
3) being tx -> try to get element from cache, but it isn't found, so loading
element from data source and put it to the cache via putForExternalRead for read access
outside of current transaction.
4) make some modification with element -> put element to cache -> commit tx
Commit operation throws WriteSkewException
Here is log:
TX BEGIN. status='6', thread='1'
PUT id='1', tx='0', thread='1' size='1', contains='{
1/value }'
TX COMMIT. status='0', thread='1'
TX BEGIN. status='6', thread='1'
SIZE id='1', tx='0', thread='1' size='1', contains='{
1/null }'
PUT_FER id='1', tx='0', thread='1' size='1',
contains='{ 1/null }'
PUT id='1', tx='0', thread='1' size='1', contains='{
1/value }'
TX COMMIT. status='0', thread='1'
ISPN000005: Detected write skew on key [1]. Another process has changed the entry since we
last read it! Unable to copy entry for update.
Exception executing call org.infinispan.transaction.WriteSkewException: Detected write
skew.
I think I found the problem is in "get" method. When I invoke the get method
with key that not available in cache, infinispan create an "null" element in
cache. This element doesn't update by putForExternalRead method (look at log above).
If you skip get method invocation everithing is working fine. Everithing is working ok if
you skip step 2 of scenarion too.
was:
I'm not new with Infinispan, we use it from 5.3 version. Now I'm working on
integrating WriteSkew functional in our project, but unfortunately it's not worked
properly in our situation.
We use infinispan like a "cache" for some data source (doesn't matter for
what)
The problem is that WriteSkewException is available in specific situation, here are steps
for reproducing:
1) begin tx -> create an new element -> commit tx.
2) wait until cache expires. cache is empty now
3) being tx -> try to get element from cache, but it isn't found, so loading
element from data source and put it to the cache via putForExternalRead for read access
outside of current transaction.
4) make some modification with element -> put element to cache -> commit tx
Commit operation throws WriteSkewException
Here is log:
WriteSkewException
-------------------
Key: ISPN-3766
URL:
https://issues.jboss.org/browse/ISPN-3766
Project: Infinispan
Issue Type: Bug
Components: Transactions
Affects Versions: 5.3.0.Final, 6.0.0.CR1, 6.0.0.Final
Reporter: V L
Assignee: Mircea Markus
I'm not new with Infinispan, we use it from 5.3 version. Now I'm working on
integrating WriteSkew functional in our project, but unfortunately it's not worked
properly in our situation.
We use infinispan like a "cache" for some data source (doesn't matter for
what)
The problem is that WriteSkewException is available in specific situation, here are steps
for reproducing:
1) begin tx -> create an new element -> commit tx.
2) wait until cache expires. cache is empty now
3) being tx -> try to get element from cache, but it isn't found, so loading
element from data source and put it to the cache via putForExternalRead for read access
outside of current transaction.
4) make some modification with element -> put element to cache -> commit tx
Commit operation throws WriteSkewException
Here is log:
TX BEGIN. status='6', thread='1'
PUT id='1', tx='0', thread='1' size='1', contains='{
1/value }'
TX COMMIT. status='0', thread='1'
TX BEGIN. status='6', thread='1'
SIZE id='1', tx='0', thread='1' size='1', contains='{
1/null }'
PUT_FER id='1', tx='0', thread='1' size='1',
contains='{ 1/null }'
PUT id='1', tx='0', thread='1' size='1', contains='{
1/value }'
TX COMMIT. status='0', thread='1'
ISPN000005: Detected write skew on key [1]. Another process has changed the entry since
we last read it! Unable to copy entry for update.
Exception executing call org.infinispan.transaction.WriteSkewException: Detected write
skew.
I think I found the problem is in "get" method. When I invoke the get method
with key that not available in cache, infinispan create an "null" element in
cache. This element doesn't update by putForExternalRead method (look at log above).
If you skip get method invocation everithing is working fine. Everithing is working ok if
you skip step 2 of scenarion too.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see:
http://www.atlassian.com/software/jira