[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