[
https://issues.apache.org/jira/browse/CALCITE-2484?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16589959#comment-16589959
]
Vladimir Sitnikov commented on CALCITE-2484:
--------------------------------------------
[~TsReaper], DefaultSqlTestFactory does not exists anymore. Could you please
re-check if the issue is still present?
> Dynamic table tests give wrong results when running tests concurrently.
> -----------------------------------------------------------------------
>
> Key: CALCITE-2484
> URL: https://issues.apache.org/jira/browse/CALCITE-2484
> Project: Calcite
> Issue Type: Bug
> Components: core
> Reporter: Caizhi Weng
> Assignee: Julian Hyde
> Priority: Major
>
> When running tests on the cluster of my company, I always experience the
> failure of the test {{SqlValidatorTest::testDynamicStar2()}}. After
> investigation, I discover that it is triggered by the cache in
> {{DefaultSqlTestFactory}} introduced in [this
> commit|https://github.com/apache/calcite/commit/39c22f0c8b7b5b46a152f432e8708ce73ace1ef7].
> The failure of the test case is because:
> # In the current implementation, when a test class wants to use a
> {{DefaultSqlTestFactory}}, it will use {{DefaultSqlTestFactory.INSTANCE}}, so
> every class using this factory actually shares the same factory instance.
> # {{cache}} is a private member of {{DefaultSqlTestFactory}}, so every class
> actually shares the same {{cache}}.
> # The key of {{cache}} is of {{SqlTestFactory}} type. As every class shares
> the same factory instance, every class actually shares the same cache key.
> # As catalog reader is stored in cache, root schema is stored in catalog
> reader, table is stored in root schema, and row type is stored in table,
> every class actually has access to the same row type instance.
> # As dynamic table will modify row type if a column name it wants to use
> doesn't exist, two test cases running concurrently and using the same table
> name may read and modify the same row type instance, causing the result of
> the test to be incorrect, thus the failure of the test.
> What we need to do is to remove {{DefaultSqlTestFactory.INSTANCE}}, and let
> every test class use a new instance of the factory, so that we can solve the
> concurrent modification problem.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)