Nikolay, as I can see, when you run "SELECT * FROM SYS.SQL_QUERIES ORDER BY START_TIME" from the client node (not from the server node as was in your first reproducer), the query you are looking for is correctly returned in the view's result set. Right? So, the problem with this error message is solved, isn't it?
> Error is «Query with provided ID doesn’t exist» The another problem you've encountered after running KILL QUERY command with correct qryId is freezing. Am I correct? If yes, this is a known issue and I am working on it. -- Kind Regards Roman Kondakov On 02.03.2020 14:02, Nikolay Izhikov wrote: > 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) >>>>> ```` >>>>> >>> >