You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Vladimir Sitnikov (JIRA)" <ji...@apache.org> on 2018/09/16 11:45:00 UTC
[jira] [Commented] (CALCITE-1894) CsvTest.testCsvStream failing
often
[ https://issues.apache.org/jira/browse/CALCITE-1894?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16616688#comment-16616688 ]
Vladimir Sitnikov commented on CALCITE-1894:
--------------------------------------------
The issue is not a timeout.
The issue is CsvTest.testCsvStream does not perform what it is intended to do.
1) CsvStreamReader constructor has Thread.sleep. I don't think it is acceptable: https://github.com/apache/calcite/blob/c12e37d41a9d81b1303a345bad5067e1518d6c7d/example/csv/src/main/java/org/apache/calcite/adapter/csv/CsvStreamReader.java#L88
2) Linq4j.EnumeratorIterator calls {{moveNext}} in the constructor, which effectively fetches the first element.
It causes early fetch of the results.
https://github.com/apache/calcite/blob/d59b639d27da704f00eff616324a2c04aa06f84c/linq4j/src/main/java/org/apache/calcite/linq4j/Linq4j.java#L669-L676
I suggest to use something like
{code:java} Boolean hasNext;
EnumeratorIterator(Enumerator<T> enumerator) {
this.enumerator = enumerator;
}
public boolean hasNext() {
if (hasNext == null) {
hasNext = enumerator.moveNext();
}
return hasNext;
}
public T next() {
if (hasNext == null) {
enumerator.moveNext();
}
T t = enumerator.current();
hasNext = enumerator.moveNext();
return t;
}
{code}
If I correct the above issues, the following exception appears:
{noformat}java.lang.NumberFormatException: For input string: "DEPTNO:int"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.base/java.lang.Integer.parseInt(Integer.java:652)
at java.base/java.lang.Integer.parseInt(Integer.java:770)
at org.apache.calcite.adapter.csv.CsvEnumerator$RowConverter.convert(CsvEnumerator.java:273)
at org.apache.calcite.adapter.csv.CsvEnumerator$ArrayRowConverter.convertStreamRow(CsvEnumerator.java:367)
at org.apache.calcite.adapter.csv.CsvEnumerator$ArrayRowConverter.convertRow(CsvEnumerator.java:347)
at org.apache.calcite.adapter.csv.CsvEnumerator$ArrayRowConverter.convertRow(CsvEnumerator.java:327)
at org.apache.calcite.adapter.csv.CsvEnumerator.moveNext(CsvEnumerator.java:214)
at org.apache.calcite.linq4j.EnumerableDefaults$11$1.moveNext(EnumerableDefaults.java:1875)
at org.apache.calcite.linq4j.EnumerableDefaults$11$1.moveNext(EnumerableDefaults.java:1875)
at org.apache.calcite.linq4j.TransformedEnumerator.moveNext(TransformedEnumerator.java:35)
at org.apache.calcite.linq4j.Linq4j$EnumeratorIterator.hasNext(Linq4j.java:680)
at org.apache.calcite.avatica.util.IteratorCursor.next(IteratorCursor.java:45)
at org.apache.calcite.avatica.AvaticaResultSet.next(AvaticaResultSet.java:217)
at org.apache.calcite.test.CsvTest.testCsvStream(CsvTest.java:903)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
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.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298)
at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.lang.Thread.run(Thread.java:844)
{noformat}
It looks like it does not detect CSV header, and it tries to parse the first row as data.
I've no idea how CSV identifies if it should throw-away the first line or not, however the above exception does look like a true issue.
> CsvTest.testCsvStream failing often
> -----------------------------------
>
> Key: CALCITE-1894
> URL: https://issues.apache.org/jira/browse/CALCITE-1894
> Project: Calcite
> Issue Type: Bug
> Reporter: Rajeshbabu Chintaguntla
> Assignee: Julian Hyde
> Priority: Major
>
> CsvTest.testCsvStream is timing out and failing often.
> This is the build failed because of this test.
> https://travis-ci.org/apache/calcite/jobs/253794426
> {noformat}
> <<< FAILURE! - in org.apache.calcite.test.CsvTest
> testCsvStream(org.apache.calcite.test.CsvTest) Time elapsed: 10.044 sec <<< ERROR!
> org.junit.runners.model.TestTimedOutException: test timed out after 10000 milliseconds
> at org.apache.calcite.test.CsvTest.testCsvStream(CsvTest.java:729)
> {noformat}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)