ignite-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Roman Kondakov <kondako...@mail.ru.INVALID>
Subject Re: How KILL QUERY should work?
Date Mon, 02 Mar 2020 10:48:57 GMT
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 <kondakov87@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)
>>> ````
>>>
> 

Mime
View raw message