Hi Denis,

You are correct. Thank you!
Affinity is not affected by IgniteCompute. My mistake.
I get a hold of an IgniteCompute _before_ the Affinity is applied.

So. It seems that a “dynamic cluster group based on a predicate” will work
beautifully!!
I can simply add my gating function there.

I knew that Ignite most likely had some clever solution hiding in the
wings!!

These are my thoughts on implementing it.

1) Create a REPLICATED, ReadyForLoadCache
As Nodes become “ready for load”, write a new row to the ReadyForLoadCache. 
I.e. write  a Key=NodeId  Value=”true” row 

2) Use a Continuous Query that watches the ReadyForLoadCache.
It will use a SQL Query to collect all rows that are “true”
The results will be stored locally in a Set<NodeId> nodesReadyForLoad;

3) In the ComputeTask::map() method, use;

   ClusterGroup readyNodes = cluster.forPredicate((node) ->
readyForLoadMonitor.isTakingLoad(node));
   IgniteCompute c = ignite.compute(readyNodes);

where isTakingLoad(node) will simply check the Set<NodeId> nodesReadyForLoad

4) I still need to handle Nodes coming & going with some sort of “outside
monitor”, that will monitor when Nodes leave the Grid. And thus, can remove
the row from the ReadyForLoadCache (or make it "false")
This will lilely just listen to Grid Events.

Any comments??

FWIW, I do not think synchronization can work for me.
This is very high volume, low latency app.
And honestly, I dont really see how I'd implement it 

Thanks again for all of your help.
Cheers,
-- Chris





--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/

Reply via email to