Tianshi Zhu created FLINK-20986:
-----------------------------------

             Summary: GenericTypeInfo equality issue
                 Key: FLINK-20986
                 URL: https://issues.apache.org/jira/browse/FLINK-20986
             Project: Flink
          Issue Type: Bug
    Affects Versions: 1.12.0
            Reporter: Tianshi Zhu


When trying to use Flink REST api to run a job that uses Flink table api with 
blink planner, we encountered an issue about `Incompatible types of expression 
and result type.` from 
org.apache.flink.table.planner.codegen.ExprCodeGenerator$$anonfun$generateResultExpression$1.apply(ExprCodeGenerator.scala:311).
 This issue only happens after the first request has been handled successfully.

 

After digging, we found that there are two static caches used inside calcite's

RelDataTypeFactoryImpl (

https://github.com/apache/calcite/blob/d9a81b88ad561e7e4cedae93e805e0d7a53a7f1a/core/src/main/java/org/apache/calcite/rel/type/RelDataTypeFactoryImpl.java#L352-L376

), which will remember the types they have seen. The `canonize` method is 
called from FlinkTypeFactory 

https://github.com/apache/flink/blob/89f9dcd70dc3a1433055e17775b2b2a2c796ca94/flink-table/flink-table-planner-blink/src/main/scala/org/apache/flink/table/planner/calcite/FlinkTypeFactory.scala#L292

 

This causes problem for us because in our experience, we have seen 
GenericTypeInfo<T> containing different Class<T> instances in two different 
REST requests, and they do not equal, because 
[https://github.com/apache/flink/blob/89f9dcd70dc3a1433055e17775b2b2a2c796ca94/flink-core/src/main/java/org/apache/flink/api/java/typeutils/GenericTypeInfo.java#L124]
 is using object equality. After `canonize`, the GenericTypeInfo for other REST 
requests would be changed to the GenericTypeInfo used for the first REST 
request, which is cached in RelDataTypeFactoryImpl. And this leads to the 
incompatible type error mentioned above.

 

I want to propose using class name for equality comparison inside 
GenericTypeInfo, and change hashCode method accordingly.

 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to