Fwd: Re: When cache node switch between primary and backup any notification be received?

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Fwd: Re: When cache node switch between primary and backup any notification be received?

dsetrakyan
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?