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

Reply via email to