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

Reply via email to