Details
-
Bug
-
Status: Open
-
Major
-
Resolution: Unresolved
-
2.8
-
None
-
None
Description
Ignite throws sql exception sometimes while do ddl actions concurrently.The exception looks like:
java.sql.SQLException: Schema change operation failed: Thread got
interrupted while trying to acquire table lock.
at
org.apache.ignite.internal.jdbc.thin.JdbcThinConnection.sendRequest(JdbcThinConnection.java:901)
at
org.apache.ignite.internal.jdbc.thin.JdbcThinStatement.execute0(JdbcThinStatement.java:231)
at
org.apache.ignite.internal.jdbc.thin.JdbcThinStatement.execute(JdbcThinStatement.java:559)
at
....
at java.lang.Thread.run(Thread.java:748)
Here is one reproduce case:
1.Start a ignite without persitence enabled.
2.Use two threads to do ddl operations concurrently.
3.Each ddl opertion contains create table and create indices sqls.Send these sqls to ignite in one statement.
4.Do ddl operations repeatly and then wait for luck.U can add a system.exit when u get the exception.
Here is my test code for u reference:
public class ConcurrentCreateTable {
private static Connection conn;
private static Connection conn1;
public static void main(String[] args) throws Exception {
initialize();
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try (Statement stmt = conn.createStatement())
catch (SQLException e)
{ e.printStackTrace(); } }
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
while (true)
catch (SQLException e) { e.printStackTrace(); }
}
}
}).start();
while (true)
}
private static void initialize() throws Exception
{ Class.forName(Config.IGNITE_DRIVER); final Properties props = new Properties(); conn = DriverManager.getConnection(Config.IGNITE_URL, props); conn1 = DriverManager.getConnection(Config.IGNITE_URL, props); }}