You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Denis Chudov (Jira)" <ji...@apache.org> on 2023/05/15 08:46:00 UTC

[jira] [Updated] (IGNITE-19275) Creation of big amount of tables throws exception

     [ https://issues.apache.org/jira/browse/IGNITE-19275?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Denis Chudov updated IGNITE-19275:
----------------------------------
    Description: 
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:881 +0200 [WARNING][%node_1%Raft-Group-Client-5][SchemaManager] Error when processing CREATE event
java.util.concurrent.CompletionException: org.apache.ignite.lang.IgniteInternalException: IGN-SQL-32 TraceId:d3484efb-2ca6-4098-8c17-30a878c0801e Couldn't evaluate sql schemas for causality token: 722
    at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:331)
    at java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:346)
    at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:632)
    at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
    at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088)
    at org.apache.ignite.internal.causality.BaseVersionedValue.lambda$copyState$6(BaseVersionedValue.java:305)
    at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
    at java.base/java.util.concurrent.CompletableFuture.uniWhenCompleteStage(CompletableFuture.java:883)
    at java.base/java.util.concurrent.CompletableFuture.whenComplete(CompletableFuture.java:2251)
    at org.apache.ignite.internal.causality.BaseVersionedValue.copyState(BaseVersionedValue.java:303)
    at org.apache.ignite.internal.causality.BaseVersionedValue.complete(BaseVersionedValue.java:189)
    at org.apache.ignite.internal.causality.CompletableVersionedValue.completeExceptionally(CompletableVersionedValue.java:101)
    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)
    at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
    at java.base/java.util.concurrent.CompletableFuture.uniWhenCompleteStage(CompletableFuture.java:883)
    at java.base/java.util.concurrent.CompletableFuture.whenComplete(CompletableFuture.java:2251)
    at org.apache.ignite.internal.causality.BaseVersionedValue.notifyCompletionListeners(BaseVersionedValue.java:326)
    at org.apache.ignite.internal.causality.BaseVersionedValue.complete(BaseVersionedValue.java:198)
    at org.apache.ignite.internal.causality.IncrementalVersionedValue.lambda$completeInternal$1(IncrementalVersionedValue.java:236)
    at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
    at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
    at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
    at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088)
    at org.apache.ignite.internal.causality.BaseVersionedValue.lambda$copyState$6(BaseVersionedValue.java:305)
    at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
    at java.base/java.util.concurrent.CompletableFuture.uniWhenCompleteStage(CompletableFuture.java:883)
    at java.base/java.util.concurrent.CompletableFuture.whenComplete(CompletableFuture.java:2251)
    at org.apache.ignite.internal.causality.BaseVersionedValue.copyState(BaseVersionedValue.java:303)
    at org.apache.ignite.internal.causality.BaseVersionedValue.complete(BaseVersionedValue.java:189)
    at org.apache.ignite.internal.causality.IncrementalVersionedValue.lambda$completeInternal$1(IncrementalVersionedValue.java:236)
    at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
    at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
    at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
    at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088)
    at org.apache.ignite.internal.causality.BaseVersionedValue.lambda$copyState$6(BaseVersionedValue.java:305)
    at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
    at java.base/java.util.concurrent.CompletableFuture.uniWhenCompleteStage(CompletableFuture.java:883)
    at java.base/java.util.concurrent.CompletableFuture.whenComplete(CompletableFuture.java:2251)
    at org.apache.ignite.internal.causality.BaseVersionedValue.copyState(BaseVersionedValue.java:303)
    at org.apache.ignite.internal.causality.BaseVersionedValue.complete(BaseVersionedValue.java:189)
    at org.apache.ignite.internal.causality.IncrementalVersionedValue.lambda$completeInternal$1(IncrementalVersionedValue.java:236)
    at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
    at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
    at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
    at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088)
    at org.apache.ignite.internal.raft.RaftGroupServiceImpl.sendWithRetry(RaftGroupServiceImpl.java:511)
    at org.apache.ignite.internal.raft.RaftGroupServiceImpl.lambda$handleThrowable$40(RaftGroupServiceImpl.java:560)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: org.apache.ignite.lang.IgniteInternalException: IGN-SQL-32 TraceId:d3484efb-2ca6-4098-8c17-30a878c0801e Couldn't evaluate sql schemas for causality token: 722
    ... 42 more
Caused by: java.util.concurrent.TimeoutException
    ... 8 more{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}
 

  was:
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}
 


