Barry Oglesby created GEODE-2124:
------------------------------------
Summary: 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
Reporter: Barry Oglesby
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)