trino icon indicating copy to clipboard operation
trino copied to clipboard

SQL Error: Query failed: inputPositions is negative

Open iphyjon opened this issue 9 months ago • 4 comments

I encountered an error while executing a SQL query in Trino. The error message is as follows:

java.sql.SQLException: Query failed (#20240430_083808_16183_r9uem): inputPositions is negative at io.trino.jdbc.AbstractTrinoResultSet.resultsException(AbstractTrinoResultSet.java:1937) at io.trino.jdbc.TrinoResultSet.getColumns(TrinoResultSet.java:319) at io.trino.jdbc.TrinoResultSet.create(TrinoResultSet.java:62) at io.trino.jdbc.TrinoStatement.internalExecute(TrinoStatement.java:262) at io.trino.jdbc.TrinoStatement.execute(TrinoStatement.java:240) at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCStatementImpl.execute(JDBCStatementImpl.java:330) at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCStatementImpl.executeStatement(JDBCStatementImpl.java:131) at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.executeStatement(SQLQueryJob.java:601) at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.lambda$2(SQLQueryJob.java:504) at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:190) at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.executeSingleQuery(SQLQueryJob.java:511) at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.extractData(SQLQueryJob.java:963) at org.jkiss.dbeaver.ui.editors.sql.SQLEditor$QueryResultsContainer.readData(SQLEditor.java:4134) at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:123) at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:190) at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:121) at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5148) at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:114) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) Caused by: java.lang.IllegalArgumentException: inputPositions is negative at com.google.common.base.Preconditions.checkArgument(Preconditions.java:143) at io.trino.operator.OperatorStats.<init>(OperatorStats.java:165) at io.trino.operator.OperatorContext.getOperatorStats(OperatorContext.java:593) at io.trino.operator.OperatorContext.lambda$getNestedOperatorStats$1(OperatorContext.java:515) at java.base/java.util.Optional.orElseGet(Optional.java:364) at io.trino.operator.OperatorContext.getNestedOperatorStats(OperatorContext.java:515) at io.trino.operator.DriverContext.lambda$getOperatorStats$0(DriverContext.java:308) at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273) at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:1024) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) at io.trino.operator.DriverContext.getOperatorStats(DriverContext.java:310) at io.trino.operator.DriverContext.getDriverStats(DriverContext.java:332) at io.trino.operator.PipelineContext.getPipelineStats(PipelineContext.java:411) at com.google.common.collect.Iterators$6.transform(Iterators.java:829) at com.google.common.collect.TransformedIterator.next(TransformedIterator.java:52) at com.google.common.collect.ImmutableList.copyOf(ImmutableList.java:278) at com.google.common.collect.ImmutableList.copyOf(ImmutableList.java:239) at io.trino.operator.TaskContext.getTaskStats(TaskContext.java:450) at io.trino.execution.SqlTask.getTaskStats(SqlTask.java:409) at io.trino.execution.SqlTask.createTaskInfo(SqlTask.java:433) at io.trino.execution.SqlTask.getTaskInfo(SqlTask.java:274) at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133) at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1939) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) at io.trino.execution.SqlTaskManager.getAllTaskInfo(SqlTaskManager.java:377) at io.trino.connector.system.TaskSystemTable.cursor(TaskSystemTable.java:109) at io.trino.spi.connector.SystemTable.cursor(SystemTable.java:47) at io.trino.connector.system.SystemPageSourceProvider$1.cursor(SystemPageSourceProvider.java:140) at io.trino.plugin.base.MappedRecordSet.cursor(MappedRecordSet.java:53) at io.trino.spi.connector.RecordPageSource.<init>(RecordPageSource.java:37) at io.trino.connector.system.SystemPageSourceProvider.createPageSource(SystemPageSourceProvider.java:119) at io.trino.split.PageSourceManager.createPageSource(PageSourceManager.java:61) at io.trino.operator.TableScanOperator.getOutput(TableScanOperator.java:263) at io.trino.operator.Driver.processInternal(Driver.java:398) at io.trino.operator.Driver.lambda$process$8(Driver.java:301) at io.trino.operator.Driver.tryWithLock(Driver.java:704) at io.trino.operator.Driver.process(Driver.java:293) at io.trino.operator.Driver.processForDuration(Driver.java:264) at io.trino.execution.SqlTaskExecution$DriverSplitRunner.processFor(SqlTaskExecution.java:887) at io.trino.execution.executor.timesharing.PrioritizedSplitRunner.process(PrioritizedSplitRunner.java:187) at io.trino.execution.executor.timesharing.TimeSharingTaskExecutor$TaskRunner.run(TimeSharingTaskExecutor.java:565) at io.trino.$gen.Trino_435____20240430_054533_2.run(Unknown Source) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) at java.base/java.lang.Thread.run(Thread.java:1583)

Error Details: Query: SELECT * FROM SYSTEM.runtime.tasks Trino version: 435

Context: I am attempting to retrieve information about currently executing tasks in my Trino cluster using the SYSTEM.runtime.tasks system table. However, the query failed with the mentioned error message. This error seems to be related to inputPositions being negative, but I'm unsure about the root cause.

iphyjon avatar Apr 30 '24 09:04 iphyjon

I think that this is an overflow when merging OperatorStats. PTAL @sopel39 @lukasz-stec:

inputPositions is negative at com.google.common.base.Preconditions.checkArgument(Preconditions.java:143) 
at io.trino.operator.OperatorStats.<init>(OperatorStats.java:165) 
at io.trino.operator.OperatorContext.getOperatorStats(OperatorContext.java:593) 
at io.trino.operator.OperatorContext.lambda$getNestedOperatorStats$1(OperatorContext.java:515) 
at java.base/java.util.Optional.orElseGet(Optional.java:364) 
at io.trino.operator.OperatorContext.getNestedOperatorStats(OperatorContext.java:515) 
at io.trino.operator.DriverContext.lambda$getOperatorStats$0(DriverContext.java:308) 
at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273) 
at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:1024) 
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) 
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) 
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) 
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) 
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) 
at io.trino.operator.DriverContext.getOperatorStats(DriverContext.java:310) 
at io.trino.operator.DriverContext.getDriverStats(DriverContext.java:332) 
at io.trino.operator.PipelineContext.getPipelineStats(PipelineContext.java:411) 
at com.google.common.collect.Iterators$6.transform(Iterators.java:829) 
at com.google.common.collect.TransformedIterator.next(TransformedIterator.java:52) 
at com.google.common.collect.ImmutableList.copyOf(ImmutableList.java:278) 
at com.google.common.collect.ImmutableList.copyOf(ImmutableList.java:239) 
at io.trino.operator.TaskContext.getTaskStats(TaskContext.java:450)

wendigo avatar Apr 30 '24 09:04 wendigo

I think that this is an overflow when merging OperatorStats

That is unlikely given the positions are kept in long.

lukasz-stec avatar Apr 30 '24 09:04 lukasz-stec

@lukasz-stec is inputPositions == 0 a valid value?

wendigo avatar Apr 30 '24 21:04 wendigo

@lukasz-stec is inputPositions == 0 a valid value?

Yes it is

lukasz-stec avatar Apr 30 '24 21:04 lukasz-stec

@lukasz-stec Do you have any idea why I am getting this error anytime I want to query the SYSTEM.runtime.tasks? Any info would be helpful. Thanks

iphyjon avatar May 06 '24 07:05 iphyjon

@lukasz-stec Do you have any idea why I am getting this error anytime I want to query the SYSTEM.runtime.tasks?

Does it happen also on empty cluster without running queries?

sopel39 avatar May 07 '24 09:05 sopel39

@iphyjon I've created https://github.com/trinodb/trino/pull/21835. You might want to try your queries with it so that we could trace the issue better

sopel39 avatar May 07 '24 11:05 sopel39