Mario Ivanac created GEODE-7145:
-----------------------------------
Summary: Geode native client PDX deadlock when not reading all data
Key: GEODE-7145
URL: https://issues.apache.org/jira/browse/GEODE-7145
Project: Geode
Issue Type: Improvement
Components: native client
Reporter: Mario Ivanac
Attachments: pdx_deadlock.tgz
A plausible thread deadlock in geode-native C++ library (versions 1.8 and 1.9)
has been found. It seems to happen in the following circumstances:
* A reader program continuously reads objects in a region, objects
deserialized with PDX.
* The reader program is NOT consuming all fields in the objects, so some
information is left in the cache.
* PdxIgnoreUnreadFields is set to FALSE.
With previous setup, it has been observed that after around 20 seconds of first
object read, the reader program gets stuck.
A program source that reproduces the problem is attached (pdx_deadlock.tgz).
This program is based on geode’s native example
(geode-native/examples/cpp/pdxserializable/) with some minor modifications.
Procedure
# Build pdx_deadlock program using cmake and copy binary to test machine.
# Use gfsh to create region with command: create region --name="custom_orders"
--type=PARTITION
# Execute pdx_deadlock once in create mode to add just one order entry in
region: ./pdx_deadlock <locator_host> <locator_port> create
# Execute pdx_deadlock in read loop mode with command: ./pdx_deadlock
<locator_host> <locator_port>
# Check in output the order object is being read. In less than 30 seconds the
deadlock shall happen, and iteration loop will not finish.
Additionally, if program is executed with these arguments:
./pdx_deadlock <locator_host> <locator_port> ignore-unread-fields
It will set geode client cache factory configuration value
PdxIgnoreUnreadFields to TRUE, and NO deadlock would occur, and the program
will finish all iterations.
--
This message was sent by Atlassian Jira
(v8.3.2#803003)