Dan Smith created GEODE-8671: -------------------------------- Summary: Two threads calling get and retrieve the same PdxInstance, resulting in corruption Key: GEODE-8671 URL: https://issues.apache.org/jira/browse/GEODE-8671 Project: Geode Issue Type: Improvement Components: regions Reporter: Dan Smith
Even if copy-on-read is set to true, two threads calling get on a partitioned region can end up with the same PdxInstance object. This is problematic because some PdxInstances methods are not thread safe. Although the underlying bytes are immutatable, the PDXInstance has a ByteSource with a position field that changes. That means two threads doing serialization or calling toString on the PdxInstance could result in one or more threads getting a corrupt read. It looks like they are ending up with the same instance because of the behavior in LocalRegion.optimizedGetObject. We use futures to make sure there is only 1 get that goes through, and both threads receive the same value. Ending up in optimizedGetObject requires a race with the put, because if the value was in the cache at the beginning of the get it would be returned earlier in the get process. I put a test that reproduces this issue here - https://github.com/upthewaterspout/geode/pull/new/feature/pdx-instances-shared -- This message was sent by Atlassian Jira (v8.3.4#803005)