[ https://issues.apache.org/jira/browse/CALCITE-2146?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16338066#comment-16338066 ]
Julian Hyde commented on CALCITE-2146: -------------------------------------- You're not wrong. And it's a known issue, CALCITE-1681. Let's continue the discussion there. > Errant CyclicMetadataException in multithreaded context > ------------------------------------------------------- > > Key: CALCITE-2146 > URL: https://issues.apache.org/jira/browse/CALCITE-2146 > Project: Calcite > Issue Type: Bug > Components: core > Affects Versions: 1.15.0 > Reporter: Paul Jackson > Assignee: Julian Hyde > Priority: Major > > The code that protects against cyclic metadata is not thread-safe. A typical > stack trace looks like: > {{Caused by: org.apache.calcite.rel.metadata.CyclicMetadataException}} > {{ at > org.apache.calcite.rel.metadata.CyclicMetadataException.<clinit>(CyclicMetadataException.java:28)}} > {{ at GeneratedMetadataHandler_Collation.collations(Unknown Source)}} > {{ at GeneratedMetadataHandler_Collation.collations_$(Unknown Source)}} > {{ at GeneratedMetadataHandler_Collation.collations(Unknown Source)}} > {{ at > org.apache.calcite.rel.metadata.RelMetadataQuery.collations(RelMetadataQuery.java:563)}} > {{ at > org.apache.calcite.rel.metadata.RelMdCollation.collations(RelMdCollation.java:117)}} > {{ at GeneratedMetadataHandler_Collation.collations_$(Unknown Source)}} > {{ at GeneratedMetadataHandler_Collation.collations(Unknown Source)}} > {{ at GeneratedMetadataHandler_Collation.collations_$(Unknown Source)}} > {{ at GeneratedMetadataHandler_Collation.collations(Unknown Source)}} > {{ at > org.apache.calcite.rel.metadata.RelMetadataQuery.collations(RelMetadataQuery.java:563)}} > {{ at > org.apache.calcite.rel.metadata.RelMdCollation.project(RelMdCollation.java:207)}} > {{ at > org.apache.calcite.rel.logical.LogicalProject$1.get(LogicalProject.java:117)}} > {{ at > org.apache.calcite.rel.logical.LogicalProject$1.get(LogicalProject.java:115)}} > {{ at org.apache.calcite.plan.RelTraitSet.replaceIfs(RelTraitSet.java:238)}} > {{ at > org.apache.calcite.rel.logical.LogicalProject.create(LogicalProject.java:113)}} > {{ at > org.apache.calcite.rel.logical.LogicalProject.create(LogicalProject.java:103)}} > {{ at > org.apache.calcite.rel.core.RelFactories$ProjectFactoryImpl.createProject(RelFactories.java:127)}} > {{ at org.apache.calcite.tools.RelBuilder.project(RelBuilder.java:1064)}} > Generally, the use case that causes this is one where we have a set of SQL > templates represented as RelNodes, which we use as a starting point for > queries. If different threads operate on the same RelNode, they may work on > the same cluster, and therefore the same RelMetadataQuery instance, which > contains a map instance that is used to detect Cyclic Metadata. -- This message was sent by Atlassian JIRA (v7.6.3#76005)