Jyoti  I recently did a similar thing. In fact, my approach was exactly what Maja suggested.
However, there is a caveat. You can switch computation class for workers in mastercompute's
compute method but that requires the messages sent by computation class active before switching
and messages received by computation class after switching to be the same.
For instance
Superstep 1  ComputeA (M1)Superstep 2  ComputeA (M1)Superstep 3  ComputeB(receive M1,
outgoing is M2) > you can achieve this using AbstractComputation, instead of BasicComputation.However,
if ComputeB needs to be used in superstep4 as well i.e.Superstep 4  ComputeB [it receives
M2 but that conflicts with its definition]
So in this case the trick isSuperstep 1  ComputeA (M1)Superstep 2  ComputeA (M1)time to
switchSuperstep 3  NoOpMessageSink extends AbstractComputation<I,V,E,M1,M2> whose compute()
= { translate M1> M2}make the switchSuperstep 4  ComputeB (M2)Superstep 5  ComputeB
(M2)
and so on.
If your compute functions change alternatively then u can extend AbstractComputation likeSuperstep
1  ComputeA (extends AbstractComputation <M1, M2>)Superstep 2  ComputeB (extends
AbstractComputation <M2, M1>)Superstep 3  ComputeA (extends AbstractComputation <M1,
M2>)Superstep 4  ComputeB (extends AbstractComputation <M2, M1>)
@Maja, please addto /correct what I wrote.
Thanks.
From: majakabiljo@fb.com
To: user@giraph.apache.org
Subject: Re: Running one compute function after another..
Date: Sat, 11 Jan 2014 19:01:08 +0000
Hi Jyoti,
A cleaner way to do this is to switch Computation class which is used in the moment your condition
is satisfied. So you can have an aggregator to check whether the condition is met, and then
in your MasterCompute you call setComputation(SecondComputationClass.class)
when needed.
Regards,
Maja
From: Jyoti Yadav <rao.jyoti26yadav@gmail.com>
ReplyTo: "user@giraph.apache.org" <user@giraph.apache.org>
Date: Saturday, January 11, 2014 10:48 AM
To: "user@giraph.apache.org" <user@giraph.apache.org>
Subject: Re: Running one compute function after another..
Hi ????? ??π???????...
I will go by this..
Thanks...
On Sat, Jan 11, 2014 at 10:52 PM, ????? ??π???????
<ikapoura@csd.auth.gr> wrote:
Hey,
You can have a boolean variable initially set to true(or false, whatever). Then you divide
your code based on the value of that variable with an ifelse statement. For my example, if
the value is true then it goes through the first 'if'. When the condition
you want is fullfilled, change the value of the variable to false (at all nodes) and then
the second part will be executed.
Ilias
???? 11/1/2014 6:18 ??, ?/? Jyoti Yadav ??????:
Hi folks..
In my algorithm,all vertices execute one compute function upto certain condition, when that
condition is fulfilled,i want that all vertices now execute another compute function.Is it
possible??
Any ideas are highly appreciated..
Thanks
Jyoti
