71 lines
1.2 KiB
Go
71 lines
1.2 KiB
Go
package mr
|
|
|
|
import "log"
|
|
import "net"
|
|
import "os"
|
|
import "net/rpc"
|
|
import "net/http"
|
|
|
|
|
|
type Coordinator struct {
|
|
// Your definitions here.
|
|
|
|
}
|
|
|
|
// Your code here -- RPC handlers for the worker to call.
|
|
|
|
//
|
|
// an example RPC handler.
|
|
//
|
|
// the RPC argument and reply types are defined in rpc.go.
|
|
//
|
|
func (c *Coordinator) Example(args *ExampleArgs, reply *ExampleReply) error {
|
|
reply.Y = args.X + 1
|
|
return nil
|
|
}
|
|
|
|
|
|
//
|
|
// start a thread that listens for RPCs from worker.go
|
|
//
|
|
func (c *Coordinator) server() {
|
|
rpc.Register(c)
|
|
rpc.HandleHTTP()
|
|
//l, e := net.Listen("tcp", ":1234")
|
|
sockname := coordinatorSock()
|
|
os.Remove(sockname)
|
|
l, e := net.Listen("unix", sockname)
|
|
if e != nil {
|
|
log.Fatal("listen error:", e)
|
|
}
|
|
go http.Serve(l, nil)
|
|
}
|
|
|
|
//
|
|
// main/mrcoordinator.go calls Done() periodically to find out
|
|
// if the entire job has finished.
|
|
//
|
|
func (c *Coordinator) Done() bool {
|
|
ret := false
|
|
|
|
// Your code here.
|
|
|
|
|
|
return ret
|
|
}
|
|
|
|
//
|
|
// create a Coordinator.
|
|
// main/mrcoordinator.go calls this function.
|
|
// nReduce is the number of reduce tasks to use.
|
|
//
|
|
func MakeCoordinator(files []string, nReduce int) *Coordinator {
|
|
c := Coordinator{}
|
|
|
|
// Your code here.
|
|
|
|
|
|
c.server()
|
|
return &c
|
|
}
|