[
https://issues.apache.org/jira/browse/IGNITE-12778?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Nikolay Izhikov resolved IGNITE-12778.
--------------------------------------
Resolution: Invalid
Repdocuer is incorrect because the Next page for SQL query is fetched on the
last record read.
Following test succeed on current master:
{code:java}
public class KillQuerySelfTest extends GridCommonAbstractTest {
/** Page size. */
public static final int PAGE_SZ = 10;
/** Tests that query cursor don't fetch records from server after query was
canceled. */
@Test
public void testCancelSQLQuery() throws Exception {
try (IgniteEx srv = startGrid(0); IgniteEx cli = startClientGrid(1)) {
IgniteCache<Object, Object> cache = cli.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);
String qryStr = "SELECT * FROM \"default\".Integer";
SqlFieldsQuery qry = new
SqlFieldsQuery(qryStr).setPageSize(PAGE_SZ);
Iterator<List<?>> iter = queryProcessor(cli).querySqlFields(qry,
true).iterator();
assertNotNull(iter.next());
List<List<?>> sqlQries = SqlViewExporterSpiTest.execute(cli,
"SELECT QUERY_ID, SQL FROM SYS.SQL_QUERIES ORDER BY QUERY_ID");
assertEquals(2, sqlQries.size());
String qryId = (String)sqlQries.get(0).get(0);
assertEquals(qryStr, sqlQries.get(0).get(1));
SqlViewExporterSpiTest.execute(cli, "KILL QUERY '" + qryId + "'");
for (int i = 0; i < PAGE_SZ - 2; i++)
assertNotNull(iter.next());
GridTestUtils.assertThrowsWithCause(iter::next,
CacheException.class);
}
}
}
{code}
> KILL QUERY command doesn't close already fetched cursor
> -------------------------------------------------------
>
> Key: IGNITE-12778
> URL: https://issues.apache.org/jira/browse/IGNITE-12778
> Project: Ignite
> Issue Type: Bug
> Components: sql
> Affects Versions: 2.8
> Reporter: Nikolay Izhikov
> Assignee: Nikolay Izhikov
> Priority: Major
> Fix For: 2.9
>
>
> KILL QUERY doesn't close already fetched cursor.
> Reproducer:
> {code:java}
> public void testCancelSQLQuery() throws Exception {
> startGrids(NODES_CNT);
> 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<?>> sqlQries = SqlViewExporterSpiTest.execute(client,
> "SELECT * FROM SYS.SQL_QUERIES ORDER BY START_TIME");
> assertEquals(2, sqlQries.size());
> String qryId = (String)sqlQries.get(0).get(0);
> assertEquals("SELECT _KEY, _VAL FROM INTEGER",
> sqlQries.get(0).get(1));
> SqlViewExporterSpiTest.execute(client, "KILL QUERY '" + qryId + "'");
> while(iter.hasNext())
> assertNotNull(iter.next());
> fail("You shouldn't be here!"); //Fails here for now. but should
> fails on iter.next call.
> {code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)