Igor created IGNITE-19275: ----------------------------- Summary: Creation of big amount of tables throws exception Key: IGNITE-19275 URL: https://issues.apache.org/jira/browse/IGNITE-19275 Project: Ignite Issue Type: Bug Components: general Affects Versions: 3.0 Reporter: Igor Attachments: image-2023-04-11-16-11-09-934.png, node_0.log.zip, node_1.log.zip
h1. *Steps:* # Sart 2 nodes # Init cluster # Connect to cluster via jdbc # Create table with 5 columns. # Wait 30 ms. # Repeat points 4-5 1000 times. h1. *Expected behavior:* # Creation time is constant. # Tables are created. h1. *Actual behavior:* # Creation time is increasing # The exception is thrown| after 200+ tables are created h2. *Details:* h3. Creation time graph: !image-2023-04-11-16-11-09-934.png|width=522,height=323! h3. Exceptions: # From client: {code:java} Exception in thread "main" java.sql.SQLException: Exception while executing query [query=CREATE TABLE table_239(id INT PRIMARY KEY, column_1 VARCHAR, column_2 VARCHAR, column_3 VARCHAR, column_4 VARCHAR)]. Error message:IGN-CMN-65535 TraceId:7299edda-2a88-4448-ba6d-366fca88cfd4 at org.apache.ignite.internal.jdbc.proto.IgniteQueryErrorCode.createJdbcSqlException(IgniteQueryErrorCode.java:57) at org.apache.ignite.internal.jdbc.JdbcStatement.execute0(JdbcStatement.java:148) at org.apache.ignite.internal.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:177) at lunigorn.ignite3test.Test.main(Test.java:18) {code} 2. From server logs: {code:java} 2023-04-11 15:13:49:890 +0200 [WARNING][%node_1%Raft-Group-Client-5][DistributedConfigurationStorage] Meta storage listener issue org.apache.ignite.lang.IgniteInternalException: IGN-SQL-32 TraceId:d3484efb-2ca6-4098-8c17-30a878c0801e Couldn't evaluate sql schemas for causality token: 722 at org.apache.ignite.internal.sql.engine.schema.SqlSchemaManagerImpl.lambda$new$1(SqlSchemaManagerImpl.java:131) at org.apache.ignite.internal.causality.BaseVersionedValue.lambda$notifyCompletionListeners$7(BaseVersionedValue.java:331) {code} *The nodes logs are in attachment.* h3. The code to reproduce (or use [gradle project|https://github.com/Lunigorn/ignite3test/tree/tables-capacity-test]): {code:java} package lunigorn.ignite3test; import java.sql.*; public class Test { private static final String DB_URL = "jdbc:ignite:thin://127.0.1.1:10800"; private static final int COLUMNS_COUNT = 5; private static final int TABLES_COUNT = 1000; private static final int SLEEP = 30; public static void main(String[] args) throws SQLException { System.out.println("Test started"); try (Connection connection = DriverManager.getConnection(DB_URL); Statement statement = connection.createStatement()){ System.out.println("Connection created"); for (int i = 0; i < TABLES_COUNT; i++) { String createTableQuery = createTableQuery("table_" + i, COLUMNS_COUNT); long timestampBefore = System.currentTimeMillis(); statement.executeUpdate(createTableQuery); long timestampAfter = System.currentTimeMillis(); System.out.println("Create table " + i + " took " + (timestampAfter - timestampBefore) + " ms"); if (i % 50 == 0){ int tablesCount = findTablesCount(connection); if (tablesCount != i+1){ throw new IllegalStateException("Expected " + (i+1) + " tables in cluster, but was " + tablesCount); } System.out.println("Tables count in cluster: " + tablesCount); } sleep(); } } } public static String createTableQuery(String tableName, int columnsAmount){ StringBuilder sb = new StringBuilder(); sb.append("CREATE TABLE ").append(tableName).append("("); for (int i = 0; i < columnsAmount; i++) { if (i == 0){ sb.append("id INT PRIMARY KEY"); } else { sb.append("column_").append(i).append(" VARCHAR"); } if (i != columnsAmount - 1){ sb.append(", "); } } sb.append(")"); return sb.toString(); } public static int findTablesCount(Connection connection) throws SQLException { DatabaseMetaData md = connection.getMetaData(); String catalog = connection.getCatalog(); ResultSet table_rs = md.getTables(catalog, null, null, new String[]{"TABLE"}); int count = 0; while (table_rs.next()){ count++; } return count; } public static void sleep(){ try { Thread.sleep(SLEEP); } catch (InterruptedException ignored) { } } }{code} -- This message was sent by Atlassian Jira (v8.20.10#820010)