At Fri, 20 Jul 2012 17:12:21 +0000, Dietmar Maurer wrote: > > after some more thinking, this is also wrong. I would be really great to > have some documentation about that? How does read/write during recovery > works exactly. > > I first though we can simply reject reads. For writes, we can reject them > until we start object recovery. After that point we cache written data (but > still reject reads). When we have received the whole object we merge with > write cache. But that is not the way it works? Sheepdog has two object ID queues for recovery, rw->oids and rw->prio_oids. All object IDs accessed from VMs during object recovery are pushed into a high priority queue (rw->prio_oids). Sheep will recover objects in rw->prio_oids first, and after rw->prio_oids becomes empty, sheep will recover objects in the normal priority queue (rw->oids). That's the reason sheep doesn't block I/Os during object recovery long time. (Yuan, correct me if I'm wrong.) I think we cannot delay the recovery of rw->prio_oids but can delay rw->oids. It will work something like lazy recovery; objects will be recovered when they are accessed. Thanks, Kazutaka |