[sheepdog] [PATCH v2 1/3] sheep: change gateway_forward_request() for forwarding requests to all other nodes
Liu Yuan
namei.unix at gmail.com
Wed Sep 5 05:39:21 CEST 2012
On 09/02/2012 10:34 AM, Hitoshi Mitake wrote:
> @@ -301,7 +319,7 @@ int gateway_write_obj(struct request *req)
> if (sys->enable_write_cache && !req->local && !bypass_object_cache(req))
> return object_cache_handle_request(req);
>
> - return gateway_forward_request(req);
> + return gateway_forward_request(req, 0);
> }
>
> int gateway_create_and_write_obj(struct request *req)
> @@ -309,10 +327,10 @@ int gateway_create_and_write_obj(struct request *req)
> if (sys->enable_write_cache && !req->local && !bypass_object_cache(req))
> return object_cache_handle_request(req);
>
> - return gateway_forward_request(req);
> + return gateway_forward_request(req, 0);
> }
>
> int gateway_remove_obj(struct request *req)
> {
> - return gateway_forward_request(req);
> + return gateway_forward_request(req, 0);
> }
I'd suggest following control flow structure if possible:
...
nr_to_send= init_target_nodes(target_nodes, all_node);
for (i = 0; i < nr_to_send; i++) {
struct sockfd *sfd;
struct node_id *nid;
struct sd_node *n;
n = target_nodes[i];
if (node_is_local(n)) {
local = i;
continue;
}
nid = &v->nid;
sfd = sheep_get_sockfd(nid);
if (!sfd) {
err_ret = SD_RES_NETWORK_ERROR;
break;
}
ret = send_req(sfd->fd, &hdr, req->data, &wlen);
if (ret) {
sheep_del_sockfd(nid, sfd);
err_ret = SD_RES_NETWORK_ERROR;
dprintf("fail %d\n", ret);
break;
}
write_info_advance(&wi, nid, sfd);
}
...
For init_target_nodes(), we need a new helper oid_to_nodes().
Thanks,
Yuan
More information about the sheepdog
mailing list