[ 
https://issues.apache.org/jira/browse/GEODE-5917?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Barry Oglesby updated GEODE-5917:
---------------------------------
    Description: 
Gfsh query results show a mix of PdxInstances and 
PreferBytesCachedDeserializables with read-serialized=true

A gfsh query on a partitioned region with pdx read-serialized=true shows 
results like:
{noformat}
shares |       price       |   id   | cusip  |  serializedValue   | sizeInBytes 
|                                 stringForm                                 | 
valueSizeInBytes | DSFID  |            deserializedForReading             |     
  value        | serialized
------ | ----------------- | ------ | ------ | ------------------ | ----------- 
| -------------------------------------------------------------------------- | 
---------------- | ------ | --------------------------------------------- | 
------------------ | ----------
70     | 590.923583984375  | 0      | MCD    | <NULL>             | <NULL>      
| <NULL>                                                                     | 
<NULL>           | <NULL> | <NULL>                                        | 
<NULL>             | <NULL>
77     | 740.6094970703125 | 3      | MGM    | <NULL>             | <NULL>      
| <NULL>                                                                     | 
<NULL>           | <NULL> | <NULL>                                        | 
<NULL>             | <NULL>
<NULL> | <NULL>            | <NULL> | <NULL> | org.json.JSONArray | 56          
| PDX[4456129,TradePdx]{cusip=GGB, id=1, price=26.52454376220703, shares=49} | 
44               | -65    | org.apache.geode.pdx.internal.PdxInstanceImpl | 
org.json.JSONArray | true
<NULL> | <NULL>            | <NULL> | <NULL> | org.json.JSONArray | 56          
| PDX[4456129,TradePdx]{cusip=STO, id=2, price=643.344482421875, shares=85}  | 
44               | -65    | org.apache.geode.pdx.internal.PdxInstanceImpl | 
org.json.JSONArray | true
<NULL> | <NULL>            | <NULL> | <NULL> | org.json.JSONArray | 56          
| PDX[4456129,TradePdx]{cusip=MGM, id=4, price=724.223388671875, shares=0}   | 
44               | -65    | org.apache.geode.pdx.internal.PdxInstanceImpl | 
org.json.JSONArray | true
{noformat}
In this case, there are 2 servers and no redundant copies.

The DataCommandFunction.select query returns:
{noformat}
DataCommandFunction.select results=CumulativeNonDistinctResults::[
PDX[4456129,TradePdx]{cusip=MCD, id=0, price=590.923583984375, shares=70},
PDX[4456129,TradePdx]{cusip=MGM, id=3, price=740.6094970703125, shares=77},
PreferBytesCachedDeserializable@1599752189,
PreferBytesCachedDeserializable@1120782877,
PreferBytesCachedDeserializable@1023583807
]
{noformat}
The local query returns the 2 PdxInstances, and the remote query returns the 3 
PreferBytesCachedDeserializables:
{noformat}
[info 2018/10/23 13:53:18.046 PDT  <Function Execution Processor1> tid=0x4f] 
Trace Info for Query: SELECT * FROM /data limit 100
    Local 192.168.2.6(76490)<v10>:1026 took 6.887ms and returned 2 results; 
    Remote 192.168.2.6(76479)<v9>:1025 took 45.164ms and returned 3 results;  
indexesUsed(0)
{noformat}
The 3 PreferBytesCachedDeserializables are not converted to PdxInstances before 
they are returned.

PartitionedRegionQueryEvaluator.addResultsToResultSet adds the results to the 
CumulativeNonDistinctResults result set.

The CumulativeCollectionIterator iterates the 
CumulativeNonDistinctResultsCollection and converts the objects to PDX here:
{noformat}
java.lang.Exception: Stack trace
        at java.lang.Thread.dumpStack(Thread.java:1333)
        at 
org.apache.geode.cache.query.internal.utils.PDXUtils.convertPDX(PDXUtils.java:83)
        at 
org.apache.geode.cache.query.internal.CumulativeNonDistinctResults$CumulativeNonDistinctResultsCollection$CumulativeCollectionIterator.next(CumulativeNonDistinctResults.java:259)
        at 
org.apache.geode.cache.query.internal.utils.LimitIterator.next(LimitIterator.java:49)
        at 
org.apache.geode.management.internal.cli.functions.DataCommandFunction.select_SelectResults(DataCommandFunction.java:271)
        at 
org.apache.geode.management.internal.cli.functions.DataCommandFunction.select(DataCommandFunction.java:226)
        at 
org.apache.geode.management.internal.cli.functions.DataCommandFunction.select(DataCommandFunction.java:177)
        at 
org.apache.geode.management.internal.cli.functions.DataCommandFunction.execute(DataCommandFunction.java:125)
        at 
org.apache.geode.internal.cache.MemberFunctionStreamingMessage.process(MemberFunctionStreamingMessage.java:186)
        at 
org.apache.geode.distributed.internal.DistributionMessage.scheduleAction(DistributionMessage.java:382)
        at 
org.apache.geode.distributed.internal.DistributionMessage$1.run(DistributionMessage.java:448)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at 
org.apache.geode.distributed.internal.DistributionManager.runUntilShutdown(DistributionManager.java:1099)
        at 
org.apache.geode.distributed.internal.DistributionManager.access$000(DistributionManager.java:108)
        at 
org.apache.geode.distributed.internal.DistributionManager$9$1.run(DistributionManager.java:970)
        at java.lang.Thread.run(Thread.java:745)
{noformat}
PDXUtils.convertPDX does this:
{noformat}
if (getDeserializedObject && obj instanceof VMCachedDeserializable) {
  obj = ((VMCachedDeserializable) obj).getDeserializedForReading();
{noformat}
Changing the instanceof check to check for CachedDeserializable instead fixes 
the issue:
{noformat}
if (getDeserializedObject && obj instanceof CachedDeserializable) {
  obj = ((CachedDeserializable) obj).getDeserializedForReading();
{noformat}

  was:
A gfsh query on a partitioned region with pdx read-serialized=true shows 
results like:
```
shares | price | id | cusip | serializedValue | sizeInBytes | stringForm | 
valueSizeInBytes | DSFID | deserializedForReading | value | serialized
------ | ----------------- | ------ | ------ | ------------------ | ----------- 
| -------------------------------------------------------------------------- | 
---------------- | ------ | --------------------------------------------- | 
------------------ | ----------
70 | 590.923583984375 | 0 | MCD | <NULL> | <NULL> | <NULL> | <NULL> | <NULL> | 
<NULL> | <NULL> | <NULL>
77 | 740.6094970703125 | 3 | MGM | <NULL> | <NULL> | <NULL> | <NULL> | <NULL> | 
<NULL> | <NULL> | <NULL>
<NULL> | <NULL> | <NULL> | <NULL> | org.json.JSONArray | 56 | 
PDX[4456129,TradePdx]\{cusip=GGB, id=1, price=26.52454376220703, shares=49} | 
44 | -65 | org.apache.geode.pdx.internal.PdxInstanceImpl | org.json.JSONArray | 
true
<NULL> | <NULL> | <NULL> | <NULL> | org.json.JSONArray | 56 | 
PDX[4456129,TradePdx]\{cusip=STO, id=2, price=643.344482421875, shares=85} | 44 
| -65 | org.apache.geode.pdx.internal.PdxInstanceImpl | org.json.JSONArray | 
true
<NULL> | <NULL> | <NULL> | <NULL> | org.json.JSONArray | 56 | 
PDX[4456129,TradePdx]\{cusip=MGM, id=4, price=724.223388671875, shares=0} | 44 
| -65 | org.apache.geode.pdx.internal.PdxInstanceImpl | org.json.JSONArray | 
true
```
In this case, there are 2 servers and no redundant copies.

The DataCommandFunction.select query returns:
```
DataCommandFunction.select results=CumulativeNonDistinctResults::[
PDX[4456129,TradePdx]\{cusip=MCD, id=0, price=590.923583984375, shares=70},
PDX[4456129,TradePdx]\{cusip=MGM, id=3, price=740.6094970703125, shares=77},
PreferBytesCachedDeserializable@1599752189,
PreferBytesCachedDeserializable@1120782877,
PreferBytesCachedDeserializable@1023583807
]
```
The local query returns the 2 PdxInstances, and the remote query returns the 3 
PreferBytesCachedDeserializables:
```
[info 2018/10/23 13:53:18.046 PDT <Function Execution Processor1> tid=0x4f] 
Trace Info for Query: SELECT * FROM /data limit 100
 Local 192.168.2.6(76490)<v10>:1026 took 6.887ms and returned 2 results; 
 Remote 192.168.2.6(76479)<v9>:1025 took 45.164ms and returned 3 results; 
indexesUsed(0)
```
The 3 PreferBytesCachedDeserializables are not converted to PdxInstances before 
they are returned.

PartitionedRegionQueryEvaluator.addResultsToResultSet adds the results to the 
CumulativeNonDistinctResults result set.

The CumulativeCollectionIterator iterates the 
CumulativeNonDistinctResultsCollection and converts the objects to PDX here:
```
java.lang.Exception: Stack trace
 at java.lang.Thread.dumpStack(Thread.java:1333)
 at 
org.apache.geode.cache.query.internal.utils.PDXUtils.convertPDX(PDXUtils.java:83)
 at 
org.apache.geode.cache.query.internal.CumulativeNonDistinctResults$CumulativeNonDistinctResultsCollection$CumulativeCollectionIterator.next(CumulativeNonDistinctResults.java:259)
 at 
org.apache.geode.cache.query.internal.utils.LimitIterator.next(LimitIterator.java:49)
 at 
org.apache.geode.management.internal.cli.functions.DataCommandFunction.select_SelectResults(DataCommandFunction.java:271)
 at 
org.apache.geode.management.internal.cli.functions.DataCommandFunction.select(DataCommandFunction.java:226)
 at 
org.apache.geode.management.internal.cli.functions.DataCommandFunction.select(DataCommandFunction.java:177)
 at 
org.apache.geode.management.internal.cli.functions.DataCommandFunction.execute(DataCommandFunction.java:125)
 at 
org.apache.geode.internal.cache.MemberFunctionStreamingMessage.process(MemberFunctionStreamingMessage.java:186)
 at 
org.apache.geode.distributed.internal.DistributionMessage.scheduleAction(DistributionMessage.java:382)
 at 
org.apache.geode.distributed.internal.DistributionMessage$1.run(DistributionMessage.java:448)
 at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
 at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
 at 
org.apache.geode.distributed.internal.DistributionManager.runUntilShutdown(DistributionManager.java:1099)
 at 
org.apache.geode.distributed.internal.DistributionManager.access$000(DistributionManager.java:108)
 at 
org.apache.geode.distributed.internal.DistributionManager$9$1.run(DistributionManager.java:970)
 at java.lang.Thread.run(Thread.java:745)
```
PDXUtils.convertPDX does this:
```
if (getDeserializedObject && obj instanceof VMCachedDeserializable) {
 obj = ((VMCachedDeserializable) obj).getDeserializedForReading();
```
Changing the instanceof check to check for CachedDeserializable instead fixes 
the issue:
```
if (getDeserializedObject && obj instanceof CachedDeserializable) {
 obj = ((CachedDeserializable) obj).getDeserializedForReading();
```


> Gfsh query results show a mix of PdxInstances and 
> PreferBytesCachedDeserializables with read-serialized=true
> ------------------------------------------------------------------------------------------------------------
>
>                 Key: GEODE-5917
>                 URL: https://issues.apache.org/jira/browse/GEODE-5917
>             Project: Geode
>          Issue Type: Bug
>          Components: querying
>            Reporter: Barry Oglesby
>            Priority: Major
>
> Gfsh query results show a mix of PdxInstances and 
> PreferBytesCachedDeserializables with read-serialized=true
> A gfsh query on a partitioned region with pdx read-serialized=true shows 
> results like:
> {noformat}
> shares |       price       |   id   | cusip  |  serializedValue   | 
> sizeInBytes |                                 stringForm                      
>            | valueSizeInBytes | DSFID  |            deserializedForReading    
>          |       value        | serialized
> ------ | ----------------- | ------ | ------ | ------------------ | 
> ----------- | 
> -------------------------------------------------------------------------- | 
> ---------------- | ------ | --------------------------------------------- | 
> ------------------ | ----------
> 70     | 590.923583984375  | 0      | MCD    | <NULL>             | <NULL>    
>   | <NULL>                                                                    
>  | <NULL>           | <NULL> | <NULL>                                        
> | <NULL>             | <NULL>
> 77     | 740.6094970703125 | 3      | MGM    | <NULL>             | <NULL>    
>   | <NULL>                                                                    
>  | <NULL>           | <NULL> | <NULL>                                        
> | <NULL>             | <NULL>
> <NULL> | <NULL>            | <NULL> | <NULL> | org.json.JSONArray | 56        
>   | PDX[4456129,TradePdx]{cusip=GGB, id=1, price=26.52454376220703, 
> shares=49} | 44               | -65    | 
> org.apache.geode.pdx.internal.PdxInstanceImpl | org.json.JSONArray | true
> <NULL> | <NULL>            | <NULL> | <NULL> | org.json.JSONArray | 56        
>   | PDX[4456129,TradePdx]{cusip=STO, id=2, price=643.344482421875, shares=85} 
>  | 44               | -65    | org.apache.geode.pdx.internal.PdxInstanceImpl 
> | org.json.JSONArray | true
> <NULL> | <NULL>            | <NULL> | <NULL> | org.json.JSONArray | 56        
>   | PDX[4456129,TradePdx]{cusip=MGM, id=4, price=724.223388671875, shares=0}  
>  | 44               | -65    | org.apache.geode.pdx.internal.PdxInstanceImpl 
> | org.json.JSONArray | true
> {noformat}
> In this case, there are 2 servers and no redundant copies.
> The DataCommandFunction.select query returns:
> {noformat}
> DataCommandFunction.select results=CumulativeNonDistinctResults::[
> PDX[4456129,TradePdx]{cusip=MCD, id=0, price=590.923583984375, shares=70},
> PDX[4456129,TradePdx]{cusip=MGM, id=3, price=740.6094970703125, shares=77},
> PreferBytesCachedDeserializable@1599752189,
> PreferBytesCachedDeserializable@1120782877,
> PreferBytesCachedDeserializable@1023583807
> ]
> {noformat}
> The local query returns the 2 PdxInstances, and the remote query returns the 
> 3 PreferBytesCachedDeserializables:
> {noformat}
> [info 2018/10/23 13:53:18.046 PDT  <Function Execution Processor1> tid=0x4f] 
> Trace Info for Query: SELECT * FROM /data limit 100
>     Local 192.168.2.6(76490)<v10>:1026 took 6.887ms and returned 2 results; 
>     Remote 192.168.2.6(76479)<v9>:1025 took 45.164ms and returned 3 results;  
> indexesUsed(0)
> {noformat}
> The 3 PreferBytesCachedDeserializables are not converted to PdxInstances 
> before they are returned.
> PartitionedRegionQueryEvaluator.addResultsToResultSet adds the results to the 
> CumulativeNonDistinctResults result set.
> The CumulativeCollectionIterator iterates the 
> CumulativeNonDistinctResultsCollection and converts the objects to PDX here:
> {noformat}
> java.lang.Exception: Stack trace
>       at java.lang.Thread.dumpStack(Thread.java:1333)
>       at 
> org.apache.geode.cache.query.internal.utils.PDXUtils.convertPDX(PDXUtils.java:83)
>       at 
> org.apache.geode.cache.query.internal.CumulativeNonDistinctResults$CumulativeNonDistinctResultsCollection$CumulativeCollectionIterator.next(CumulativeNonDistinctResults.java:259)
>       at 
> org.apache.geode.cache.query.internal.utils.LimitIterator.next(LimitIterator.java:49)
>       at 
> org.apache.geode.management.internal.cli.functions.DataCommandFunction.select_SelectResults(DataCommandFunction.java:271)
>       at 
> org.apache.geode.management.internal.cli.functions.DataCommandFunction.select(DataCommandFunction.java:226)
>       at 
> org.apache.geode.management.internal.cli.functions.DataCommandFunction.select(DataCommandFunction.java:177)
>       at 
> org.apache.geode.management.internal.cli.functions.DataCommandFunction.execute(DataCommandFunction.java:125)
>       at 
> org.apache.geode.internal.cache.MemberFunctionStreamingMessage.process(MemberFunctionStreamingMessage.java:186)
>       at 
> org.apache.geode.distributed.internal.DistributionMessage.scheduleAction(DistributionMessage.java:382)
>       at 
> org.apache.geode.distributed.internal.DistributionMessage$1.run(DistributionMessage.java:448)
>       at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>       at 
> org.apache.geode.distributed.internal.DistributionManager.runUntilShutdown(DistributionManager.java:1099)
>       at 
> org.apache.geode.distributed.internal.DistributionManager.access$000(DistributionManager.java:108)
>       at 
> org.apache.geode.distributed.internal.DistributionManager$9$1.run(DistributionManager.java:970)
>       at java.lang.Thread.run(Thread.java:745)
> {noformat}
> PDXUtils.convertPDX does this:
> {noformat}
> if (getDeserializedObject && obj instanceof VMCachedDeserializable) {
>   obj = ((VMCachedDeserializable) obj).getDeserializedForReading();
> {noformat}
> Changing the instanceof check to check for CachedDeserializable instead fixes 
> the issue:
> {noformat}
> if (getDeserializedObject && obj instanceof CachedDeserializable) {
>   obj = ((CachedDeserializable) obj).getDeserializedForReading();
> {noformat}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to