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

Reply via email to