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 <[email protected]>
>> написал(а):
>>
>> 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)
>>> ````
>>>
>