/** * Register a continuous query, that counts updates on the provided cache. * * @param cache Cache. * @param loc If {@code true}, then local continuous query will be registered. * @param updCntr Update counter. * @param rmtFilter Remote filter. */ private void listenToUpdates(IgniteCache<Integer, String> cache, boolean loc, AtomicInteger updCntr, CacheEntryEventSerializableFilter<Integer, String> rmtFilter) { ContinuousQuery<Integer, String> cq = new ContinuousQuery<>(); cq.setLocal(loc); cq.setLocalListener((evts) -> { for (CacheEntryEvent e : evts) updCntr.incrementAndGet(); }); if (rmtFilter != null) cq.setRemoteFilterFactory(FactoryBuilder.factoryOf(rmtFilter)); cache.query(cq); } }
qry.setInitialQuery(initialQry); cursor = cache.query(qry.setLocal(loc));
/** * @throws Exception If failed. */ private void doTest(boolean loc) throws Exception { try { IgniteCache<String, Integer> cache = startGrid(0).cache(DEFAULT_CACHE_NAME); ContinuousQuery<String, Integer> qry = new ContinuousQuery<>(); final AtomicInteger cnt = new AtomicInteger(); final CountDownLatch latch = new CountDownLatch(10); qry.setLocalListener(new CacheEntryUpdatedListener<String, Integer>() { @Override public void onUpdated(Iterable<CacheEntryEvent<? extends String, ? extends Integer>> evts) throws CacheEntryListenerException { for (CacheEntryEvent<? extends String, ? extends Integer> evt : evts) { cnt.incrementAndGet(); latch.countDown(); } } }); cache.query(qry.setLocal(loc)); startGrid(1); awaitPartitionMapExchange(); for (int i = 0; i < 10; i++) cache.put("key" + i, i); assert latch.await(5000, TimeUnit.MILLISECONDS); assertEquals(10, cnt.get()); } finally { stopAllGrids(); } }
cache.query(qry.setLocal(loc));
try (QueryCursor<Cache.Entry<Integer, Integer>> ignored = cache.query(qry.setLocal(true))) { int locKey = -1; int rmtKey = -1;
qry.setInitialQuery(initialQry); cursor = cache.query(qry.setLocal(loc));