summaryrefslogtreecommitdiffstats
path: root/xlators/mgmt/glusterd/src/glusterd-brick-ops.c
diff options
context:
space:
mode:
authorAtin Mukherjee <amukherj@redhat.com>2016-04-11 16:07:40 +0530
committerAtin Mukherjee <amukherj@redhat.com>2016-04-18 06:57:04 -0700
commit0a92f05021ac7e24a16b09ef326461e6deeb5fc8 (patch)
tree9b2ec68a36bf59a72f8626667bd5e13948462ae3 /xlators/mgmt/glusterd/src/glusterd-brick-ops.c
parent80fd2a0d8b3da20755a38195f62fc4d7fc5f7b52 (diff)
glusterd: populate brickinfo->real_path conditionally
Backport of http://review.gluster.org/13965 glusterd_brickinfo_new_from_brick () is called from multiple places and one of them is glusterd_brick_rpc_notify where its very well possible that an underlying brick's file system has crashed and a disconnect event has been received. In this case glusterd tries to build the brickinfo from the brickid in the RPC request, however the same fails as glusterd_brickinfo_new_from_brick () fails from realpath. Fix is to skip populating real_path if its a disconnect event. Change-Id: I9d9149c64a9cf2247abb731f219c1b1eef037960 BUG: 1326174 Signed-off-by: Atin Mukherjee <amukherj@redhat.com> Reviewed-on: http://review.gluster.org/13965 Smoke: Gluster Build System <jenkins@build.gluster.com> CentOS-regression: Gluster Build System <jenkins@build.gluster.com> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> Reviewed-by: Jeff Darcy <jdarcy@redhat.com> Reviewed-on: http://review.gluster.org/13973
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-brick-ops.c')
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-brick-ops.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-brick-ops.c b/xlators/mgmt/glusterd/src/glusterd-brick-ops.c
index aaa6a1a8895..e30f27a242a 100644
--- a/xlators/mgmt/glusterd/src/glusterd-brick-ops.c
+++ b/xlators/mgmt/glusterd/src/glusterd-brick-ops.c
@@ -1039,7 +1039,8 @@ __glusterd_handle_remove_brick (rpcsvc_request_t *req)
" %s", i, brick);
ret = glusterd_volume_brickinfo_get_by_brick(brick, volinfo,
- &brickinfo);
+ &brickinfo,
+ _gf_true);
if (ret) {
snprintf (err_str, sizeof (err_str), "Incorrect brick "
@@ -1279,7 +1280,8 @@ glusterd_op_perform_add_bricks (glusterd_volinfo_t *volinfo, int32_t count,
if (brickid < 0)
goto out;
while ( i <= count) {
- ret = glusterd_brickinfo_new_from_brick (brick, &brickinfo);
+ ret = glusterd_brickinfo_new_from_brick (brick, &brickinfo,
+ _gf_true);
if (ret)
goto out;
@@ -1386,7 +1388,8 @@ glusterd_op_perform_add_bricks (glusterd_volinfo_t *volinfo, int32_t count,
while (i <= count) {
ret = glusterd_volume_brickinfo_get_by_brick (brick, volinfo,
- &brickinfo);
+ &brickinfo,
+ _gf_true);
if (ret)
goto out;
#ifdef HAVE_BD_XLATOR
@@ -1489,7 +1492,8 @@ glusterd_op_perform_remove_brick (glusterd_volinfo_t *volinfo, char *brick,
GF_ASSERT (priv);
ret = glusterd_volume_brickinfo_get_by_brick (brick, volinfo,
- &brickinfo);
+ &brickinfo,
+ _gf_true);
if (ret)
goto out;
@@ -1704,7 +1708,8 @@ glusterd_op_stage_add_brick (dict_t *dict, char **op_errstr, dict_t *rsp_dict)
}
- ret = glusterd_brickinfo_new_from_brick (brick, &brickinfo);
+ ret = glusterd_brickinfo_new_from_brick (brick, &brickinfo,
+ _gf_true);
if (ret) {
gf_msg (THIS->name, GF_LOG_ERROR, 0,
GD_MSG_BRICK_NOT_FOUND,
@@ -1827,7 +1832,8 @@ glusterd_remove_brick_validate_bricks (gf1_op_commands cmd, int32_t brick_count,
ret =
glusterd_volume_brickinfo_get_by_brick(brick, volinfo,
- &brickinfo);
+ &brickinfo,
+ _gf_true);
if (ret) {
snprintf (msg, sizeof (msg), "Incorrect brick "
"%s for volume %s", brick, volinfo->volname);