Hi Andrey, should we limit scan query to be executed only for current node
here with setLocal() method?


пн, 30 окт. 2017 г. в 16:48, Andrey Mashenkov <andrey.mashen...@gmail.com>:

> 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.getValue()).size()
>
>                     }
>                     return cnt;
>                 }
>             }
>         );
>
> On Mon, Oct 30, 2017 at 4:38 PM, Andrey Mashenkov <
> andrey.mashen...@gmail.com> 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 <gnr.spri...@gmail.com>
>> 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
>

Reply via email to