[sheepdog] [PATCH v5 8/8] sheep: make gateway requests only retry when requested object is local
Liu Yuan
namei.unix at gmail.com
Mon May 28 06:15:34 CEST 2012
On 05/28/2012 11:43 AM, levin li wrote:
> From: levin li <xingke.lwp at taobao.com>
>
> We should not make gateway retry in check_request when the
> requested object in recovery is not local, in the case of requesting a
> non-local object we should make it retry in io_op_done(), if the
> requesting object is local, then we should make the gateway request
> to retry.
>
> Signed-off-by: levin li <xingke.lwp at taobao.com>
> ---
> sheep/sdnet.c | 39 ++++++++++++++++++++++++++-------------
> 1 file changed, 26 insertions(+), 13 deletions(-)
>
> diff --git a/sheep/sdnet.c b/sheep/sdnet.c
> index 7cbaff8..18a1ced 100644
> --- a/sheep/sdnet.c
> +++ b/sheep/sdnet.c
> @@ -215,22 +215,35 @@ static int check_request(struct request *req)
> retrying mechanism. */
> if (is_recoverying_oid(req->local_oid) &&
> !(req->rq.flags & SD_FLAG_CMD_RECOVERY)) {
> - if (req->rq.flags & SD_FLAG_CMD_IO_LOCAL) {
> - /* Sheep peer request */
> - if (is_recovery_init()) {
> - req->rp.result = SD_RES_OBJ_RECOVERING;
> - list_add_tail(&req->request_list,
> - &sys->wait_rw_queue);
> - } else
> - list_add_tail(&req->request_list,
> - &sys->wait_obj_queue);
> - } else {
> - /* Gateway request */
> - list_add_tail(&req->request_list, &sys->req_wait_for_obj_list);
> + /* Only if the requested object stays in gateway, then
> + the gateway request should be retried. */
> + if (!(req->rq.flags & SD_FLAG_CMD_IO_LOCAL)) {
> + struct sd_vnode *vnodes[SD_MAX_COPIES];
> + int i, nr_copies;
> +
> + nr_copies = get_nr_copies(req->vnodes);
> + oid_to_vnodes(req->vnodes, req->local_oid,
> + nr_copies, vnodes);
> + for (i = 0; i < nr_copies; i++) {
> + struct sd_vnode *vnode = vnodes[i];
> + if (is_myself(vnode->addr, vnode->port))
> + break;
> + }
> + if (i == nr_copies)
> + goto out;
> }
This check seems useless, req->local_oid already means it will access
the local copy.
Thanks,
Yuan
More information about the sheepdog
mailing list