Thanks Dimitriy!

We try use this node predicate :      
ignite.affinity("CacheNM").isPrimary(clusterNode, "Key1")

To located the Primary service of the a specific key;  when call 
ignite#services();   not verified,  but should can work. 


Regards
Aaron


aa...@tophold.com
 
From: Dmitriy Setrakyan
Date: 2017-09-12 13:41
To: user
CC: aaron
Subject: Re: Re: When cache node switch between primary and backup any 
notification be received?


On Mon, Sep 11, 2017 at 6:54 PM, aa...@tophold.com <aa...@tophold.com> 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?

Reply via email to