[ 
https://issues.apache.org/jira/browse/GEODE-9033?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17318366#comment-17318366
 ] 

Mark Hanson commented on GEODE-9033:
------------------------------------

After further investigating this situation with Darrel, it seems that the only 
viable path is to introduce a new Object to synchronize on when writing or 
reading the value or version stamp in a versioned region entry. In a 
non-versioned region entry, this is not necessary. Using volatile seem to have 
to clear safe way to solve this problem. Hence synchronizing on a  new object. 
The problem with that is that the footprint of a region entry would grow by the 
size of an Object. 

> client read operations should not be blocked by a write operation
> -----------------------------------------------------------------
>
>                 Key: GEODE-9033
>                 URL: https://issues.apache.org/jira/browse/GEODE-9033
>             Project: Geode
>          Issue Type: Improvement
>          Components: client/server
>    Affects Versions: 1.1.0
>            Reporter: Darrel Schneider
>            Assignee: Mark Hanson
>            Priority: Major
>              Labels: GeodeOperationAPI, performance
>
> Client read operations currently will be blocked by a write operation that is 
> in progress.
> This is caused by the write operation holding a synchronization on the 
> RegionEntry and LocalRegion.getDeserializedValue synchronizing the 
> RegionEntry with clientEvent is not null in order to atomically obtain both 
> the entry's value and version.
> The read code in LocalRegion that causes this is:
> {code:java}
>           synchronized (regionEntry) {
>             // value & version must be obtained atomically
>             
> clientEvent.setVersionTag(regionEntry.getVersionStamp().asVersionTag());
>             value = getDeserialized(regionEntry, updateStats, 
> disableCopyOnRead,
>                 preferCachedDeserializable, retainResult);
>           }
> {code}
> To fix this it may be possible to change the write operations to synchronize 
> on something else while changing both the value and version (but not while 
> doing anything else). Then the read code can sync on that new Object and not 
> the RegionEntry instance.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to