Hello, Roman. Please, see updated test. I assert query text to ensure that correct `SELECT` statement used for KILL command.
This test freeze on «KILL QUERY» execution. ``` @Test public void testCancelSQLQuery() throws Exception { startGrids(1); IgniteEx client = startClientGrid("client"); client.cluster().state(ACTIVE); IgniteCache<Object, Object> cache = client.getOrCreateCache( new CacheConfiguration<>(DEFAULT_CACHE_NAME).setIndexedTypes(Integer.class, Integer.class)); for (int i = 0; i < PAGE_SZ * PAGE_SZ; i++) cache.put(i, i); SqlFieldsQuery qry = new SqlFieldsQuery("SELECT _KEY, _VAL FROM INTEGER").setSchema("default").setPageSize(10); Iterator<List<?>> iter = queryProcessor(client).querySqlFields(qry, true).iterator(); assertNotNull(iter.next()); List<List<?>> sqlQries0 = SqlViewExporterSpiTest.execute(client, "SELECT * FROM SYS.SQL_QUERIES ORDER BY START_TIME"); assertEquals(2, sqlQries0.size()); String qryId = (String)sqlQries0.get(0).get(0); assertEquals("SELECT _KEY, _VAL FROM INTEGER", sqlQries0.get(0).get(1)); SqlViewExporterSpiTest.execute(client, "KILL QUERY '" + qryId + "'"); while(iter.hasNext()) assertNotNull(iter.next()); fail("You shouldn't be here!"); } ``` > 2 марта 2020 г., в 13:48, Roman Kondakov <kondako...@mail.ru.INVALID> > написал(а): > > Nikolay, > >> This system view returns queries that are *running* on the node. >> I can see «"SELECT _KEY, _VAL FROM INTEGER» in the results of select. > > It looks a bit weird to me, because when I print results of the running > queries from server node: > > List<List<?>> sqlQries0 = SqlViewExporterSpiTest.execute(ignite0, > "SELECT * FROM SYS.SQL_QUERIES"); > System.out.println("sqlQries0=" + sqlQries0); > > it prints only the system view query: > > sqlQries0=[[adfe8400-15c7-40cf-a6d2-41012b500000_1, SELECT * FROM > SYS.SQL_QUERIES, adfe8400-15c7-40cf-a6d2-41012b500000, 2020-03-02 > 13:25:12.927, -3, false, PUBLIC]] > > but when I do the same for the client node, it prints both queries: > > sqlQries0=[[dbb3418d-dec2-40f4-8276-090fd31fc27d_1, SELECT _KEY, _VAL > FROM INTEGER, dbb3418d-dec2-40f4-8276-090fd31fc27d, 2020-03-02 > 13:30:43.953, 17, false, default], > [dbb3418d-dec2-40f4-8276-090fd31fc27d_2, SELECT * FROM SYS.SQL_QUERIES, > dbb3418d-dec2-40f4-8276-090fd31fc27d, 2020-03-02 13:30:43.974, -4, > false, PUBLIC]] > > Are you sure you can see both queries in the result of select from the > server? > > It looks like the statement > >> This system view returns queries that are *running* on the node. > > is incorrect. The view returns queries that were *originated* from the > node, not the all *running* there. I'm not sure whether it is expected > behaviour. > > > And what about query hanging: it is a known issue. I'm working on it > right now. I'll file a ticket and propose a patch soon. >> I tried and it doesn’t work, also. >> `KILL QUERY` command just freeze on >> `CommandProcessor#processKillQueryCommand` line 478. > > > -- > Kind Regards > Roman Kondakov > > > On 02.03.2020 13:10, Nikolay Izhikov wrote: >> Hello, Roman. >> >> My initial query was about correct usage of KILL QUERY command. >> It seems for me, that It just doesn’t work. >> >>> itself, which is already completed by the time you run "KILL QUERY" command. >> >> As you can see from the source iterator doesn’t closed in the moment of >> `KILL QUERY` execution. >> I suppose that should mean that query still executed. >> >>> returns only the queries which were originated from the ignite0 node. >> >> This system view returns queries that are *running* on the node. >> I can see «"SELECT _KEY, _VAL FROM INTEGER» in the results of select. >> I suppose that mean that query are executed on the server node. >> >>> Try to replace "ignite0" with a "client" node in this line. I think it may >>> help >> >> I tried and it doesn’t work, also. >> `KILL QUERY` command just freeze on >> `CommandProcessor#processKillQueryCommand` line 478. >> >> ``` >> /** @throws Exception If failed. */ >> @Test >> public void testCancelSQLQuery() throws Exception { >> IgniteEx ignite0 = startGrids(NODES_CNT); >> IgniteEx client = startClientGrid("client"); >> >> ignite0.cluster().state(ACTIVE); >> >> initCache(client); >> >> SqlFieldsQuery qry = new SqlFieldsQuery("SELECT _KEY, _VAL FROM >> INTEGER").setSchema("default").setPageSize(10); >> Iterator<List<?>> iter = queryProcessor(client).querySqlFields(qry, >> true).iterator(); >> >> assertNotNull(iter.next()); >> >> List<List<?>> sqlQries0 = SqlViewExporterSpiTest.execute(client, "SELECT >> * FROM SYS.SQL_QUERIES"); >> assertEquals(2, sqlQries0.size()); >> >> >> String qryId = (String)sqlQries0.get(0).get(0); >> assertEquals("SELECT _KEY, _VAL FROM INTEGER", sqlQries0.get(0).get(1)); >> >> //Here test just freeze. >> SqlViewExporterSpiTest.execute(client, "KILL QUERY '" + qryId + "'"); >> >> while(iter.hasNext()) >> assertNotNull(iter.next()); >> >> fail("You shouldn't be here!"); >> } >> `` >> >> >> >>> 2 марта 2020 г., в 12:46, Roman Kondakov <kondako...@mail.ru.INVALID> >>> написал(а): >>> >>> Hi Nikolay, >>> >>> I think that problem here is that the query you are trying to kill is >>> >>>> "SELECT QUERY_ID FROM SYS.SQL_QUERIES" >>> >>> itself, which is already completed by the time you run "KILL QUERY" command. >>> >>> I'm not an expert in the system views, but it seems to me that the line >>> >>>> List<List<?>> sqlQries0 = SqlViewExporterSpiTest.execute(ignite0, "SELECT >>>> QUERY_ID FROM SYS.SQL_QUERIES"); >>> >>> returns only the queries which were originated from the ignite0 node. >>> Since "SELECT _KEY, _VAL FROM INTEGER" was started on the client node, >>> it doesn't get into that list. >>> >>> Try to replace "ignite0" with a "client" node in this line. I think it >>> may help: >>> >>>> List<List<?>> sqlQries0 = SqlViewExporterSpiTest.execute(client, "SELECT >>>> QUERY_ID FROM SYS.SQL_QUERIES"); >>> >>> >>> >>> -- >>> Kind Regards >>> Roman Kondakov >>> >>> >>> On 02.03.2020 12:02, Nikolay Izhikov wrote: >>>> Hello, Igniters. >>>> >>>> Ignite right now support `KILL QUERY` command. >>>> I tried to use it and stuck with the simple test. >>>> Error is «Query with provided ID doesn’t exist» >>>> >>>> Can you, please, advise me - How KILL QUERY should be used? >>>> >>>> ``` >>>> @Test >>>> public void testCancelSQLQuery() throws Exception { >>>> IgniteEx ignite0 = startGrids(NODES_CNT); >>>> IgniteEx client = startClientGrid("client"); >>>> >>>> ignite0.cluster().state(ACTIVE); >>>> >>>> initCache(client); >>>> >>>> SqlFieldsQuery qry = new SqlFieldsQuery("SELECT _KEY, _VAL FROM >>>> INTEGER").setSchema("default").setPageSize(10); >>>> Iterator<List<?>> iter = queryProcessor(client).querySqlFields(qry, >>>> true).iterator(); >>>> >>>> assertNotNull(iter.next()); >>>> >>>> List<List<?>> sqlQries0 = SqlViewExporterSpiTest.execute(ignite0, >>>> "SELECT QUERY_ID FROM SYS.SQL_QUERIES"); >>>> assertEquals(1, sqlQries0.size()); >>>> >>>> String qryId = (String)sqlQries0.get(0).get(0); >>>> SqlViewExporterSpiTest.execute(client, "KILL QUERY '" + qryId + "'»); >>>> >>>> //Expecting this iteration will fail. >>>> while(iter.hasNext()) >>>> assertNotNull(iter.next()); >>>> >>>> fail("You shouldn't be here!"); >>>> } >>>> >>>> private void initCache(IgniteEx client) { >>>> IgniteCache<Object, Object> cache = client.getOrCreateCache( >>>> new >>>> CacheConfiguration<>(DEFAULT_CACHE_NAME).setIndexedTypes(Integer.class, >>>> Integer.class)); >>>> >>>> for (int i = 0; i < PAGE_SZ * PAGE_SZ; i++) >>>> cache.put(i, i); >>>> } >>>> ``` >>>> >>>> ``` >>>> class org.apache.ignite.internal.processors.query.IgniteSQLException: >>>> Failed to cancel query >>>> [nodeId=4f812490-47b9-4331-8b51-d783f5300000,qryId=1,err=Query with >>>> provided ID doesn't exist [nodeId=4f812490-47b9-4331-8b51-d783f5300000, >>>> qryId=1]] >>>> >>>> at >>>> org.apache.ignite.internal.processors.query.h2.CommandProcessor.processKillQueryCommand(CommandProcessor.java:482) >>>> at >>>> org.apache.ignite.internal.processors.query.h2.CommandProcessor.runCommand(CommandProcessor.java:411) >>>> at >>>> org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.executeCommand(IgniteH2Indexing.java:996) >>>> at >>>> org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.querySqlFields(IgniteH2Indexing.java:1085) >>>> at >>>> org.apache.ignite.internal.processors.query.GridQueryProcessor$4.applyx(GridQueryProcessor.java:2454) >>>> ```` >>>> >>