At Wed, 23 Oct 2013 15:59:12 +0800,
Liu Yuan wrote:
> 
> For erasure coding with x:y scheme, we can still promise the data reliability
> with x nodes alive and provide services. There is no reason we don't do it in
> sheepdog.
> 
> Signed-off-by: Liu Yuan <namei.u...@gmail.com>
> ---
>  sheep/plain_store.c |   13 -------------
>  sheep/recovery.c    |   19 ++++++-------------
>  2 files changed, 6 insertions(+), 26 deletions(-)
> 
> diff --git a/sheep/plain_store.c b/sheep/plain_store.c
> index fde7c9f..02db25e 100644
> --- a/sheep/plain_store.c
> +++ b/sheep/plain_store.c
> @@ -463,19 +463,6 @@ static bool oid_stale(uint64_t oid)
>       const struct sd_vnode *obj_vnodes[SD_MAX_COPIES];
>       vinfo = get_vnode_info();
>  
> -     /*
> -      * If vinfo->nr_zones < SD_EC_DP, we might not get the idx, so we don't
> -      * know it is stale or not. In this case, we keep it stay in the working
> -      * directory in order to recover it when we get enough zones
> -      */
> -     if (is_erasure_oid(oid)) {
> -             uint8_t policy = get_vdi_copy_policy(oid_to_vid(oid));
> -             int edp = ec_policy_to_dp(policy, NULL, NULL);
> -
> -             if (unlikely(vinfo->nr_zones < edp))
> -                     return false;
> -     }
> -
>       nr_copies = get_obj_copy_number(oid, vinfo->nr_zones);
>       oid_to_vnodes(oid, &vinfo->vroot, nr_copies, obj_vnodes);
>       for (i = 0; i < nr_copies; i++) {
> diff --git a/sheep/recovery.c b/sheep/recovery.c
> index 39ca2b1..3c59756 100644
> --- a/sheep/recovery.c
> +++ b/sheep/recovery.c
> @@ -431,17 +431,15 @@ out:
>       return lost;
>  }
>  
> -static uint8_t local_node_copy_index(struct rb_root *vroot, uint64_t oid)
> +static uint8_t local_node_copy_index(struct vnode_info *vinfo, uint64_t oid)

I think we can make vinfo a constant variable.

>  {
> -     const struct sd_node *target_nodes[SD_MAX_NODES];
> -     uint8_t policy = get_vdi_copy_policy(oid_to_vid(oid));
>       uint8_t idx;
> -     int edp = ec_policy_to_dp(policy, NULL, NULL);
>  
> -     oid_to_nodes(oid, vroot, edp, target_nodes);
> -     for (idx = 0; idx < edp; idx++)
> -             if (node_is_local(target_nodes[idx]))
> +     for (idx = 0; idx < vinfo->nr_zones; idx++) {

I think idx should be declared here as int like as follows.

    for (int idx = 0; idx < vinfo->nr_zones; idx++) { 

Thanks,

Kazutaka
-- 
sheepdog mailing list
sheepdog@lists.wpkg.org
http://lists.wpkg.org/mailman/listinfo/sheepdog

Reply via email to