You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@geode.apache.org by "Jason Huynh (JIRA)" <ji...@apache.org> on 2016/11/21 18:22:58 UTC

[jira] [Resolved] (GEODE-2124) Queries that invoke StructSet addAll fail with ClassCastException

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

Jason Huynh resolved GEODE-2124.
--------------------------------
       Resolution: Fixed
    Fix Version/s: 1.1.0-incubating

StructSet addAll will now call the overridden add method.  This prevents structImpls from being added to the backing datastructure and forces it to extract the field values (Object[]).

Iterating the struct set forces the Object[] back to structImpl only during iteration

> Queries that invoke StructSet addAll fail with ClassCastException
> -----------------------------------------------------------------
>
>                 Key: GEODE-2124
>                 URL: https://issues.apache.org/jira/browse/GEODE-2124
>             Project: Geode
>          Issue Type: Bug
>          Components: querying
>            Reporter: Barry Oglesby
>            Assignee: Jason Huynh
>             Fix For: 1.1.0-incubating
>
>         Attachments: Portfolio.java, Position.java
>
>
> A query like this fails with the exception below:
> {noformat}
> select distinct oP.ID, oP.status, oP.getType from /data oP where element(select distinct p.ID, p.status, p.getType from /data p where p.ID = oP.ID).status = 'inactive'
> {noformat}
> {noformat}
> Caused by: java.lang.ClassCastException: org.apache.geode.cache.query.internal.StructImpl cannot be cast to [Ljava.lang.Object;
> 	at org.apache.geode.cache.query.internal.StructSet$ObjectArrayHashingStrategy.hashCode(StructSet.java:70)
> 	at it.unimi.dsi.fastutil.objects.ObjectOpenCustomHashSet.add(ObjectOpenCustomHashSet.java:248)
> 	at it.unimi.dsi.fastutil.objects.AbstractObjectCollection.addAll(AbstractObjectCollection.java:71)
> 	at it.unimi.dsi.fastutil.objects.ObjectOpenCustomHashSet.addAll(ObjectOpenCustomHashSet.java:235)
> 	at org.apache.geode.cache.query.internal.StructSet.addAll(StructSet.java:248)
> 	at org.apache.geode.cache.query.internal.ResultsCollectionWrapper.addAll(ResultsCollectionWrapper.java:157)
> 	at org.apache.geode.cache.query.internal.Functions.element(Functions.java:103)
> 	at org.apache.geode.cache.query.internal.CompiledFunction.call(CompiledFunction.java:84)
> 	at org.apache.geode.cache.query.internal.CompiledFunction.evaluate(CompiledFunction.java:59)
> 	at org.apache.geode.cache.query.internal.CompiledPath.evaluate(CompiledPath.java:92)
> 	at org.apache.geode.cache.query.internal.CompiledComparison.evaluate(CompiledComparison.java:82)
> 	at org.apache.geode.cache.query.internal.CompiledSelect.doNestedIterations(CompiledSelect.java:787)
> 	at org.apache.geode.cache.query.internal.CompiledSelect.doNestedIterations(CompiledSelect.java:857)
> 	at org.apache.geode.cache.query.internal.CompiledSelect.doIterationEvaluate(CompiledSelect.java:715)
> 	at org.apache.geode.cache.query.internal.CompiledSelect.evaluate(CompiledSelect.java:553)
> 	at org.apache.geode.cache.query.internal.CompiledSelect.evaluate(CompiledSelect.java:57)
> 	at org.apache.geode.cache.query.internal.DefaultQuery.executeUsingContext(DefaultQuery.java:559)
> 	at org.apache.geode.internal.cache.PRQueryProcessor.executeQueryOnBuckets(PRQueryProcessor.java:367)
> 	at org.apache.geode.internal.cache.PRQueryProcessor.executeSequentially(PRQueryProcessor.java:331)
> 	at org.apache.geode.internal.cache.PRQueryProcessor.executeQuery(PRQueryProcessor.java:121)
> 	at org.apache.geode.internal.cache.PartitionedRegionQueryEvaluator.executeQueryOnLocalNode(PartitionedRegionQueryEvaluator.java:909)
> 	at org.apache.geode.internal.cache.PartitionedRegionQueryEvaluator.executeQueryOnRemoteAndLocalNodes(PartitionedRegionQueryEvaluator.java:327)
> 	at org.apache.geode.internal.cache.PartitionedRegionQueryEvaluator.queryBuckets(PartitionedRegionQueryEvaluator.java:445)
> 	at org.apache.geode.internal.cache.PartitionedRegion.doExecuteQuery(PartitionedRegion.java:1792)
> 	at org.apache.geode.internal.cache.PartitionedRegion.executeQuery(PartitionedRegion.java:1721)
> 	at org.apache.geode.cache.query.internal.DefaultQuery.execute(DefaultQuery.java:342)
> 	at org.apache.geode.cache.query.internal.DefaultQuery.execute(DefaultQuery.java:300)
> 	at org.apache.geode.internal.cache.tier.sockets.BaseCommandQuery.processQueryUsingParams(BaseCommandQuery.java:121)
> 	at org.apache.geode.internal.cache.tier.sockets.BaseCommandQuery.processQuery(BaseCommandQuery.java:65)
> 	at org.apache.geode.internal.cache.tier.sockets.command.Query.cmdExecute(Query.java:92)
> 	at org.apache.geode.internal.cache.tier.sockets.BaseCommand.execute(BaseCommand.java:141)
> 	at org.apache.geode.internal.cache.tier.sockets.ServerConnection.doNormalMsg(ServerConnection.java:777)
> 	at org.apache.geode.internal.cache.tier.sockets.ServerConnection.doOneMessage(ServerConnection.java:905)
> 	at org.apache.geode.internal.cache.tier.sockets.ServerConnection.run(ServerConnection.java:1161)
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
> 	at org.apache.geode.internal.cache.tier.sockets.AcceptorImpl$1$1.run(AcceptorImpl.java:519)
> 	at java.lang.Thread.run(Thread.java:745)
> {noformat}
> The Collection being passed into the addAll method are the same in Geode and GemFire 8.x:
> Geode:
> {noformat}
> c=[struct(ID:648,status:inactive,getType:type1)]; class=class java.util.HashSet
>   o=struct(ID:648,status:inactive,getType:type1); class=class org.apache.geode.cache.query.internal.StructImpl
> {noformat}
> GemFire 8x:
> {noformat}
> c=[struct(ID:562,status:inactive,getType:type1)]; class=class java.util.HashSet
>   o=struct(ID:562,status:inactive,getType:type1); class=class com.gemstone.gemfire.cache.query.internal.StructImpl
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)