diff options
author | Jeff Darcy <jdarcy@redhat.com> | 2013-05-31 10:07:57 -0400 |
---|---|---|
committer | Anand Avati <avati@redhat.com> | 2013-06-03 01:06:36 -0700 |
commit | a3e593f9f17cb1e68db97bb5a0d8074793a33964 (patch) | |
tree | cc71f90a5fe2220e7e2e6e0f097870be1e862147 /xlators/cluster/dht/src/dht-layout.c | |
parent | 9e974f9311869fb317c9c691ed09e7dd18047248 (diff) |
cluster/dht: Return success in dht_discover if layout issues
We cannot heal in dht_discover, as it is a gfid based lookup, and not
path based. So, returning error here would lead to app's to see failure.
Also, update the layout in inode_ctx even if it has anomalies. Let
subsequent heals fix the issue.
Change-Id: I2358aadacf9a24e20a22ab0a6055c38c5eb6485c
BUG: 960348
Original-author: shishir gowda <sgowda@redhat.com>
Signed-off-by: shishir gowda <sgowda@redhat.com>
Signed-off-by: Jeff Darcy <jdarcy@redhat.com>
Reviewed-on: http://review.gluster.org/4959
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
Diffstat (limited to 'xlators/cluster/dht/src/dht-layout.c')
-rw-r--r-- | xlators/cluster/dht/src/dht-layout.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/xlators/cluster/dht/src/dht-layout.c b/xlators/cluster/dht/src/dht-layout.c index 0572298699c..07e8cbae495 100644 --- a/xlators/cluster/dht/src/dht-layout.c +++ b/xlators/cluster/dht/src/dht-layout.c @@ -593,7 +593,8 @@ dht_layout_anomalies (xlator_t *this, loc_t *loc, dht_layout_t *layout, int -dht_layout_normalize (xlator_t *this, loc_t *loc, dht_layout_t *layout) +dht_layout_normalize (xlator_t *this, loc_t *loc, dht_layout_t *layout, + uint32_t *missing_p) { int ret = 0; int i = 0; @@ -605,6 +606,7 @@ dht_layout_normalize (xlator_t *this, loc_t *loc, dht_layout_t *layout) ret = dht_layout_sort (layout); if (ret == -1) { + /* defensive coding; this can't happen currently */ gf_log (this->name, GF_LOG_WARNING, "sort failed?! how the ...."); goto out; @@ -614,23 +616,26 @@ dht_layout_normalize (xlator_t *this, loc_t *loc, dht_layout_t *layout) &holes, &overlaps, &missing, &down, &misc, NULL); if (ret == -1) { + /* defensive coding; this can't happen currently */ gf_log (this->name, GF_LOG_WARNING, "error while finding anomalies in %s -- not good news", loc->path); goto out; } - if (holes || overlaps) { + ret = holes + overlaps; + if (ret) { if (missing == layout->cnt) { gf_log (this->name, GF_LOG_DEBUG, "directory %s looked up first time", loc->path); } else { gf_log (this->name, GF_LOG_INFO, - "found anomalies in %s. holes=%d overlaps=%d", - loc->path, holes, overlaps); + "found anomalies in %s. holes=%d overlaps=%d" + " missing=%d down=%d misc=%d", + loc->path, holes, overlaps, missing, down, + misc); } - ret = -1; } for (i = 0; i < layout->cnt; i++) { @@ -645,14 +650,14 @@ dht_layout_normalize (xlator_t *this, loc_t *loc, dht_layout_t *layout) (layout->list[i].xlator ? layout->list[i].xlator->name : "<>")); - if ((layout->list[i].err == ENOENT) && (ret >= 0)) { - ret++; - } } } out: + if (missing_p) { + *missing_p = missing; + } return ret; } |