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