Dmitry, Yes, you are right. we should broadcast a job with local scan queries.
On Mon, Oct 30, 2017 at 4:54 PM, Dmitry Pavlov <[email protected]> wrote: > Hi Andrey, should we limit scan query to be executed only for current node > here with setLocal() method? > > > пн, 30 окт. 2017 г. в 16:48, Andrey Mashenkov <[email protected] > >: > >> As a workaround you can try to broadcast a task : >> >> Collection<Integer> res = ignite.compute(ignite.cluster( >> ).forCacheNodes("mycache")).broadcast( >> >> new IgniteCallable<Integer>() { >> /** Auto-inject ignite instance. */ >> @IgniteInstanceResource >> private Ignite ignite; >> >> @Override public Integer call() { >> IgniteCache<Integer, Integer> cache = >> ignite.getOrCreateCache(CACHE_NAME); >> Iterator<Cache.Entry> curs = ((IgniteCache<Object, >> Entity>)cache) >> .query(new ScanQuery<Object, Entity>() >> ).iterator(); >> >> int cnt=0; >> while(curs.hasNext()){ >> cnt += ((CompositeEntity)entry.get >> Value()).size() >> } >> return cnt; >> } >> } >> ); >> >> On Mon, Oct 30, 2017 at 4:38 PM, Andrey Mashenkov < >> [email protected]> wrote: >> >>> Hi, >>> >>> This is known bug that transformer applies only to first page of results. >>> Here is a ticket [1] >>> >>> >>> [1] https://issues.apache.org/jira/browse/IGNITE-5804 >>> >>> On Sat, Oct 28, 2017 at 8:57 AM, naresh.goty <[email protected]> >>> wrote: >>> >>>> Hi All, >>>> >>>> We are seeing an issue with calculating size of few caches in our >>>> application, only when there >>>> are more than one server node is started at the same time. >>>> As part of startup routine, we have a custom load routine to load data >>>> to >>>> cache, and once load is successfully complete, then cache size is >>>> calculated. >>>> >>>> Below is the error observed in the log when the size() method is >>>> invoked: >>>> >>>> {"eventTime" : "Oct 20 2017 10:50:25.698 AM PDT", "thread" : >>>> "CacheExecutor-3", "level" : "ERROR", "class" : >>>> "com.service.CacheManager", >>>> "method" : "lambda$doLoad$146", "message" : ""} >>>> java.lang.ClassCastException: org.apache.ignite.lang.IgniteBiTuple >>>> cannot be >>>> cast to java.lang.Integer >>>> at >>>> java.util.stream.ReferencePipeline$4$1.accept( >>>> ReferencePipeline.java:210) >>>> at >>>> java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList. >>>> java:1374) >>>> at java.util.stream.AbstractPipeline.copyInto( >>>> AbstractPipeline.java:481) >>>> at >>>> java.util.stream.AbstractPipeline.wrapAndCopyInto( >>>> AbstractPipeline.java:471) >>>> at >>>> java.util.stream.ReduceOps$ReduceOp.evaluateSequential( >>>> ReduceOps.java:708) >>>> at java.util.stream.AbstractPipeline.evaluate( >>>> AbstractPipeline.java:234) >>>> at java.util.stream.IntPipeline.reduce(IntPipeline.java:456) >>>> at java.util.stream.IntPipeline.sum(IntPipeline.java:414) >>>> at com.cache.RangeCache.size(RangeCache.java:369) >>>> >>>> >>>> >>>> public int size() { >>>> >>>> return((IgniteCache<Object, Entity>)cache) >>>> .query(new ScanQuery<Object, >>>> Entity>(), (entry) -> >>>> ((CompositeEntity)entry.getValue()).size()) >>>> .getAll() >>>> .stream() >>>> .mapToInt(Integer::intValue) >>>> .sum(); >>>> >>>> } >>>> Note: Entity is a custom interface for cache entities, and >>>> CompositeEntity >>>> implements Entity. >>>> >>>> Please let us know if there if you find any issue with above >>>> method of >>>> calculating cache size. >>>> >>>> >>>> >>>> -- >>>> Sent from: http://apache-ignite-users.70518.x6.nabble.com/ >>>> >>> >>> >>> >>> -- >>> Best regards, >>> Andrey V. Mashenkov >>> >> >> >> >> -- >> Best regards, >> Andrey V. Mashenkov >> > -- Best regards, Andrey V. Mashenkov
