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)