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

Danny Chen resolved CALCITE-3924.
---------------------------------
    Fix Version/s: 1.23.0
         Assignee: Danny Chen
       Resolution: Fixed

Fixed in 
[dfb842e|https://github.com/apache/calcite/commit/dfb842e55e1fa7037c8a731341010ed1c0cfb6f7],
 thanks for your PR, [~neoremind] !

> Fix flakey test to handle TIMESTAMP and TIMESTAMP(0) correctly
> --------------------------------------------------------------
>
>                 Key: CALCITE-3924
>                 URL: https://issues.apache.org/jira/browse/CALCITE-3924
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.22.0
>            Reporter: neoremind
>            Assignee: Danny Chen
>            Priority: Critical
>              Labels: pull-request-available
>             Fix For: 1.23.0
>
>         Attachments: common_first_error.log
>
>          Time Spent: 1h 10m
>  Remaining Estimate: 0h
>
> Currently, building is not stable, there are frequently flakey tests on 
> Linux(JDK 11) related with TIMESTAMP(0) vs TIMESTAMP.
> For example,
> [https://github.com/apache/calcite/runs/584340845]
> [https://github.com/apache/calcite/runs/576436249]
> [https://github.com/apache/calcite/runs/585695121]
> Below is first failure test of a consecutive failure tests from the three 
> builds:
>  _org.apache.calcite.test.SqlLimitsTest > testPrintLimits() (see attachment 
> log for detail)_
>  _The only diff is TIMESTAMP(0) vs TIMESTAMP_
>  
> The root cause is:
> In BasicSqlType, the value of `toString` result and instance member `digest` 
> might be different. For TIMESTAMP without precision (precision = -1), 
> toString returns TIMESTAMP and digest is TIMESTAMP(0), which conflicts with 
> real TIMESTAMP(0) with 0 as precision. 
> `Interner<RelDataType> DATATYPE_CACHE = Interners.newWeakInterner()` makes 
> sure SqlType is singleton between invocations, TIMESTAMP(0) might return 
> SqlType - TIMESTAMP without precision literally which is wrong. Because the 
> global cache uses weak reference, so the cache would usually invalidate after 
> Java GC, which mitigates the impact of the hidden bug. As for the specific 
> environment Linux JDK 11 situation, I could not give a reasonable explanation 
> yet, but I suppose the cause is clear.
> The fix is simple, making the digest of TIMESTAMP without precision 
> (precision = -1) as _TIMESTAMP_ instead of _TIMESTAMP(0)_ would solve the 
> problem. This could expand to all TIME and TIMESTAMP related sql types.



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

Reply via email to