trinodb / trino

Official repository of Trino, the distributed SQL query engine for big data, formerly known as PrestoSQL (https://trino.io)
https://trino.io
Apache License 2.0
10.25k stars 2.95k forks source link

SQL Error: Query failed: inputPositions is negative #21760

Open iphyjon opened 5 months ago

iphyjon commented 5 months ago

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.

wendigo commented 5 months ago

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)
lukasz-stec commented 5 months ago

I think that this is an overflow when merging OperatorStats

That is unlikely given the positions are kept in long.

wendigo commented 5 months ago

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

lukasz-stec commented 5 months ago

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

Yes it is

iphyjon commented 4 months ago

@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

sopel39 commented 4 months ago

@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 commented 4 months ago

@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