summaryrefslogtreecommitdiffstats
path: root/xlators/cluster/dht/src/dht-common.c
diff options
context:
space:
mode:
authorshishir gowda <sgowda@redhat.com>2013-07-31 14:45:03 +0530
committerVijay Bellur <vbellur@redhat.com>2013-09-24 23:48:04 -0700
commit83937d1666f1f5e395afc7b2df477e9aad4c2278 (patch)
tree6e3b188667a014ed040891d518390da55c8b930e /xlators/cluster/dht/src/dht-common.c
parentaa971f439d6eef9e52091915ce7ab1127aac1368 (diff)
Revert "cluster/dht: Return success in dht_discover if layout issues"
This reverts commit a3e593f9f17cb1e68db97bb5a0d8074793a33964 which was bought into fix dht_layout_anomalies error handling. We still see applications error'ing out due to graph switches. To fix the above issue - 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. Conflicts: xlators/cluster/dht/src/dht-common.c Signed-off-by: shishir gowda <sgowda@redhat.com> Change-Id: I68c1056c3587e04a02344548546ddd06034489c5 BUG: 960348 Reviewed-on: http://review.gluster.org/5443 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Vijay Bellur <vbellur@redhat.com>
Diffstat (limited to 'xlators/cluster/dht/src/dht-common.c')
-rw-r--r--xlators/cluster/dht/src/dht-common.c52
1 files changed, 15 insertions, 37 deletions
diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c
index b1fee655b..57f75c9aa 100644
--- a/xlators/cluster/dht/src/dht-common.c
+++ b/xlators/cluster/dht/src/dht-common.c
@@ -154,7 +154,6 @@ dht_discover_complete (xlator_t *this, call_frame_t *discover_frame)
int ret = -1;
dht_layout_t *layout = NULL;
dht_conf_t *conf = NULL;
- uint32_t missing = 0;
local = discover_frame->local;
layout = local->layout;
@@ -191,33 +190,20 @@ dht_discover_complete (xlator_t *this, call_frame_t *discover_frame)
goto out;
}
} else {
- ret = dht_layout_normalize (this, &local->loc, layout,
- &missing);
- if (ret < 0) {
- gf_log (this->name, GF_LOG_DEBUG,
- "normalizing failed on %s (internal error)",
- local->loc.path);
- op_errno = EIO;
- goto out;
- }
- if (missing == conf->subvolume_cnt) {
+ ret = dht_layout_normalize (this, &local->loc, layout);
+ if ((ret < 0) || ((ret > 0) && (local->op_ret != 0))) {
+ /* either the layout is incorrect or the directory is
+ * not found even in one subvolume.
+ */
gf_log (this->name, GF_LOG_DEBUG,
- "normalizing failed on %s, ENOENT errors: %u)",
- local->loc.path, missing);
- op_errno = ENOENT;
- goto out;
- }
- if (ret != 0) {
- gf_log (this->name, GF_LOG_WARNING,
"normalizing failed on %s "
- "(overlaps/holes present)", local->loc.path);
- /* We may need to do the lookup again */
- /* in discover call, parent is not know, and basename
- * of entry is also not available. Without which we
- * cannot build a layout correctly to heal it. Hence
- * returning ESTALE */
- op_errno = ESTALE;
- goto out;
+ "(overlaps/holes present: %s, "
+ "ENOENT errors: %d)", local->loc.path,
+ (ret < 0) ? "yes" : "no", (ret > 0) ? ret : 0);
+ if ((ret > 0) && (ret == conf->subvolume_cnt)) {
+ op_errno = ESTALE;
+ goto out;
+ }
}
if (local->inode)
@@ -421,7 +407,6 @@ dht_lookup_dir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
dht_layout_t *layout = NULL;
int ret = -1;
int is_dir = 0;
- uint32_t missing = 0;
GF_VALIDATE_OR_GOTO ("dht", frame, out);
GF_VALIDATE_OR_GOTO ("dht", this, out);
@@ -502,16 +487,9 @@ unlock:
}
if (local->op_ret == 0) {
- ret = dht_layout_normalize (this, &local->loc, layout,
- &missing);
-
- /*
- * Arguably, we shouldn't do self-heal just because
- * bricks are missing as long as there are no other
- * anomalies. For now, though, just preserve the
- * existing behavior.
- */
- if ((ret != 0) || (missing != 0)) {
+ ret = dht_layout_normalize (this, &local->loc, layout);
+
+ if (ret != 0) {
gf_log (this->name, GF_LOG_DEBUG,
"fixing assignment on %s",
local->loc.path);