[ 
https://issues.apache.org/jira/browse/IGNITE-16158?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Maksim Timonin updated IGNITE-16158:
------------------------------------
    Ignite Flags:   (was: Docs Required,Release Notes Required)

> Cancel of local CacheQuery doesn't stop query
> ---------------------------------------------
>
>                 Key: IGNITE-16158
>                 URL: https://issues.apache.org/jira/browse/IGNITE-16158
>             Project: Ignite
>          Issue Type: New Feature
>            Reporter: Maksim Timonin
>            Priority: Minor
>              Labels: good-first-issue, newbie
>
> ```
> IgniteCache<Long, Person> cache = crd.createCache("CACHE");
> try (IgniteDataStreamer<Long, Person> streamer = 
> ignite.dataStreamer(cache.getName())) {
>      for (int i = 0; i < CNT; i++)
>            streamer.addData((long)i, new Person(i));
> }
> IndexQuery<Long, Person> qry = new IndexQuery<Long, Person>(Person.class, IDX)
> .setCriteria(lt("id", CNT / 2));
> QueryCursor cursor = cache.query(qry.setLocal(true));
> cursor.close();
> }
> ```
> QueryCursor holds a future that is completed with iterator over result data.
> Starting a query spawns a new thread that query cache in background, prepares 
> data, and it completes the future with iterator.
> But cancelling of query with `QueryCursor.close` doesn't stops the background 
> thread, and it will prepare data that will never request. Also cancelling of 
> query doesn't clean up iterator.
> This issue doesn't lead to any memory leaks, and the future and the iterator 
> will be cleaned up by GC later. But actually we can help to GC by avoiding 
> preparing the data and by explicit cleaning of those structures.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to