On Mon, Sep 3, 2012 at 6:26 PM, Liu Yuan <namei.u...@gmail.com> wrote: > On 09/02/2012 08:59 PM, Yunkai Zhang wrote: >> +int gateway_repair_obj(struct request *req) >> +{ >> + struct sd_req fwdhdr, *hdr = &req->rq; >> + struct sd_vnode *vnodes[SD_MAX_COPIES]; >> + struct sd_rsp rsps[SD_MAX_COPIES]; >> + uint64_t oid = hdr->obj.oid; >> + struct node_id *src; >> + unsigned wlen; >> + int nr_objs; >> + >> + nr_objs = get_obj_copy_number(oid, req->vinfo->nr_zones); >> + >> + oid_to_vnodes(req->vinfo->vnodes, req->vinfo->nr_vnodes, >> + oid, nr_objs, vnodes); >> + >> + src = &vnodes[0]->nid; >> + wlen = sizeof(*src); >> + >> + memcpy(&fwdhdr, hdr, sizeof(fwdhdr)); >> + fwdhdr.opcode = gateway_to_peer_opcode(hdr->opcode); >> + fwdhdr.data_length = wlen; >> + fwdhdr.flags = SD_FLAG_CMD_WRITE; >> + >> + return forward_request_concurrently(&fwdhdr, src, &wlen, >> + &vnodes[1], rsps, NULL, >> + nr_objs - 1); >> +} > > I think we don't need REPAIR opcode, we can simply implement it as > gateway_read/gateway_write in collie side.
Yes we can do it in this way. But it's not so efficient: Collie should read the object, even if this object no belong to the node in collie side, and send it to target nodes. It will make network traffic increase rapidly in collie's machine. > > Thanks, > Yuan -- Yunkai Zhang Work at Taobao -- sheepdog mailing list sheepdog@lists.wpkg.org http://lists.wpkg.org/mailman/listinfo/sheepdog