[ https://issues.apache.org/jira/browse/IGNITE-19275?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Pavel Pereslegin updated IGNITE-19275: -------------------------------------- Labels: ignite-3 (was: ) > 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 > Priority: Critical > Labels: ignite-3 > 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)