Darrel Schneider created GEODE-9033:
---------------------------------------

             Summary: 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
            Reporter: Darrel Schneider


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