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