> 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:881 +0200 [WARNING][%node_1%Raft-Group-Client-5][SchemaManager] Error when processing CREATE event
> java.util.concurrent.CompletionException: org.apache.ignite.lang.IgniteInternalException: IGN-SQL-32 TraceId:d3484efb-2ca6-4098-8c17-30a878c0801e Couldn't evaluate sql schemas for causality token: 722
>     at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:331)
>     at java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:346)
>     at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:632)
>     at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
>     at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088)
>     at org.apache.ignite.internal.causality.BaseVersionedValue.lambda$copyState$6(BaseVersionedValue.java:305)
>     at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
>     at java.base/java.util.concurrent.CompletableFuture.uniWhenCompleteStage(CompletableFuture.java:883)
>     at java.base/java.util.concurrent.CompletableFuture.whenComplete(CompletableFuture.java:2251)
>     at org.apache.ignite.internal.causality.BaseVersionedValue.copyState(BaseVersionedValue.java:303)
>     at org.apache.ignite.internal.causality.BaseVersionedValue.complete(BaseVersionedValue.java:189)
>     at org.apache.ignite.internal.causality.CompletableVersionedValue.completeExceptionally(CompletableVersionedValue.java:101)
>     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)
>     at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
>     at java.base/java.util.concurrent.CompletableFuture.uniWhenCompleteStage(CompletableFuture.java:883)
>     at java.base/java.util.concurrent.CompletableFuture.whenComplete(CompletableFuture.java:2251)
>     at org.apache.ignite.internal.causality.BaseVersionedValue.notifyCompletionListeners(BaseVersionedValue.java:326)
>     at org.apache.ignite.internal.causality.BaseVersionedValue.complete(BaseVersionedValue.java:198)
>     at org.apache.ignite.internal.causality.IncrementalVersionedValue.lambda$completeInternal$1(IncrementalVersionedValue.java:236)
>     at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
>     at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
>     at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
>     at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088)
>     at org.apache.ignite.internal.causality.BaseVersionedValue.lambda$copyState$6(BaseVersionedValue.java:305)
>     at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
>     at java.base/java.util.concurrent.CompletableFuture.uniWhenCompleteStage(CompletableFuture.java:883)
>     at java.base/java.util.concurrent.CompletableFuture.whenComplete(CompletableFuture.java:2251)
>     at org.apache.ignite.internal.causality.BaseVersionedValue.copyState(BaseVersionedValue.java:303)
>     at org.apache.ignite.internal.causality.BaseVersionedValue.complete(BaseVersionedValue.java:189)
>     at org.apache.ignite.internal.causality.IncrementalVersionedValue.lambda$completeInternal$1(IncrementalVersionedValue.java:236)
>     at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
>     at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
>     at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
>     at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088)
>     at org.apache.ignite.internal.causality.BaseVersionedValue.lambda$copyState$6(BaseVersionedValue.java:305)
>     at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
>     at java.base/java.util.concurrent.CompletableFuture.uniWhenCompleteStage(CompletableFuture.java:883)
>     at java.base/java.util.concurrent.CompletableFuture.whenComplete(CompletableFuture.java:2251)
>     at org.apache.ignite.internal.causality.BaseVersionedValue.copyState(BaseVersionedValue.java:303)
>     at org.apache.ignite.internal.causality.BaseVersionedValue.complete(BaseVersionedValue.java:189)
>     at org.apache.ignite.internal.causality.IncrementalVersionedValue.lambda$completeInternal$1(IncrementalVersionedValue.java:236)
>     at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
>     at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
>     at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
>     at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088)
>     at org.apache.ignite.internal.raft.RaftGroupServiceImpl.sendWithRetry(RaftGroupServiceImpl.java:511)
>     at org.apache.ignite.internal.raft.RaftGroupServiceImpl.lambda$handleThrowable$40(RaftGroupServiceImpl.java:560)
>     at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
>     at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
>     at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
>     at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
>     at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
>     at java.base/java.lang.Thread.run(Thread.java:829)
> Caused by: org.apache.ignite.lang.IgniteInternalException: IGN-SQL-32 TraceId:d3484efb-2ca6-4098-8c17-30a878c0801e Couldn't evaluate sql schemas for causality token: 722
>     ... 42 more
> Caused by: java.util.concurrent.TimeoutException
>     ... 8 more{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)