Cross-sending to dev@.
Igniters, is it really this difficult to iterate over local partitions, or
is there a simpler way? What is worse, is that I could not find a single
example anywhere of how to do it. Seems like a pretty common use case.
D.
---------- Forwarded message ----------
From: Dmitriy Setrakyan <
[hidden email]>
Date: Mon, Sep 11, 2017 at 10:41 PM
Subject: Re: Re: When cache node switch between primary and backup any
notification be received?
To: user <
[hidden email]>
Cc:
[hidden email]
On Mon, Sep 11, 2017 at 6:54 PM,
[hidden email] <
[hidden email]>
wrote:
> Thanks Alexey! what we real want, we deploy service on each Cache Node.
> those service will use data from its' local cache.
>
> Client will call those remote service, Client should only call the
> service on primary node, this make those nodes work like master-slave mode
> automatically.
>
In Ignite, a node is a primary node for a certain partition. A key belongs
to a partition and a partition belongs to a node. A node may be primary for
key1 (partition N) and the same node may be a back up for key 2 (partition
M).
I think you simply should invoke your service on each node and only check
or iterate through primary keys stored on that node. You can get a list of
primary keys by using org.apache.ignite.cache.affinity.Affinity API, for
example Affinty.primaryPartitions(ClusterNode) method.
*int[] primaryPartitions =
> Ignite.affinity("cacheName").primaryPartitions(Ignite.cluster().localNode());*
>
> *for (int primaryPartition : primaryPartitions) { // Cursor over local
> entries for the given partition. QueryCursor<Entry<K,V>> cur =
> cache.query(new ScanQuery(primaryPartition));*
>
>
> * for (Entry<K, V> entry : cur) { // Do something on local entries. }}*
Does this make sense?