[
https://issues.apache.org/jira/browse/IGNITE-19784?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Isaac Zhu updated IGNITE-19784:
-------------------------------
Component/s: python
sql
Labels: Crash crash server-side (was: )
> Specific SQL query causes all nodes in cluster down
> ---------------------------------------------------
>
> Key: IGNITE-19784
> URL: https://issues.apache.org/jira/browse/IGNITE-19784
> Project: Ignite
> Issue Type: Bug
> Components: python, sql
> Affects Versions: 2.13
> Environment:
>
>
>
>
>
> Reporter: Isaac Zhu
> Priority: Critical
> Labels: Crash, crash, server-side
>
> I'm using 2.13 server and client.
> The query is performed in a wrong way using the Python thin client. But It
> leads to all server nodes get shutdown which is a severe BUG. It should just
> report this is a wrong query.
> h2. Table and index:
> CREATE TABLE PUBLIC.TEST_TABLE (
> GROUP_ID INTEGER,
> DIFF_FILE_ID INTEGER,
> TEST_CASE_ID INTEGER,
> PARSING_START_TIME TIMESTAMP,
> STATUS VARCHAR,
> BEST_LOWER_STATUS VARCHAR,
> BEST_LOWER_FROM INTEGER,
> IS_R2R BOOLEAN,
> LAST_UPDATE TIMESTAMP,
> PRIMARY KEY (GROUP_ID,TEST_CASE_ID)
> ) WITH
> "TEMPLATE=PARTITIONED,affinity_key=TEST_CASE_ID,cache_group=TEST_TABLE";
> CREATE INDEX IS_R2R_TEST_TABLE ON PUBLIC.TEST_TABLE(IS_R2R);
> CREATE INDEX GROUP_ID_TEST_TABLE ON PUBLIC.TEST_TABLE(GROUP_ID);
> CREATE INDEX TEST_CASE_ID_TEST_TABLE ON PUBLIC.TEST_TABLE(TEST_CASE_ID);
> CREATE INDEX DIFF_FILE_ID_TEST_TABLE ON PUBLIC.TEST_TABLE(DIFF_FILE_ID);
> CREATE INDEX STATUS_TEST_TABLE ON PUBLIC.TEST_TABLE(STATUS);
> h2. Code of run the query with python thin client:
> from pyignite import Client
> def execute_ignite_query(client, sql, query_args):
> response = []
> try:
> result = client.sql(sql, include_field_names=True,
> query_args=query_args)
> columns = next(result)
> for row in result:
> response.append(\{key: val for key, val in zip(columns, row)})
> except:
> traceback.print_exc()
> return response
>
>
> sql = "SELECT GROUP_ID, STATUS, IS_R2R, COUNT(*) AS COUNT FROM test_table
> WHERE GROUP_ID IN ( ? ) AND status != '' GROUP BY group_id , status , is_r2r"
> group_id = "478,479,480,481,482,483,484,485,486,487,488,7765"
> result = execute_ignite_query(ignite_client, sql,[group_id])
> {color:#de350b}*This query will hang and all server nodes raise this error
> and stopped immediatly:*{color}
> [23:33:07,635][SEVERE][query-#15094][] Critical system error detected. Will
> be handled accordingly to configured handler
> [hnd=StopNodeOrHaltFailureHandler [tryStop=false, timeout=0,
> super=AbstractFailureHandler [ignoredFailureTypes=UnmodifiableSet
> [SYSTEM_WORKER_BLOCKED, SYSTEM_CRITICAL_OPERATION_TIMEOUT]]],
> failureCtx=FailureContext [type=CRITICAL_ERROR, err=class
> o.a.i.i.processors.cache.persistence.tree.CorruptedTreeException: B+Tree is
> corrupted [groupId=-1392979922, pageIds=[844420636415674],
> cacheId=-1293843575, cacheName=SQL_PUBLIC_TEST_TABLE, indexName=_key_PK,
> groupName=TEST_TABLE, msg=Runtime failure on bounds:
> [lower=IndexSearchRowImpl
> [rowHnd=o.a.i.i.processors.query.h2.index.QueryIndexRowHandler@7cc55efe],
> upper=IndexSearchRowImpl
> [rowHnd=o.a.i.i.processors.query.h2.index.QueryIndexRowHandler@7cc55efe]]]]]
> class
> org.apache.ignite.internal.processors.cache.persistence.tree.CorruptedTreeException:
> B+Tree is corrupted [groupId=-1392979922, pageIds=[844420636415674],
> cacheId=-1293843575, cacheName=SQL_PUBLIC_TEST_TABLE, indexName=_key_PK,
> groupName=TEST_TABLE, msg=Runtime failure on bounds:
> [lower=IndexSearchRowImpl
> [rowHnd=org.apache.ignite.internal.processors.query.h2.index.QueryIndexRowHandler@7cc55efe],
> upper=IndexSearchRowImpl
> [rowHnd=org.apache.ignite.internal.processors.query.h2.index.QueryIndexRowHandler@7cc55efe]]]
> >---at
> >org.apache.ignite.internal.cache.query.index.sorted.inline.InlineIndexTree.corruptedTreeException(InlineIndexTree.java:594)
> >---at
> >org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.find(BPlusTree.java:1217)
> >---at
> >org.apache.ignite.internal.cache.query.index.sorted.inline.InlineIndexImpl.find(InlineIndexImpl.java:104)
> >---at
> >org.apache.ignite.internal.processors.query.h2.database.H2TreeIndex.find(H2TreeIndex.java:209)
> >---at org.h2.index.BaseIndex.find(BaseIndex.java:130)
> >---at org.h2.index.IndexCursor.find(IndexCursor.java:176)
> >---at org.h2.table.TableFilter.next(TableFilter.java:471)
> >---at org.h2.command.dml.Select.queryGroup(Select.java:323)
> >---at org.h2.command.dml.Select.queryWithoutCache(Select.java:628)
> >---at org.h2.command.dml.Query.queryWithoutCacheLazyCheck(Query.java:114)
> >---at org.h2.command.dml.Query.query(Query.java:352)
> >---at org.h2.command.dml.Query.query(Query.java:333)
> >---at org.h2.command.CommandContainer.query(CommandContainer.java:114)
> >---at org.h2.command.Command.executeQuery(Command.java:202)
> >---at
> >org.h2.jdbc.JdbcPreparedStatement.executeQuery(JdbcPreparedStatement.java:114)
> >---at
> >org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.executeSqlQuery(IgniteH2Indexing.java:888)
> >---at
> >org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.executeSqlQueryWithTimer(IgniteH2Indexing.java:985)
> >---at
> >org.apache.ignite.internal.processors.query.h2.twostep.GridMapQueryExecutor.onQueryRequest0(GridMapQueryExecutor.java:471)
> >---at
> >org.apache.ignite.internal.processors.query.h2.twostep.GridMapQueryExecutor.lambda$onQueryRequest$0(GridMapQueryExecutor.java:255)
> >---at
> >org.apache.ignite.internal.util.IgniteUtils.wrapThreadLoader(IgniteUtils.java:7422)
> >---at
> >org.apache.ignite.internal.processors.closure.GridClosureProcessor$1.body(GridClosureProcessor.java:827)
> >---at
> >org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:125)
> >---at
> >org.apache.ignite.internal.processors.security.thread.SecurityAwareRunnable.run(SecurityAwareRunnable.java:51)
> >---at
> >java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
> >---at
> >java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
> >---at java.lang.Thread.run(Thread.java:748)
> Caused by: class org.apache.ignite.IgniteException: Failed to store new index
> row.
> >---at
> >org.apache.ignite.internal.cache.query.index.sorted.inline.InlineIndexTree.compare(InlineIndexTree.java:306)
> >---at
> >org.apache.ignite.internal.cache.query.index.sorted.inline.InlineIndexTree.compare(InlineIndexTree.java:74)
> >---at
> >org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.compare(BPlusTree.java:5553)
> >---at
> >org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.findInsertionPoint(BPlusTree.java:5473)
> >---at
> >org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.access$1100(BPlusTree.java:162)
> >---at
> >org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree$Search.run0(BPlusTree.java:369)
> >---at
> >org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree$GetPageHandler.run(BPlusTree.java:6089)
> >---at
> >org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree$Search.run(BPlusTree.java:349)
> >---at
> >org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree$GetPageHandler.run(BPlusTree.java:6075)
> >---at
> >org.apache.ignite.internal.processors.cache.persistence.tree.util.PageHandler.readPage(PageHandler.java:174)
> >---at
> >org.apache.ignite.internal.processors.cache.persistence.DataStructure.read(DataStructure.java:415)
> >---at
> >org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.read(BPlusTree.java:6276)
> >---at
> >org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.findDown(BPlusTree.java:1542)
> >---at
> >org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.doFind(BPlusTree.java:1509)
> >---at
> >org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.access$7300(BPlusTree.java:162)
> >---at
> >org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree$AbstractForwardCursor.find(BPlusTree.java:5746)
> >---at
> >org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.find(BPlusTree.java:1201)
> >---... 24 more
> Caused by: org.h2.message.DbException: Data conversion error converting
> "478,479,480,481,482,483,484,485,486,487,488,7765" [22018-197]
> >---at org.h2.message.DbException.get(DbException.java:168)
> >---at org.h2.value.Value.convertTo(Value.java:1116)
> >---at org.h2.value.Value.convertTo(Value.java:617)
> >---at org.h2.value.Value.convertTo(Value.java:592)
> >---at
> >org.apache.ignite.internal.processors.query.h2.index.H2RowComparator.compareKey(H2RowComparator.java:77)
> >---at
> >org.apache.ignite.internal.cache.query.index.sorted.inline.InlineIndexTree.compare(InlineIndexTree.java:293)
> >---... 40 more
> Caused by: org.h2.jdbc.JdbcSQLException: Data conversion error converting
> "478,479,480,481,482,483,484,485,486,487,488,7765" [22018-197]
> >---at org.h2.message.DbException.getJdbcSQLException(DbException.java:357)
> >---... 46 more
> Caused by: java.lang.NumberFormatException: For input string:
> "478,479,480,481,482,483,484,485,486,487,488,7765"
> >---at
> >java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
> >---at java.lang.Integer.parseInt(Integer.java:580)
> >---at java.lang.Integer.parseInt(Integer.java:615)
> >---at org.h2.value.Value.convertTo(Value.java:1061)
> >---... 44 more
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)