Hello.

I did a scan query on a table which has 8w records and tried to go through
all records in the result set but got following exception:

[13:53:31,523][SEVERE][client-connector-#77][JdbcRequestHandler] Failed to
fetch SQL query result [reqId=0, req=JdbcQueryFetchRequest
[queryId=38106237, pageSize=1024]]
class org.apache.ignite.internal.processors.query.IgniteSQLException: The
object is already closed [90007-195]
        at
org.apache.ignite.internal.processors.query.h2.H2ResultSetIterator.fetchNext(H2ResultSetIterator.java:136)
        at
org.apache.ignite.internal.processors.query.h2.H2ResultSetIterator.onHasNext(H2ResultSetIterator.java:142)
        at
org.apache.ignite.internal.util.GridCloseableIteratorAdapter.hasNextX(GridCloseableIteratorAdapter.java:53)
        at
org.apache.ignite.internal.util.lang.GridIteratorAdapter.hasNext(GridIteratorAdapter.java:45)
        at
org.apache.ignite.internal.processors.query.GridQueryCacheObjectsIterator.hasNext(GridQueryCacheObjectsIterator.java:61)
        at
org.apache.ignite.internal.processors.odbc.jdbc.JdbcQueryCursor.fetchRows(JdbcQueryCursor.java:72)
        at
org.apache.ignite.internal.processors.odbc.jdbc.JdbcRequestHandler.fetchQuery(JdbcRequestHandler.java:587)
        at
org.apache.ignite.internal.processors.odbc.jdbc.JdbcRequestHandler.handle(JdbcRequestHandler.java:206)
        at
org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:160)
        at
org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:44)
        at
org.apache.ignite.internal.util.nio.GridNioFilterChain$TailFilter.onMessageReceived(GridNioFilterChain.java:279)
        at
org.apache.ignite.internal.util.nio.GridNioFilterAdapter.proceedMessageReceived(GridNioFilterAdapter.java:109)
        at
org.apache.ignite.internal.util.nio.GridNioAsyncNotifyFilter$3.body(GridNioAsyncNotifyFilter.java:97)
        at
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110)
        at
org.apache.ignite.internal.util.worker.GridWorkerPool$1.run(GridWorkerPool.java:70)
        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)
Caused by: org.h2.jdbc.JdbcSQLException: The object is already closed
[90007-195]
        at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
        at org.h2.message.DbException.get(DbException.java:179)
        at org.h2.message.DbException.get(DbException.java:155)
        at org.h2.message.DbException.get(DbException.java:144)
        at org.h2.jdbc.JdbcResultSet.checkClosed(JdbcResultSet.java:3208)
        at org.h2.jdbc.JdbcResultSet.next(JdbcResultSet.java:130)
        at
org.apache.ignite.internal.processors.query.h2.H2ResultSetIterator.fetchNext(H2ResultSetIterator.java:110)
        ... 17 more

My ignite version is 2.6 and I only started one node.I did not call any
close methods. Why ignite closed my result set?

Here is my test code:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.util.Properties;

public class StatementTest {

        private static Connection conn;
        
        
        public static void main(String[] args) throws Exception {

                long t1 = System.currentTimeMillis();
                try {
                        initialize();
                        
                        String selectSql = "SELECT * FROM table_6932_r_1_1";
                        testQuery(selectSql);
                } catch (Exception e) {
                        throw e;
                } finally {
                        if (conn != null)
                                conn.close();
                }
                long t2 = System.currentTimeMillis();
                System.out.println("operation costs " + (t2 - t1) + " ms");
        }

        public static void close() throws Exception {
                conn.close();
        }
        
        public static void initialize() throws Exception {
                Class.forName("org.apache.ignite.IgniteJdbcThinDriver");
                String dbUrl =
"jdbc:ignite:thin://ip:port;lazy=true;skipReducerOnUpdate=true;replicatedOnly=true";
                conn = DriverManager.getConnection(dbUrl, props);
        }
        
        public static void testUpdate(String sql) throws Exception {
                try (Statement stmt = conn.createStatement()) {
                        stmt.setQueryTimeout(10);
                        stmt.executeUpdate(sql);
                }
        }
        
        public static void testQuery(String sql) throws Exception {
                long startTime=System.currentTimeMillis();
                try (Statement stmt = conn.createStatement()) {
                        //stmt.setQueryTimeout(10);
                        try (ResultSet rs = stmt.executeQuery(sql)) {
                                
                                ResultSetMetaData rsmd = rs.getMetaData();
                                int colCount = rsmd.getColumnCount();
                                int count = 1;
                                try{
                                        while (rs.next()) {
                                                //Thread.sleep(10);
                                                
                                                for (int i = 1; i <= colCount; 
i++) {
                                                        
System.out.print(rsmd.getColumnName(i) + ":" + rs.getObject(i) + "
");
                                                }
                                                System.out.println(count);
                                                count++;
                                        }
                                }catch(Exception e){
                                        
System.out.println(System.currentTimeMillis()-startTime));
                                        System.out.println(rs.isClosed());
                                        System.out.println(stmt.isClosed());
                                        System.out.println(conn.isClosed());
                                }
                                
                        }
                }
        }
}



--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/

Reply via email to