[ https://issues.apache.org/jira/browse/IGNITE-24514?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Sergey Korotkov updated IGNITE-24514: ------------------------------------- Description: Invalid SQL query with the WITH clause (AKA Common Table Expressions - CTEs) can leave the H2 sql query engine in the state that the following bad things can happen: - Table can not be dropped correctly. Call to {{ignite.destroyCache}} or "DROP TABLE" SQL succseed. Ignite cache is removed but not the table. - Table can not be recreated (it fails saying table already exists) - If table has index and created via the Ignite API and {{QueryEntity}}'s the ignite node crashes with AsserionError. The problem query is like: {code:sql} WITH cte AS (SELECT id FROM T2) SELECT * FROM absent_table_to_emulate_statement_parse_failure {code} After such a query the drop table fails leaving the below WARNING in the ignite node log. Reason is that the temporary view created for the CTE is still bound to the "T2" table. It wasn't removed after query parsing failure. *Note that NO error will be reported to user application*. It fails silently. {noformat} [2025-02-13T22:31:07,203][WARN ][exchange-worker-#92%query.SqlFailedCteQueryTest%][SchemaManager$CompoundSchemaChangeListener] Failed to notify listener (will ignore): Failed to drop database table [type=T2, table="PUBLIC"."T2"] org.apache.ignite.internal.processors.query.IgniteSQLException: Failed to drop database table [type=T2, table="PUBLIC"."T2"] at org.apache.ignite.internal.processors.query.h2.H2SchemaManager.dropTable(H2SchemaManager.java:213) ~[classes/:?] at org.apache.ignite.internal.processors.query.h2.H2SchemaManager.onSqlTypeDropped(H2SchemaManager.java:183) ~[classes/:?] at org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.lambda$onSqlTypeDropped$10(SchemaManager.java:1397) ~[classes/:?] at org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.executeSafe(SchemaManager.java:1459) ~[classes/:?] at org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.lambda$onSqlTypeDropped$11(SchemaManager.java:1397) ~[classes/:?] at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[?:?] at org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.onSqlTypeDropped(SchemaManager.java:1397) ~[classes/:?] at org.apache.ignite.internal.processors.query.schema.management.SchemaManager.onCacheStopped(SchemaManager.java:446) ~[classes/:?] at org.apache.ignite.internal.processors.query.GridQueryProcessor.onCacheStop0(GridQueryProcessor.java:2462) ~[classes/:?] at org.apache.ignite.internal.processors.query.GridQueryProcessor.onCacheStop(GridQueryProcessor.java:1322) ~[classes/:?] at org.apache.ignite.internal.processors.cache.GridCacheProcessor.stopCache(GridCacheProcessor.java:1041) ~[classes/:?] at org.apache.ignite.internal.processors.cache.GridCacheProcessor.prepareCacheStop(GridCacheProcessor.java:2610) ~[classes/:?] at org.apache.ignite.internal.processors.cache.GridCacheProcessor.prepareCacheStop(GridCacheProcessor.java:2589) ~[classes/:?] at org.apache.ignite.internal.processors.cache.GridCacheProcessor.lambda$processCacheStopRequestOnExchangeDone$a1367cb0$1(GridCacheProcessor.java:2830) ~[classes/:?] at org.apache.ignite.internal.util.IgniteUtils.doInParallel(IgniteUtils.java:11624) [classes/:?] at org.apache.ignite.internal.util.IgniteUtils.doInParallel(IgniteUtils.java:11526) [classes/:?] at org.apache.ignite.internal.processors.cache.GridCacheProcessor.processCacheStopRequestOnExchangeDone(GridCacheProcessor.java:2804) [classes/:?] at org.apache.ignite.internal.processors.cache.GridCacheProcessor.onExchangeDone(GridCacheProcessor.java:2956) [classes/:?] at org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.onDone(GridDhtPartitionsExchangeFuture.java:2467) [classes/:?] at org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.finishExchangeOnCoordinator(GridDhtPartitionsExchangeFuture.java:3945) [classes/:?] at org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.onAllReceived(GridDhtPartitionsExchangeFuture.java:3717) [classes/:?] at org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.distributedExchange(GridDhtPartitionsExchangeFuture.java:1768) [classes/:?] at org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.init(GridDhtPartitionsExchangeFuture.java:1049) [classes/:?] at org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body0(GridCachePartitionExchangeManager.java:3170) [classes/:?] at org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body(GridCachePartitionExchangeManager.java:3004) [classes/:?] at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:125) [classes/:?] at java.base/java.lang.Thread.run(Thread.java:829) [?:?] Caused by: org.h2.jdbc.JdbcSQLException: General error: "java.lang.NullPointerException"; SQL statement: DROP TABLE IF EXISTS "PUBLIC"."T2" [50000-197] at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) ~[h2-1.4.197.jar:1.4.197] at org.h2.message.DbException.get(DbException.java:168) ~[h2-1.4.197.jar:1.4.197] at org.h2.message.DbException.convert(DbException.java:307) ~[h2-1.4.197.jar:1.4.197] at org.h2.command.Command.executeUpdate(Command.java:274) ~[h2-1.4.197.jar:1.4.197] at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:169) ~[h2-1.4.197.jar:1.4.197] at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:126) ~[h2-1.4.197.jar:1.4.197] at org.apache.ignite.internal.processors.query.h2.H2SchemaManager.dropTable(H2SchemaManager.java:209) ~[classes/:?] ... 26 more Caused by: java.lang.NullPointerException at org.h2.engine.Session.removeLocalTempTable(Session.java:407) ~[h2-1.4.197.jar:1.4.197] at org.h2.engine.Database.removeSchemaObject(Database.java:1884) ~[h2-1.4.197.jar:1.4.197] at org.h2.table.Table.removeChildrenAndResources(Table.java:531) ~[h2-1.4.197.jar:1.4.197] at org.apache.ignite.internal.processors.query.h2.opt.GridH2Table.removeChildrenAndResources(GridH2Table.java:614) ~[classes/:?] at org.h2.engine.Database.removeSchemaObject(Database.java:1918) ~[h2-1.4.197.jar:1.4.197] at org.h2.command.ddl.DropTable.executeDrop(DropTable.java:119) ~[h2-1.4.197.jar:1.4.197] at org.h2.command.ddl.DropTable.update(DropTable.java:130) ~[h2-1.4.197.jar:1.4.197] at org.h2.command.CommandContainer.update(CommandContainer.java:102) ~[h2-1.4.197.jar:1.4.197] at org.h2.command.Command.executeUpdate(Command.java:261) ~[h2-1.4.197.jar:1.4.197] at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:169) ~[h2-1.4.197.jar:1.4.197] at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:126) ~[h2-1.4.197.jar:1.4.197] at org.apache.ignite.internal.processors.query.h2.H2SchemaManager.dropTable(H2SchemaManager.java:209) ~[classes/:?] ... 26 more {noformat} If try to recreated table with SQL the following error will be returned: {noformat} class org.apache.ignite.internal.processors.query.IgniteSQLException: Table already exists: T2 at org.apache.ignite.internal.processors.query.QueryUtils.convert(QueryUtils.java:1710) at org.apache.ignite.internal.processors.query.h2.CommandProcessor.runCommandH2(CommandProcessor.java:435) at org.apache.ignite.internal.processors.query.h2.CommandProcessor.runCommand(CommandProcessor.java:162) at org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.executeCommand(IgniteH2Indexing.java:900) at org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.querySqlFields(IgniteH2Indexing.java:985) at org.apache.ignite.internal.processors.query.GridQueryProcessor$2.applyx(GridQueryProcessor.java:3135) at org.apache.ignite.internal.processors.query.GridQueryProcessor$2.applyx(GridQueryProcessor.java:3075) at org.apache.ignite.internal.util.lang.IgniteOutClosureX.apply(IgniteOutClosureX.java:36) at org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuery(GridQueryProcessor.java:3861) at org.apache.ignite.internal.processors.query.GridQueryProcessor.lambda$querySqlFields$3(GridQueryProcessor.java:3152) at org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuerySafe(GridQueryProcessor.java:3289) at org.apache.ignite.internal.processors.query.GridQueryProcessor.querySqlFields(GridQueryProcessor.java:3071) at org.apache.ignite.internal.processors.query.GridQueryProcessor.querySqlFields(GridQueryProcessor.java:2995) at org.apache.ignite.internal.processors.query.GridQueryProcessor.querySqlFields(GridQueryProcessor.java:2968) at org.apache.ignite.internal.processors.query.SqlFailedCteQueryTest.sql(SqlFailedCteQueryTest.java:166) at org.apache.ignite.internal.processors.query.SqlFailedCteQueryTest.testFailedCteQueryDoesNotPreventTableRecreate(SqlFailedCteQueryTest.java:140) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.apache.ignite.testframework.junits.GridAbstractTest$6.run(GridAbstractTest.java:2506) at java.base/java.lang.Thread.run(Thread.java:829) Caused by: SchemaOperationException [code=3, msg=Table already exists: T2] at org.apache.ignite.internal.processors.query.h2.CommandProcessor.runCommandH2(CommandProcessor.java:255) ... 24 more {noformat} *Ignite node would crash* if try to recreate table via Ignite API and {{QueryEntity}}'s with index configured say like {code:java} new CacheConfiguration<>("T2") .setQueryEntities(Collections.singletonList( new QueryEntity("java.lang.String", "T2") .addQueryField("id", String.class.getName(), null) .setIndexes(List.of( new QueryIndex("id", false, "id_idx"))) .setKeyFieldName("id"))) .setSqlSchema(SCHEMA); {code} {noformat} [2025-02-13T22:47:55,394][ERROR][exchange-worker-#92%query.SqlFailedCteQueryTest%][IgniteTestResources] Critical system error detected. Will be handled accordingly to configured handler [hnd=o.a.i.i.processors.query.SqlFailedCteQueryTest$TestFailureHandler@c35172e, failureCtx=FailureContext [type=SYSTEM_WORKER_TERMINATION, err=java.lang.AssertionError]] java.lang.AssertionError: null at org.apache.ignite.internal.processors.query.h2.opt.GridH2Table.commitUserIndex(GridH2Table.java:851) ~[classes/:?] at org.apache.ignite.internal.processors.query.h2.opt.GridH2Table.addIndex(GridH2Table.java:750) ~[classes/:?] at org.h2.command.ddl.CreateIndex.update(CreateIndex.java:107) ~[h2-1.4.197.jar:1.4.197] at org.h2.command.CommandContainer.update(CommandContainer.java:102) ~[h2-1.4.197.jar:1.4.197] at org.h2.command.Command.executeUpdate(Command.java:261) ~[h2-1.4.197.jar:1.4.197] at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:169) ~[h2-1.4.197.jar:1.4.197] at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:126) ~[h2-1.4.197.jar:1.4.197] at org.apache.ignite.internal.processors.query.h2.ConnectionManager.executeStatement(ConnectionManager.java:160) ~[classes/:?] at org.apache.ignite.internal.processors.query.h2.H2SchemaManager.onIndexCreated(H2SchemaManager.java:308) ~[classes/:?] at org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.lambda$onIndexCreated$12(SchemaManager.java:1407) ~[classes/:?] at org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.executeSafe(SchemaManager.java:1459) ~[classes/:?] at org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.lambda$onIndexCreated$13(SchemaManager.java:1407) ~[classes/:?] at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[?:?] at org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.onIndexCreated(SchemaManager.java:1407) ~[classes/:?] at org.apache.ignite.internal.processors.query.schema.management.SchemaManager.addIndex(SchemaManager.java:750) ~[classes/:?] at org.apache.ignite.internal.processors.query.schema.management.SchemaManager.createIndex0(SchemaManager.java:630) ~[classes/:?] at org.apache.ignite.internal.processors.query.schema.management.SchemaManager.onCacheTypeCreated(SchemaManager.java:389) ~[classes/:?] at org.apache.ignite.internal.processors.query.GridQueryProcessor.registerCache0(GridQueryProcessor.java:2400) ~[classes/:?] at org.apache.ignite.internal.processors.query.GridQueryProcessor.onCacheStart0(GridQueryProcessor.java:1215) ~[classes/:?] at org.apache.ignite.internal.processors.query.GridQueryProcessor.onCacheStart(GridQueryProcessor.java:1287) ~[classes/:?] at org.apache.ignite.internal.processors.cache.GridCacheProcessor.prepareCacheStart(GridCacheProcessor.java:1928) ~[classes/:?] at org.apache.ignite.internal.processors.cache.GridCacheProcessor.lambda$prepareStartCaches$55a0e703$1(GridCacheProcessor.java:1798) ~[classes/:?] at org.apache.ignite.internal.processors.cache.GridCacheProcessor.lambda$prepareStartCachesIfPossible$17(GridCacheProcessor.java:1768) ~[classes/:?] at org.apache.ignite.internal.processors.cache.GridCacheProcessor.prepareStartCaches(GridCacheProcessor.java:1795) ~[classes/:?] at org.apache.ignite.internal.processors.cache.GridCacheProcessor.prepareStartCachesIfPossible(GridCacheProcessor.java:1766) ~[classes/:?] at org.apache.ignite.internal.processors.cache.CacheAffinitySharedManager.processCacheStartRequests(CacheAffinitySharedManager.java:994) ~[classes/:?] at org.apache.ignite.internal.processors.cache.CacheAffinitySharedManager.onCacheChangeRequest(CacheAffinitySharedManager.java:880) ~[classes/:?] at org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.onCacheChangeRequest(GridDhtPartitionsExchangeFuture.java:1449) ~[classes/:?] at org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.init(GridDhtPartitionsExchangeFuture.java:975) ~[classes/:?] at org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body0(GridCachePartitionExchangeManager.java:3170) ~[classes/:?] at org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body(GridCachePartitionExchangeManager.java:3004) [classes/:?] at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:125) [classes/:?] at java.base/java.lang.Thread.run(Thread.java:829) [?:?] {noformat} was: Invalid SQL query with the WITH clause (AKA Common Table Expressions - CTEs) can leave the H2 sql query engine in the state that the following bad things can happen: - Table can not be dropped correctly. Call to {{ignite.destroyCache}} or "DROP TABLE" SQL succseed. Ignite cache is removed but not the table. - Table can not be recreated (it fails saying table already exists) - If table has index and created via the Ignite API and {{QueryEntity}}'s the ignite node crashes with AsserionError. Sample query: {code:sql} WITH cte AS (SELECT id FROM T2) SELECT * FROM absent_table_to_emulate_statement_parse_failure {code} After such a query the drop table fails leaving the below WARNING in the ignite node log. Reason is that the temporary view created for the CTE is still bound to the "T2" table. It wasn't removed after query parsing failure. *Note that NO error will be reported to user application*. It fails silently. {noformat} [2025-02-13T22:31:07,203][WARN ][exchange-worker-#92%query.SqlFailedCteQueryTest%][SchemaManager$CompoundSchemaChangeListener] Failed to notify listener (will ignore): Failed to drop database table [type=T2, table="PUBLIC"."T2"] org.apache.ignite.internal.processors.query.IgniteSQLException: Failed to drop database table [type=T2, table="PUBLIC"."T2"] at org.apache.ignite.internal.processors.query.h2.H2SchemaManager.dropTable(H2SchemaManager.java:213) ~[classes/:?] at org.apache.ignite.internal.processors.query.h2.H2SchemaManager.onSqlTypeDropped(H2SchemaManager.java:183) ~[classes/:?] at org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.lambda$onSqlTypeDropped$10(SchemaManager.java:1397) ~[classes/:?] at org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.executeSafe(SchemaManager.java:1459) ~[classes/:?] at org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.lambda$onSqlTypeDropped$11(SchemaManager.java:1397) ~[classes/:?] at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[?:?] at org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.onSqlTypeDropped(SchemaManager.java:1397) ~[classes/:?] at org.apache.ignite.internal.processors.query.schema.management.SchemaManager.onCacheStopped(SchemaManager.java:446) ~[classes/:?] at org.apache.ignite.internal.processors.query.GridQueryProcessor.onCacheStop0(GridQueryProcessor.java:2462) ~[classes/:?] at org.apache.ignite.internal.processors.query.GridQueryProcessor.onCacheStop(GridQueryProcessor.java:1322) ~[classes/:?] at org.apache.ignite.internal.processors.cache.GridCacheProcessor.stopCache(GridCacheProcessor.java:1041) ~[classes/:?] at org.apache.ignite.internal.processors.cache.GridCacheProcessor.prepareCacheStop(GridCacheProcessor.java:2610) ~[classes/:?] at org.apache.ignite.internal.processors.cache.GridCacheProcessor.prepareCacheStop(GridCacheProcessor.java:2589) ~[classes/:?] at org.apache.ignite.internal.processors.cache.GridCacheProcessor.lambda$processCacheStopRequestOnExchangeDone$a1367cb0$1(GridCacheProcessor.java:2830) ~[classes/:?] at org.apache.ignite.internal.util.IgniteUtils.doInParallel(IgniteUtils.java:11624) [classes/:?] at org.apache.ignite.internal.util.IgniteUtils.doInParallel(IgniteUtils.java:11526) [classes/:?] at org.apache.ignite.internal.processors.cache.GridCacheProcessor.processCacheStopRequestOnExchangeDone(GridCacheProcessor.java:2804) [classes/:?] at org.apache.ignite.internal.processors.cache.GridCacheProcessor.onExchangeDone(GridCacheProcessor.java:2956) [classes/:?] at org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.onDone(GridDhtPartitionsExchangeFuture.java:2467) [classes/:?] at org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.finishExchangeOnCoordinator(GridDhtPartitionsExchangeFuture.java:3945) [classes/:?] at org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.onAllReceived(GridDhtPartitionsExchangeFuture.java:3717) [classes/:?] at org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.distributedExchange(GridDhtPartitionsExchangeFuture.java:1768) [classes/:?] at org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.init(GridDhtPartitionsExchangeFuture.java:1049) [classes/:?] at org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body0(GridCachePartitionExchangeManager.java:3170) [classes/:?] at org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body(GridCachePartitionExchangeManager.java:3004) [classes/:?] at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:125) [classes/:?] at java.base/java.lang.Thread.run(Thread.java:829) [?:?] Caused by: org.h2.jdbc.JdbcSQLException: General error: "java.lang.NullPointerException"; SQL statement: DROP TABLE IF EXISTS "PUBLIC"."T2" [50000-197] at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) ~[h2-1.4.197.jar:1.4.197] at org.h2.message.DbException.get(DbException.java:168) ~[h2-1.4.197.jar:1.4.197] at org.h2.message.DbException.convert(DbException.java:307) ~[h2-1.4.197.jar:1.4.197] at org.h2.command.Command.executeUpdate(Command.java:274) ~[h2-1.4.197.jar:1.4.197] at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:169) ~[h2-1.4.197.jar:1.4.197] at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:126) ~[h2-1.4.197.jar:1.4.197] at org.apache.ignite.internal.processors.query.h2.H2SchemaManager.dropTable(H2SchemaManager.java:209) ~[classes/:?] ... 26 more Caused by: java.lang.NullPointerException at org.h2.engine.Session.removeLocalTempTable(Session.java:407) ~[h2-1.4.197.jar:1.4.197] at org.h2.engine.Database.removeSchemaObject(Database.java:1884) ~[h2-1.4.197.jar:1.4.197] at org.h2.table.Table.removeChildrenAndResources(Table.java:531) ~[h2-1.4.197.jar:1.4.197] at org.apache.ignite.internal.processors.query.h2.opt.GridH2Table.removeChildrenAndResources(GridH2Table.java:614) ~[classes/:?] at org.h2.engine.Database.removeSchemaObject(Database.java:1918) ~[h2-1.4.197.jar:1.4.197] at org.h2.command.ddl.DropTable.executeDrop(DropTable.java:119) ~[h2-1.4.197.jar:1.4.197] at org.h2.command.ddl.DropTable.update(DropTable.java:130) ~[h2-1.4.197.jar:1.4.197] at org.h2.command.CommandContainer.update(CommandContainer.java:102) ~[h2-1.4.197.jar:1.4.197] at org.h2.command.Command.executeUpdate(Command.java:261) ~[h2-1.4.197.jar:1.4.197] at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:169) ~[h2-1.4.197.jar:1.4.197] at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:126) ~[h2-1.4.197.jar:1.4.197] at org.apache.ignite.internal.processors.query.h2.H2SchemaManager.dropTable(H2SchemaManager.java:209) ~[classes/:?] ... 26 more {noformat} If try to recreated table with SQL the following error will be returned: {noformat} class org.apache.ignite.internal.processors.query.IgniteSQLException: Table already exists: T2 at org.apache.ignite.internal.processors.query.QueryUtils.convert(QueryUtils.java:1710) at org.apache.ignite.internal.processors.query.h2.CommandProcessor.runCommandH2(CommandProcessor.java:435) at org.apache.ignite.internal.processors.query.h2.CommandProcessor.runCommand(CommandProcessor.java:162) at org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.executeCommand(IgniteH2Indexing.java:900) at org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.querySqlFields(IgniteH2Indexing.java:985) at org.apache.ignite.internal.processors.query.GridQueryProcessor$2.applyx(GridQueryProcessor.java:3135) at org.apache.ignite.internal.processors.query.GridQueryProcessor$2.applyx(GridQueryProcessor.java:3075) at org.apache.ignite.internal.util.lang.IgniteOutClosureX.apply(IgniteOutClosureX.java:36) at org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuery(GridQueryProcessor.java:3861) at org.apache.ignite.internal.processors.query.GridQueryProcessor.lambda$querySqlFields$3(GridQueryProcessor.java:3152) at org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuerySafe(GridQueryProcessor.java:3289) at org.apache.ignite.internal.processors.query.GridQueryProcessor.querySqlFields(GridQueryProcessor.java:3071) at org.apache.ignite.internal.processors.query.GridQueryProcessor.querySqlFields(GridQueryProcessor.java:2995) at org.apache.ignite.internal.processors.query.GridQueryProcessor.querySqlFields(GridQueryProcessor.java:2968) at org.apache.ignite.internal.processors.query.SqlFailedCteQueryTest.sql(SqlFailedCteQueryTest.java:166) at org.apache.ignite.internal.processors.query.SqlFailedCteQueryTest.testFailedCteQueryDoesNotPreventTableRecreate(SqlFailedCteQueryTest.java:140) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.apache.ignite.testframework.junits.GridAbstractTest$6.run(GridAbstractTest.java:2506) at java.base/java.lang.Thread.run(Thread.java:829) Caused by: SchemaOperationException [code=3, msg=Table already exists: T2] at org.apache.ignite.internal.processors.query.h2.CommandProcessor.runCommandH2(CommandProcessor.java:255) ... 24 more {noformat} *Ignite node would crash* if try to recreate table via Ignite API and {{QueryEntity}}'s with index configured say like {code:java} new CacheConfiguration<>("T2") .setQueryEntities(Collections.singletonList( new QueryEntity("java.lang.String", "T2") .addQueryField("id", String.class.getName(), null) .setIndexes(List.of( new QueryIndex("id", false, "id_idx"))) .setKeyFieldName("id"))) .setSqlSchema(SCHEMA); {code} {noformat} [2025-02-13T22:47:55,394][ERROR][exchange-worker-#92%query.SqlFailedCteQueryTest%][IgniteTestResources] Critical system error detected. Will be handled accordingly to configured handler [hnd=o.a.i.i.processors.query.SqlFailedCteQueryTest$TestFailureHandler@c35172e, failureCtx=FailureContext [type=SYSTEM_WORKER_TERMINATION, err=java.lang.AssertionError]] java.lang.AssertionError: null at org.apache.ignite.internal.processors.query.h2.opt.GridH2Table.commitUserIndex(GridH2Table.java:851) ~[classes/:?] at org.apache.ignite.internal.processors.query.h2.opt.GridH2Table.addIndex(GridH2Table.java:750) ~[classes/:?] at org.h2.command.ddl.CreateIndex.update(CreateIndex.java:107) ~[h2-1.4.197.jar:1.4.197] at org.h2.command.CommandContainer.update(CommandContainer.java:102) ~[h2-1.4.197.jar:1.4.197] at org.h2.command.Command.executeUpdate(Command.java:261) ~[h2-1.4.197.jar:1.4.197] at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:169) ~[h2-1.4.197.jar:1.4.197] at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:126) ~[h2-1.4.197.jar:1.4.197] at org.apache.ignite.internal.processors.query.h2.ConnectionManager.executeStatement(ConnectionManager.java:160) ~[classes/:?] at org.apache.ignite.internal.processors.query.h2.H2SchemaManager.onIndexCreated(H2SchemaManager.java:308) ~[classes/:?] at org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.lambda$onIndexCreated$12(SchemaManager.java:1407) ~[classes/:?] at org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.executeSafe(SchemaManager.java:1459) ~[classes/:?] at org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.lambda$onIndexCreated$13(SchemaManager.java:1407) ~[classes/:?] at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[?:?] at org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.onIndexCreated(SchemaManager.java:1407) ~[classes/:?] at org.apache.ignite.internal.processors.query.schema.management.SchemaManager.addIndex(SchemaManager.java:750) ~[classes/:?] at org.apache.ignite.internal.processors.query.schema.management.SchemaManager.createIndex0(SchemaManager.java:630) ~[classes/:?] at org.apache.ignite.internal.processors.query.schema.management.SchemaManager.onCacheTypeCreated(SchemaManager.java:389) ~[classes/:?] at org.apache.ignite.internal.processors.query.GridQueryProcessor.registerCache0(GridQueryProcessor.java:2400) ~[classes/:?] at org.apache.ignite.internal.processors.query.GridQueryProcessor.onCacheStart0(GridQueryProcessor.java:1215) ~[classes/:?] at org.apache.ignite.internal.processors.query.GridQueryProcessor.onCacheStart(GridQueryProcessor.java:1287) ~[classes/:?] at org.apache.ignite.internal.processors.cache.GridCacheProcessor.prepareCacheStart(GridCacheProcessor.java:1928) ~[classes/:?] at org.apache.ignite.internal.processors.cache.GridCacheProcessor.lambda$prepareStartCaches$55a0e703$1(GridCacheProcessor.java:1798) ~[classes/:?] at org.apache.ignite.internal.processors.cache.GridCacheProcessor.lambda$prepareStartCachesIfPossible$17(GridCacheProcessor.java:1768) ~[classes/:?] at org.apache.ignite.internal.processors.cache.GridCacheProcessor.prepareStartCaches(GridCacheProcessor.java:1795) ~[classes/:?] at org.apache.ignite.internal.processors.cache.GridCacheProcessor.prepareStartCachesIfPossible(GridCacheProcessor.java:1766) ~[classes/:?] at org.apache.ignite.internal.processors.cache.CacheAffinitySharedManager.processCacheStartRequests(CacheAffinitySharedManager.java:994) ~[classes/:?] at org.apache.ignite.internal.processors.cache.CacheAffinitySharedManager.onCacheChangeRequest(CacheAffinitySharedManager.java:880) ~[classes/:?] at org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.onCacheChangeRequest(GridDhtPartitionsExchangeFuture.java:1449) ~[classes/:?] at org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.init(GridDhtPartitionsExchangeFuture.java:975) ~[classes/:?] at org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body0(GridCachePartitionExchangeManager.java:3170) ~[classes/:?] at org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body(GridCachePartitionExchangeManager.java:3004) [classes/:?] at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:125) [classes/:?] at java.base/java.lang.Thread.run(Thread.java:829) [?:?] {noformat} > Invalid SQL query prevent table drop and causes node crash on table recreate > ---------------------------------------------------------------------------- > > Key: IGNITE-24514 > URL: https://issues.apache.org/jira/browse/IGNITE-24514 > Project: Ignite > Issue Type: Bug > Reporter: Sergey Korotkov > Assignee: Sergey Korotkov > Priority: Major > > Invalid SQL query with the WITH clause (AKA Common Table Expressions - CTEs) > can leave the H2 sql query engine in the state that the following bad things > can happen: > - Table can not be dropped correctly. Call to {{ignite.destroyCache}} or > "DROP TABLE" SQL succseed. Ignite cache is removed but not the table. > - Table can not be recreated (it fails saying table already exists) > - If table has index and created via the Ignite API and {{QueryEntity}}'s > the ignite node crashes with AsserionError. > > The problem query is like: > {code:sql} > WITH cte AS (SELECT id FROM T2) > SELECT * FROM absent_table_to_emulate_statement_parse_failure > {code} > After such a query the drop table fails leaving the below WARNING in the > ignite node log. Reason is that the temporary view created for the CTE is > still bound to the "T2" table. It wasn't removed after query parsing failure. > *Note that NO error will be reported to user application*. It fails > silently. > {noformat} > [2025-02-13T22:31:07,203][WARN > ][exchange-worker-#92%query.SqlFailedCteQueryTest%][SchemaManager$CompoundSchemaChangeListener] > Failed to notify listener (will ignore): Failed to drop database table > [type=T2, table="PUBLIC"."T2"] > org.apache.ignite.internal.processors.query.IgniteSQLException: Failed to > drop database table [type=T2, table="PUBLIC"."T2"] > at > org.apache.ignite.internal.processors.query.h2.H2SchemaManager.dropTable(H2SchemaManager.java:213) > ~[classes/:?] > at > org.apache.ignite.internal.processors.query.h2.H2SchemaManager.onSqlTypeDropped(H2SchemaManager.java:183) > ~[classes/:?] > at > org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.lambda$onSqlTypeDropped$10(SchemaManager.java:1397) > ~[classes/:?] > at > org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.executeSafe(SchemaManager.java:1459) > ~[classes/:?] > at > org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.lambda$onSqlTypeDropped$11(SchemaManager.java:1397) > ~[classes/:?] > at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[?:?] > at > org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.onSqlTypeDropped(SchemaManager.java:1397) > ~[classes/:?] > at > org.apache.ignite.internal.processors.query.schema.management.SchemaManager.onCacheStopped(SchemaManager.java:446) > ~[classes/:?] > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.onCacheStop0(GridQueryProcessor.java:2462) > ~[classes/:?] > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.onCacheStop(GridQueryProcessor.java:1322) > ~[classes/:?] > at > org.apache.ignite.internal.processors.cache.GridCacheProcessor.stopCache(GridCacheProcessor.java:1041) > ~[classes/:?] > at > org.apache.ignite.internal.processors.cache.GridCacheProcessor.prepareCacheStop(GridCacheProcessor.java:2610) > ~[classes/:?] > at > org.apache.ignite.internal.processors.cache.GridCacheProcessor.prepareCacheStop(GridCacheProcessor.java:2589) > ~[classes/:?] > at > org.apache.ignite.internal.processors.cache.GridCacheProcessor.lambda$processCacheStopRequestOnExchangeDone$a1367cb0$1(GridCacheProcessor.java:2830) > ~[classes/:?] > at > org.apache.ignite.internal.util.IgniteUtils.doInParallel(IgniteUtils.java:11624) > [classes/:?] > at > org.apache.ignite.internal.util.IgniteUtils.doInParallel(IgniteUtils.java:11526) > [classes/:?] > at > org.apache.ignite.internal.processors.cache.GridCacheProcessor.processCacheStopRequestOnExchangeDone(GridCacheProcessor.java:2804) > [classes/:?] > at > org.apache.ignite.internal.processors.cache.GridCacheProcessor.onExchangeDone(GridCacheProcessor.java:2956) > [classes/:?] > at > org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.onDone(GridDhtPartitionsExchangeFuture.java:2467) > [classes/:?] > at > org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.finishExchangeOnCoordinator(GridDhtPartitionsExchangeFuture.java:3945) > [classes/:?] > at > org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.onAllReceived(GridDhtPartitionsExchangeFuture.java:3717) > [classes/:?] > at > org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.distributedExchange(GridDhtPartitionsExchangeFuture.java:1768) > [classes/:?] > at > org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.init(GridDhtPartitionsExchangeFuture.java:1049) > [classes/:?] > at > org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body0(GridCachePartitionExchangeManager.java:3170) > [classes/:?] > at > org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body(GridCachePartitionExchangeManager.java:3004) > [classes/:?] > at > org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:125) > [classes/:?] > at java.base/java.lang.Thread.run(Thread.java:829) [?:?] > Caused by: org.h2.jdbc.JdbcSQLException: General error: > "java.lang.NullPointerException"; SQL statement: > DROP TABLE IF EXISTS "PUBLIC"."T2" [50000-197] > at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) > ~[h2-1.4.197.jar:1.4.197] > at org.h2.message.DbException.get(DbException.java:168) > ~[h2-1.4.197.jar:1.4.197] > at org.h2.message.DbException.convert(DbException.java:307) > ~[h2-1.4.197.jar:1.4.197] > at org.h2.command.Command.executeUpdate(Command.java:274) > ~[h2-1.4.197.jar:1.4.197] > at > org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:169) > ~[h2-1.4.197.jar:1.4.197] > at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:126) > ~[h2-1.4.197.jar:1.4.197] > at > org.apache.ignite.internal.processors.query.h2.H2SchemaManager.dropTable(H2SchemaManager.java:209) > ~[classes/:?] > ... 26 more > Caused by: java.lang.NullPointerException > at org.h2.engine.Session.removeLocalTempTable(Session.java:407) > ~[h2-1.4.197.jar:1.4.197] > at org.h2.engine.Database.removeSchemaObject(Database.java:1884) > ~[h2-1.4.197.jar:1.4.197] > at org.h2.table.Table.removeChildrenAndResources(Table.java:531) > ~[h2-1.4.197.jar:1.4.197] > at > org.apache.ignite.internal.processors.query.h2.opt.GridH2Table.removeChildrenAndResources(GridH2Table.java:614) > ~[classes/:?] > at org.h2.engine.Database.removeSchemaObject(Database.java:1918) > ~[h2-1.4.197.jar:1.4.197] > at org.h2.command.ddl.DropTable.executeDrop(DropTable.java:119) > ~[h2-1.4.197.jar:1.4.197] > at org.h2.command.ddl.DropTable.update(DropTable.java:130) > ~[h2-1.4.197.jar:1.4.197] > at org.h2.command.CommandContainer.update(CommandContainer.java:102) > ~[h2-1.4.197.jar:1.4.197] > at org.h2.command.Command.executeUpdate(Command.java:261) > ~[h2-1.4.197.jar:1.4.197] > at > org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:169) > ~[h2-1.4.197.jar:1.4.197] > at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:126) > ~[h2-1.4.197.jar:1.4.197] > at > org.apache.ignite.internal.processors.query.h2.H2SchemaManager.dropTable(H2SchemaManager.java:209) > ~[classes/:?] > ... 26 more > {noformat} > If try to recreated table with SQL the following error will be returned: > {noformat} > class org.apache.ignite.internal.processors.query.IgniteSQLException: Table > already exists: T2 > at > org.apache.ignite.internal.processors.query.QueryUtils.convert(QueryUtils.java:1710) > at > org.apache.ignite.internal.processors.query.h2.CommandProcessor.runCommandH2(CommandProcessor.java:435) > at > org.apache.ignite.internal.processors.query.h2.CommandProcessor.runCommand(CommandProcessor.java:162) > at > org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.executeCommand(IgniteH2Indexing.java:900) > at > org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.querySqlFields(IgniteH2Indexing.java:985) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor$2.applyx(GridQueryProcessor.java:3135) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor$2.applyx(GridQueryProcessor.java:3075) > at > org.apache.ignite.internal.util.lang.IgniteOutClosureX.apply(IgniteOutClosureX.java:36) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuery(GridQueryProcessor.java:3861) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.lambda$querySqlFields$3(GridQueryProcessor.java:3152) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuerySafe(GridQueryProcessor.java:3289) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.querySqlFields(GridQueryProcessor.java:3071) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.querySqlFields(GridQueryProcessor.java:2995) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.querySqlFields(GridQueryProcessor.java:2968) > at > org.apache.ignite.internal.processors.query.SqlFailedCteQueryTest.sql(SqlFailedCteQueryTest.java:166) > at > org.apache.ignite.internal.processors.query.SqlFailedCteQueryTest.testFailedCteQueryDoesNotPreventTableRecreate(SqlFailedCteQueryTest.java:140) > at > java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > at > java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.base/java.lang.reflect.Method.invoke(Method.java:566) > at > org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) > at > org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) > at > org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) > at > org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) > at > org.apache.ignite.testframework.junits.GridAbstractTest$6.run(GridAbstractTest.java:2506) > at java.base/java.lang.Thread.run(Thread.java:829) > Caused by: SchemaOperationException [code=3, msg=Table already exists: T2] > at > org.apache.ignite.internal.processors.query.h2.CommandProcessor.runCommandH2(CommandProcessor.java:255) > ... 24 more > {noformat} > *Ignite node would crash* if try to recreate table via Ignite API and > {{QueryEntity}}'s with index configured say like > {code:java} > new CacheConfiguration<>("T2") > .setQueryEntities(Collections.singletonList( > new QueryEntity("java.lang.String", "T2") > .addQueryField("id", String.class.getName(), null) > .setIndexes(List.of( > new QueryIndex("id", false, "id_idx"))) > .setKeyFieldName("id"))) > .setSqlSchema(SCHEMA); > {code} > {noformat} > [2025-02-13T22:47:55,394][ERROR][exchange-worker-#92%query.SqlFailedCteQueryTest%][IgniteTestResources] > Critical system error detected. Will be handled accordingly to configured > handler > [hnd=o.a.i.i.processors.query.SqlFailedCteQueryTest$TestFailureHandler@c35172e, > failureCtx=FailureContext [type=SYSTEM_WORKER_TERMINATION, > err=java.lang.AssertionError]] > java.lang.AssertionError: null > at > org.apache.ignite.internal.processors.query.h2.opt.GridH2Table.commitUserIndex(GridH2Table.java:851) > ~[classes/:?] > at > org.apache.ignite.internal.processors.query.h2.opt.GridH2Table.addIndex(GridH2Table.java:750) > ~[classes/:?] > at org.h2.command.ddl.CreateIndex.update(CreateIndex.java:107) > ~[h2-1.4.197.jar:1.4.197] > at org.h2.command.CommandContainer.update(CommandContainer.java:102) > ~[h2-1.4.197.jar:1.4.197] > at org.h2.command.Command.executeUpdate(Command.java:261) > ~[h2-1.4.197.jar:1.4.197] > at > org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:169) > ~[h2-1.4.197.jar:1.4.197] > at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:126) > ~[h2-1.4.197.jar:1.4.197] > at > org.apache.ignite.internal.processors.query.h2.ConnectionManager.executeStatement(ConnectionManager.java:160) > ~[classes/:?] > at > org.apache.ignite.internal.processors.query.h2.H2SchemaManager.onIndexCreated(H2SchemaManager.java:308) > ~[classes/:?] > at > org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.lambda$onIndexCreated$12(SchemaManager.java:1407) > ~[classes/:?] > at > org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.executeSafe(SchemaManager.java:1459) > ~[classes/:?] > at > org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.lambda$onIndexCreated$13(SchemaManager.java:1407) > ~[classes/:?] > at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[?:?] > at > org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.onIndexCreated(SchemaManager.java:1407) > ~[classes/:?] > at > org.apache.ignite.internal.processors.query.schema.management.SchemaManager.addIndex(SchemaManager.java:750) > ~[classes/:?] > at > org.apache.ignite.internal.processors.query.schema.management.SchemaManager.createIndex0(SchemaManager.java:630) > ~[classes/:?] > at > org.apache.ignite.internal.processors.query.schema.management.SchemaManager.onCacheTypeCreated(SchemaManager.java:389) > ~[classes/:?] > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.registerCache0(GridQueryProcessor.java:2400) > ~[classes/:?] > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.onCacheStart0(GridQueryProcessor.java:1215) > ~[classes/:?] > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.onCacheStart(GridQueryProcessor.java:1287) > ~[classes/:?] > at > org.apache.ignite.internal.processors.cache.GridCacheProcessor.prepareCacheStart(GridCacheProcessor.java:1928) > ~[classes/:?] > at > org.apache.ignite.internal.processors.cache.GridCacheProcessor.lambda$prepareStartCaches$55a0e703$1(GridCacheProcessor.java:1798) > ~[classes/:?] > at > org.apache.ignite.internal.processors.cache.GridCacheProcessor.lambda$prepareStartCachesIfPossible$17(GridCacheProcessor.java:1768) > ~[classes/:?] > at > org.apache.ignite.internal.processors.cache.GridCacheProcessor.prepareStartCaches(GridCacheProcessor.java:1795) > ~[classes/:?] > at > org.apache.ignite.internal.processors.cache.GridCacheProcessor.prepareStartCachesIfPossible(GridCacheProcessor.java:1766) > ~[classes/:?] > at > org.apache.ignite.internal.processors.cache.CacheAffinitySharedManager.processCacheStartRequests(CacheAffinitySharedManager.java:994) > ~[classes/:?] > at > org.apache.ignite.internal.processors.cache.CacheAffinitySharedManager.onCacheChangeRequest(CacheAffinitySharedManager.java:880) > ~[classes/:?] > at > org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.onCacheChangeRequest(GridDhtPartitionsExchangeFuture.java:1449) > ~[classes/:?] > at > org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.init(GridDhtPartitionsExchangeFuture.java:975) > ~[classes/:?] > at > org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body0(GridCachePartitionExchangeManager.java:3170) > ~[classes/:?] > at > org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body(GridCachePartitionExchangeManager.java:3004) > [classes/:?] > at > org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:125) > [classes/:?] > at java.base/java.lang.Thread.run(Thread.java:829) [?:?] > {noformat} -- This message was sent by Atlassian Jira (v8.20.10#820010)