- Lab 1: MapReduce
- Lab 2: Raft
- Lab 3: KV Raft
- Lab 4: Sharded KV
Q1:Lab1
比较简单,分别实现Worker.go
和Master.go
里的代码逻辑就行,主要讲一下超时机制,也就是在crash
条件下,worker
可能无法完成工作的情况?
解决思路是:在
Master
里起一个协程manager_unfinish
,里面有一个类似于UnMapWork
的channel
,Master
给Worker
分配任务的时候顺便将任务id
同时push
到这个channel
中,manager_unfinish
从channel
收到任务id
后就另外起协程map_time_alert
,它们的工作是先计时10s
,然后看对应的Worker
是否完成并返回,否则就讲此任务id
再一次push
到MapWork
的channel
中,继续分配任务。Reduce
也是同理。