[ 
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)

Reply via email to