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)

Reply via email to