diff options
-rw-r--r-- | cli/src/cli-rpc-ops.c | 11 | ||||
-rw-r--r-- | glusterfsd/src/glusterfsd-mgmt.c | 6 | ||||
-rw-r--r-- | tests/basic/afr/arbiter.t | 2 | ||||
-rw-r--r-- | xlators/cluster/afr/src/afr-self-heald.c | 5 |
4 files changed, 13 insertions, 11 deletions
diff --git a/cli/src/cli-rpc-ops.c b/cli/src/cli-rpc-ops.c index b4fbd29c1f1..416b1e09539 100644 --- a/cli/src/cli-rpc-ops.c +++ b/cli/src/cli-rpc-ops.c @@ -8475,13 +8475,10 @@ gf_cli_heal_volume_cbk (struct rpc_req *req, struct iovec *iov, } if (rsp.op_ret) { - if (strcmp (rsp.op_errstr, "")) { - cli_err ("%s", rsp.op_errstr); - } else { - cli_err ("%s%s on volume %s has been unsuccessful", - operation, heal_op_str, volname); - } - + cli_err ("%s%s on volume %s has been unsuccessful on " + "bricks that are down. Please check if all brick " + "processes are running.", + operation, heal_op_str, volname); ret = rsp.op_ret; goto out; } else { diff --git a/glusterfsd/src/glusterfsd-mgmt.c b/glusterfsd/src/glusterfsd-mgmt.c index 877adba2938..da801779079 100644 --- a/glusterfsd/src/glusterfsd-mgmt.c +++ b/glusterfsd/src/glusterfsd-mgmt.c @@ -563,6 +563,7 @@ int glusterfs_handle_translator_op (rpcsvc_request_t *req) { int32_t ret = -1; + int32_t op_ret = 0; gd1_mgmt_brick_op_req xlator_req = {0,}; dict_t *input = NULL; xlator_t *xlator = NULL; @@ -632,9 +633,12 @@ glusterfs_handle_translator_op (rpcsvc_request_t *req) ret = dict_get_str (input, key, &xname); xlator = xlator_search_by_name (any, xname); XLATOR_NOTIFY (xlator, GF_EVENT_TRANSLATOR_OP, input, output); + /* If notify fails for an xlator we need to capture it but + * continue with the loop. */ if (ret) - break; + op_ret = -1; } + ret = op_ret; out: glusterfs_xlator_op_response_send (req, ret, "", output); if (input) diff --git a/tests/basic/afr/arbiter.t b/tests/basic/afr/arbiter.t index f06fdb1c49f..be8f676d1ec 100644 --- a/tests/basic/afr/arbiter.t +++ b/tests/basic/afr/arbiter.t @@ -49,7 +49,7 @@ TEST $CLI volume set $V0 cluster.self-heal-daemon on EXPECT_WITHIN $PROCESS_UP_TIMEOUT "Y" glustershd_up_status EXPECT_WITHIN $CHILD_UP_TIMEOUT "1" afr_child_up_status_in_shd $V0 0 EXPECT_WITHIN $CHILD_UP_TIMEOUT "1" afr_child_up_status_in_shd $V0 2 -TEST $CLI volume heal $V0 +$CLI volume heal $V0 EXPECT_WITHIN $HEAL_TIMEOUT '1' echo $(count_sh_entries $B0/$V0"1") EXPECT_WITHIN $HEAL_TIMEOUT '1' echo $(count_sh_entries $B0/$V0"2") diff --git a/xlators/cluster/afr/src/afr-self-heald.c b/xlators/cluster/afr/src/afr-self-heald.c index 61b8b01afb4..9b8b8e85f2b 100644 --- a/xlators/cluster/afr/src/afr-self-heald.c +++ b/xlators/cluster/afr/src/afr-self-heald.c @@ -1058,7 +1058,7 @@ afr_xl_op (xlator_t *this, dict_t *input, dict_t *output) goto out; switch (op) { case GF_SHD_OP_HEAL_INDEX: - op_ret = -1; + op_ret = 0; for (i = 0; i < priv->child_count; i++) { healer = &shd->index_healers[i]; @@ -1067,10 +1067,12 @@ afr_xl_op (xlator_t *this, dict_t *input, dict_t *output) if (!priv->child_up[i]) { ret = dict_set_str (output, key, "Brick is not connected"); + op_ret = -1; } else if (AFR_COUNT (priv->child_up, priv->child_count) < 2) { ret = dict_set_str (output, key, "< 2 bricks in replica are up"); + op_ret = -1; } else if (!afr_shd_is_subvol_local (this, healer->subvol)) { ret = dict_set_str (output, key, "Brick is remote"); @@ -1078,7 +1080,6 @@ afr_xl_op (xlator_t *this, dict_t *input, dict_t *output) ret = dict_set_str (output, key, "Started self-heal"); afr_shd_index_healer_spawn (this, i); - op_ret = 0; } } break; |