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