Dan Smith created GEODE-7491: -------------------------------- Summary: Index triggers deserialization of objects embedded in a PDX object Key: GEODE-7491 URL: https://issues.apache.org/jira/browse/GEODE-7491 Project: Geode Issue Type: Bug Components: querying Reporter: Dan Smith
Objects that are serialized using PDX are supposed to be indexable even if the classes for those objects are not present on the server. However, in certain cases, having an index triggers deserialization of objects embedded in the PDX object, even if those embedded objects are not indexed. Here's the use case: 1. a PDX object with a String field (eg "name") and a nested java serializable object (eg "Customer") 2. The class for the java serializable object is not on the classpath of the server 3. An index on the string field. 4. Performing an update on the object will result in a IndexMaintenanceException caused by a ClassNotFoundException The reason seems to be that the CompactRangeIndex.removeMapping method that gets called to remove the old index mapping for the old value adds the old region value to a HashSet. This requires computing the hashCode of the PDXInstance. By default, PDXInstance.hashCode computes the hashcode of all of the fields. The "Customer" Field in the example above cannot be deserialized for a hashCode. Setting the identity fields of the PDX using PdxWriter.markIdentityField can work around the issue, but PDX objects should probably be indexable without this. -- This message was sent by Atlassian Jira (v8.3.4#803005)