The step for completing the distributed version of the Links 'R' Us PageRank calculation service is to provide a job.Runner implementation that will allow the dbspgraph package to interface with the PageRank calculator component that includes the graph-based algorithm that we want to execute.
As a reminder, this is the interface that we need to implement:
type Runner interface { StartJob(Details, bspgraph.ExecutorFactory) (*bspgraph.Executor, error) CompleteJob(Details) error AbortJob(Details) }
The glue logic for masters and workers has a different set of requirements. For example, the master will not perform any graph-related computations apart from processing the aggregator deltas sent in by the workers.
Therefore, the master does not need to load any graph data into memory. On the other hand, workers not only need to load a subset of the graph data, but they also need to persist the computation results once the job execution completes.
Consequently, we need to provide not one but two job.Runner implementations—one for the master and one for workers.