[ 
https://issues.apache.org/jira/browse/CALCITE-2484?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16596116#comment-16596116
 ] 

Vladimir Sitnikov edited comment on CALCITE-2484 at 8/29/18 9:34 AM:
---------------------------------------------------------------------

This seems to be relevant as well (macOs + 
https://github.com/apache/calcite/pull/807 ):
{noformat}java.lang.IllegalArgumentException
        at 
com.google.common.base.Preconditions.checkArgument(Preconditions.java:108)
        at 
com.google.common.collect.ImmutableSortedSet.subSet(ImmutableSortedSet.java:607)
        at 
com.google.common.collect.ImmutableSortedSet.subSet(ImmutableSortedSet.java:57)
        at org.apache.calcite.util.NameHelper.lambda$set$2(NameHelper.java:105)
        at 
org.apache.calcite.util.NameHelper.applyFloorCeiling(NameHelper.java:84)
        at org.apache.calcite.util.NameHelper.set(NameHelper.java:102)
        at org.apache.calcite.util.NameSet.range(NameSet.java:93)
        at 
org.apache.calcite.jdbc.CachingCalciteSchema.getImplicitType(CachingCalciteSchema.java:149)
        at org.apache.calcite.jdbc.CalciteSchema.getType(CalciteSchema.java:371)
        at 
org.apache.calcite.sql.validate.SqlValidatorUtil.getTypeEntry(SqlValidatorUtil.java:975)
        at 
org.apache.calcite.prepare.CalciteCatalogReader.getNamedType(CalciteCatalogReader.java:172)
        at 
org.apache.calcite.test.catalog.MockCatalogReaderSimple.getNamedType(MockCatalogReaderSimple.java:65)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.getValidatedNodeTypeIfKnown(SqlValidatorImpl.java:1571)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.expandStar(SqlValidatorImpl.java:347)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl$OrderExpressionExpander.nthSelectItem(SqlValidatorImpl.java:5730)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl$OrderExpressionExpander.visit(SqlValidatorImpl.java:5756)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl$OrderExpressionExpander.visit(SqlValidatorImpl.java:5679)
        at org.apache.calcite.sql.SqlIdentifier.accept(SqlIdentifier.java:334)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl$OrderExpressionExpander.go(SqlValidatorImpl.java:5692)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.expandOrderExpr(SqlValidatorImpl.java:3856)
        at 
org.apache.calcite.sql.validate.OrderByScope.validateExpr(OrderByScope.java:122)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.validateExpr(SqlValidatorImpl.java:4094)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.validateOrderItem(SqlValidatorImpl.java:3851)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.validateOrderList(SqlValidatorImpl.java:3819)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelect(SqlValidatorImpl.java:3305)
        at 
org.apache.calcite.sql.validate.SelectNamespace.validateImpl(SelectNamespace.java:60)
        at 
org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:84)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:969)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.validateQuery(SqlValidatorImpl.java:945)
        at org.apache.calcite.sql.SqlSelect.validate(SqlSelect.java:225)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.validateScopedExpression(SqlValidatorImpl.java:920)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.validate(SqlValidatorImpl.java:628)
        at 
org.apache.calcite.sql.test.SqlTesterImpl.assertExceptionIsThrown(SqlTesterImpl.java:130)
        at 
org.apache.calcite.test.SqlValidatorTestCase$Sql.ok(SqlValidatorTestCase.java:591)
        at 
org.apache.calcite.test.SqlValidatorTest.testOrderByColumn(SqlValidatorTest.java:4574)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at 
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
        at 
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
        at 
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
        at 
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
        at 
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
        at 
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
        at 
org.apache.maven.surefire.junitcore.pc.Scheduler$1.run(Scheduler.java:410)
        at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
{noformat}


was (Author: vladimirsitnikov):
This seems to be relevant as well (macOs + 
https://github.com/apache/calcite/pull/807):
{noformat}java.lang.IllegalArgumentException
        at 
com.google.common.base.Preconditions.checkArgument(Preconditions.java:108)
        at 
com.google.common.collect.ImmutableSortedSet.subSet(ImmutableSortedSet.java:607)
        at 
com.google.common.collect.ImmutableSortedSet.subSet(ImmutableSortedSet.java:57)
        at org.apache.calcite.util.NameHelper.lambda$set$2(NameHelper.java:105)
        at 
org.apache.calcite.util.NameHelper.applyFloorCeiling(NameHelper.java:84)
        at org.apache.calcite.util.NameHelper.set(NameHelper.java:102)
        at org.apache.calcite.util.NameSet.range(NameSet.java:93)
        at 
org.apache.calcite.jdbc.CachingCalciteSchema.getImplicitType(CachingCalciteSchema.java:149)
        at org.apache.calcite.jdbc.CalciteSchema.getType(CalciteSchema.java:371)
        at 
org.apache.calcite.sql.validate.SqlValidatorUtil.getTypeEntry(SqlValidatorUtil.java:975)
        at 
org.apache.calcite.prepare.CalciteCatalogReader.getNamedType(CalciteCatalogReader.java:172)
        at 
org.apache.calcite.test.catalog.MockCatalogReaderSimple.getNamedType(MockCatalogReaderSimple.java:65)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.getValidatedNodeTypeIfKnown(SqlValidatorImpl.java:1571)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.expandStar(SqlValidatorImpl.java:347)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl$OrderExpressionExpander.nthSelectItem(SqlValidatorImpl.java:5730)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl$OrderExpressionExpander.visit(SqlValidatorImpl.java:5756)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl$OrderExpressionExpander.visit(SqlValidatorImpl.java:5679)
        at org.apache.calcite.sql.SqlIdentifier.accept(SqlIdentifier.java:334)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl$OrderExpressionExpander.go(SqlValidatorImpl.java:5692)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.expandOrderExpr(SqlValidatorImpl.java:3856)
        at 
org.apache.calcite.sql.validate.OrderByScope.validateExpr(OrderByScope.java:122)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.validateExpr(SqlValidatorImpl.java:4094)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.validateOrderItem(SqlValidatorImpl.java:3851)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.validateOrderList(SqlValidatorImpl.java:3819)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelect(SqlValidatorImpl.java:3305)
        at 
org.apache.calcite.sql.validate.SelectNamespace.validateImpl(SelectNamespace.java:60)
        at 
org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:84)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:969)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.validateQuery(SqlValidatorImpl.java:945)
        at org.apache.calcite.sql.SqlSelect.validate(SqlSelect.java:225)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.validateScopedExpression(SqlValidatorImpl.java:920)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.validate(SqlValidatorImpl.java:628)
        at 
