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

Maksim Timonin reassigned IGNITE-16158:
---------------------------------------

    Assignee: Maksim Timonin

> QueryCursor.close CacheQuery doesn't cancel query
> -------------------------------------------------
>
>                 Key: IGNITE-16158
>                 URL: https://issues.apache.org/jira/browse/IGNITE-16158
>             Project: Ignite
>          Issue Type: New Feature
>            Reporter: Maksim Timonin
>            Assignee: Maksim Timonin
>            Priority: Minor
>
> ```
> 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);
> cursor.close();
> }
> ```
> QueryCursor holds a future that will be completed with iterator over result 
> data.
> Starting a query spawns a new thread locally that query cache in background, 
> prepares data, and it completes the future with iterator. All affected nodes 
> run such threads.
> But cancelling of query with `QueryCursor.close` doesn't cancel query, and it 
> will prepare data that will never request. Also cancelling of query doesn't 
> clean up iterator.
>  
> For local query 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.
>  
> But for remote queries those structures spends memory. And closing of cursor 
> has to cancel them.



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

Reply via email to