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