[ 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)