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/