You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Nikolay Izhikov (JIRA)" <ji...@apache.org> on 2017/08/30 12:57:00 UTC
[jira] [Updated] (IGNITE-6221) ContinuousQuery. Local listener
notified if filter throws exception
[ https://issues.apache.org/jira/browse/IGNITE-6221?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Nikolay Izhikov updated IGNITE-6221:
------------------------------------
Fix Version/s: (was: 2.2)
2.3
> ContinuousQuery. Local listener notified if filter throws exception
> -------------------------------------------------------------------
>
> Key: IGNITE-6221
> URL: https://issues.apache.org/jira/browse/IGNITE-6221
> Project: Ignite
> Issue Type: Bug
> Components: cache
> Affects Versions: 2.1
> Reporter: Nikolay Izhikov
> Priority: Minor
> Fix For: 2.3
>
>
> Local listener of continuous query receives event if filter throw exception from `evaluate`.
> Steps to reproduce the bug:
> 1. Run continuous query with remote filter.
> 2. Throw exception from filter.
> Current behavior:
> 3. Local listener notified.
> Expected behavior:
> 3. Local listener doesn't notify.
> [Mail-list discussion|http://apache-ignite-developers.2346864.n4.nabble.com/ContinuousQueryWithTransformer-implementation-questions-2-td21418.html]
> Filter description from [jcache Javadoc|https://static.javadoc.io/javax.cache/cache-api/1.0.0/javax/cache/event/CacheEntryEventFilter.html#evaluate(javax.cache.event.CacheEntryEvent)]:
> {noformat}
> Returns:
> true if the evaluation passes, otherwise false.
> The effect of returning true is that listener will be invoked
> {noformat}
> Test to reproduce error:
> {code:java}
> package org.apache.ignite.internal.processors.cache.query.continuous;
> import java.io.Serializable;
> import javax.cache.Cache;
> import javax.cache.event.CacheEntryEvent;
> import javax.cache.event.CacheEntryUpdatedListener;
> import org.apache.ignite.IgniteCache;
> import org.apache.ignite.cache.CacheEntryEventSerializableFilter;
> import org.apache.ignite.cache.CacheMode;
> import org.apache.ignite.cache.query.ContinuousQuery;
> import org.apache.ignite.cache.query.QueryCursor;
> public class GridCacheContinuousQueryFilterExceptionTest extends GridCacheContinuousQueryAbstractSelfTest implements Serializable {
> /**
> * @throws Exception If failed.
> */
> public void testListenerAfterFilterException() throws Exception {
> IgniteCache<Integer, Integer> cache = grid(0).cache(DEFAULT_CACHE_NAME);
> ContinuousQuery<Integer, Integer> qry = new ContinuousQuery<>();
> qry.setLocalListener(new CacheEntryUpdatedListener<Integer, Integer>() {
> @Override public void onUpdated(Iterable<CacheEntryEvent<? extends Integer, ? extends Integer>> evts) {
> fail("Listener shouldn't be called");
> }
> });
> qry.setRemoteFilter(new CacheEntryEventSerializableFilter<Integer, Integer>() {
> @Override public boolean evaluate(CacheEntryEvent<? extends Integer, ? extends Integer> evt) {
> throw new RuntimeException("Test error.");
> }
> });
> try (QueryCursor<Cache.Entry<Integer, Integer>> ignored = cache.query(qry)) {
> for (int i = 0; i < 100; i++)
> cache.put(i, i);
> }
> }
> @Override protected CacheMode cacheMode() {
> return CacheMode.REPLICATED;
> }
> @Override protected int gridCount() {
> return 1;
> }
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)