[sheepdog] [PATCH] sheep: let outstanding IO req doesn't block confchg event

Liu Yuan namei.unix at gmail.com
Fri May 18 13:10:51 CEST 2012


On 05/17/2012 08:10 PM, Liu Yuan wrote:

> We already define the in-fly IO object as busy object, which sit on the
> sys->outstanding_req_list. So recovery request for this object will be queued
> on sys->req_wait_for_obj_list, where it will be resumed later.
> 
> So there is no need to block confchg event for outstanding IO thus confchg
> could be processed as soon as possible. Confchg should take precedence over IO
> req because:
> 
> Suppose doing heavy IO on each node while cluster is in recovery.
> Every node is issuing IO request while doing recovery. Both outstanding
> IO and unfinished confchg event blocks each other (nearly dead lock),
> all nodes are busy retrying those pending I/Os (live lock), and recovery
> requests are mostly denied of service, neither outstanding IO nor
> recovery moves on to completion.


Dropped for now, tests show that we need more work to allow concurrent
access to the same object both by gateway requests and recovery requests.

Thanks,
Yuan



More information about the sheepdog mailing list