org.apache.calcite.sql.test.SqlTesterImpl.assertExceptionIsThrown(SqlTesterImpl.java:130)
        at 
org.apache.calcite.test.SqlValidatorTestCase$Sql.ok(SqlValidatorTestCase.java:591)
        at 
org.apache.calcite.test.SqlValidatorTest.testOrderByColumn(SqlValidatorTest.java:4574)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at 
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
        at 
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
        at 
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
        at 
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
        at 
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
        at 
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
        at 
org.apache.maven.surefire.junitcore.pc.Scheduler$1.run(Scheduler.java:410)
        at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
{noformat}

> 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
>    Affects Versions: 1.17.0
>            Reporter: Caizhi Weng
>            Assignee: Julian Hyde
>            Priority: Major
>
> h2. What's happening
> When two dynamic table tests referencing to the same table name run 
> concurrently, the results of the tests will be incorrect, causing the tests 
> to fail.
> h2. How to reproduce this bug
> As the condition to trigger this bug is strict (two dynamic table tests must 
> reference the same table name, and they must run concurrently), it's hard to 
> reproduce this bug in the current test set.
> I construct two mock test classes to reproduce this bug stably. The two test 
> classes are the same except for their names. One of the test class is listed 
> as follows:
> {code:java}
> public class MockSqlValidatorTest1 extends SqlValidatorTestCase {
>   // Member definition omitted.
>   @Test
>   public void testDynamicStar1() {
>     final String sql = "select newid from (\n"
>         + "  select *, NATION.N_NATION + 100 as newid\n"
>         + "  from \"DYNAMIC\".NATION, \"DYNAMIC\".CUSTOMER)";
>     sql(sql).type("RecordType(ANY NEWID) NOT NULL");
>   }
>   @Test
>   public void testDynamicStar2() {
>     final String sql = "select newid from (\n"
>         + "  select *, NATION.N_NATION + 100 as newid\n"
>         + "  from \"DYNAMIC\".NATION, \"DYNAMIC\".CUSTOMER)";
>     sql(sql).type("RecordType(ANY NEWID) NOT NULL");
>   }
>   // 296 more test cases
>   @Test
>   public void testDynamicStar299() {
>     final String sql = "select newid from (\n"
>         + "  select *, NATION.N_NATION + 100 as newid\n"
>         + "  from \"DYNAMIC\".NATION, \"DYNAMIC\".CUSTOMER)";
>     sql(sql).type("RecordType(ANY NEWID) NOT NULL");
>   }
>   @Test
>   public void testDynamicStar300() {
>     final String sql = "select newid from (\n"
>         + "  select *, NATION.N_NATION + 100 as newid\n"
>         + "  from \"DYNAMIC\".NATION, \"DYNAMIC\".CUSTOMER)";
>     sql(sql).type("RecordType(ANY NEWID) NOT NULL");
>   }
> {code}
> You can check these two test classes 
> [here|https://paste.ubuntu.com/p/rcWYjMzMjf/] and 
> [here|https://paste.ubuntu.com/p/Tb2VTz74Xv/] so you can try them out.
> To reproduce this bug, run
> {code}
> mvn -T 4 -Dtest=MockSqlValidatorTest* test -pl core
> {code}
> to run these two test classes concurrently, the bug will occur.
> h2. Why is this happening
> # In the current implementation, when a test class wants to use a 
> {{SqlTestFactory}}, it will use {{SqlTestFactory.INSTANCE}}, so every class 
> using this factory actually shares the same factory instance.
> # {{catalogReader}} is a member of {{SqlTestFactory}}, so every class 
> actually shares the same {{catalogReader}}.
> # As 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 causing the failure of the test.
> h2. How to fix this bug
> What I've done in this commit is to remove {{SqlTestFactory.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)

Reply via email to