Igniters, Does anyone else see potential issues on user side with current approach?
Sam, is this JCache requirement? --Yakov 2017-08-29 15:16 GMT+03:00 Nikolay Izhikov <nizhikov....@gmail.com>: > Yakov. > > I think exception equals `true` is intended behavior. > > Filter evaluation implementation from master - [1] > Test from master to check filter exception(without explicit asserts > checking listeners call) - [2] > > Here is my quick test with asserts on listener call after filter exception: > > ``` > package org.apache.ignite.internal.processors.cache.query.continuous; > > //... imports > > 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<>(); > > final CountDownLatch latch = new CountDownLatch(100); > > qry.setLocalListener(new CacheEntryUpdatedListener<Integer, > Integer>() { > @Override public void onUpdated(Iterable<CacheEntryEvent<? > extends Integer, ? extends Integer>> evts) { > for (CacheEntryEvent<? extends Integer, ? extends Integer> > evt : evts) > latch.countDown(); > } > }); > > 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); > > assertTrue(latch.await(10, SECONDS)); > } > } > > @Override protected CacheMode cacheMode() { > return CacheMode.REPLICATED; > } > > @Override protected int gridCount() { > return 1; > } > } > ``` > > [1] https://github.com/apache/ignite/blob/master/modules/core/ > src/main/java/org/apache/ignite/internal/processors/cache/ > query/continuous/CacheContinuousQueryHandler.java#L791 > > [2] https://github.com/apache/ignite/blob/master/modules/core/ > src/test/java/org/apache/ignite/internal/processors/cache/ > query/continuous/GridCacheContinuousQueryAbstractSelfTest.java#L359 > > > 29.08.2017 14:46, Yakov Zhdanov пишет: > > If filter throws exception entry would be passed to listener. >>> >> >> this is strange. Imagine a filter that very rarely throws some runtime >> exception due to external or environmental reasons, but in case of normal >> execution filter evaluates to false. In case of error entry is passed to a >> local listener which can lead to some serious consequences and >> inconsistencies in business logic. We probably need to send entry with a >> notion that there was an error on server. >> >> --Yakov >> >>