From bdb4ca184913c82ccf9552298f5d5b597794f2aa Mon Sep 17 00:00:00 2001 From: Sanju Rakonde Date: Tue, 6 Nov 2018 19:44:16 +0530 Subject: glusterd: allow shared-storage to use bricks under glusterd working directory With commit 44e4db, we are not allowing user to create a volume using glusterd's working directory as a brick or any sub directory under glusterd's working directory as a brick.This has broken shared-storage since the volume "gluster-shared-storage" is created using the bricks under glusterd's working directory. With this patch, we let the "gluster-shared-storage" volume to use bricks under glusterd's working directory. fixes: bz#1647029 Change-Id: Ifcbcf4576eea12cf46f199dea287b29bd3ec3bfd Signed-off-by: Sanju Rakonde --- xlators/mgmt/glusterd/src/glusterd-brick-ops.c | 3 ++- xlators/mgmt/glusterd/src/glusterd-replace-brick.c | 3 ++- xlators/mgmt/glusterd/src/glusterd-reset-brick.c | 4 ++-- xlators/mgmt/glusterd/src/glusterd-utils.c | 9 +++++---- xlators/mgmt/glusterd/src/glusterd-utils.h | 4 ++-- xlators/mgmt/glusterd/src/glusterd-volume-ops.c | 3 ++- 6 files changed, 15 insertions(+), 11 deletions(-) diff --git a/xlators/mgmt/glusterd/src/glusterd-brick-ops.c b/xlators/mgmt/glusterd/src/glusterd-brick-ops.c index 3079f1990e7..f64237c4e18 100644 --- a/xlators/mgmt/glusterd/src/glusterd-brick-ops.c +++ b/xlators/mgmt/glusterd/src/glusterd-brick-ops.c @@ -1721,7 +1721,8 @@ glusterd_op_stage_add_brick(dict_t *dict, char **op_errstr, dict_t *rsp_dict) #endif ret = glusterd_validate_and_create_brickpath( - brickinfo, volinfo->volume_id, op_errstr, is_force, _gf_false); + brickinfo, volinfo->volume_id, volinfo->volname, op_errstr, + is_force, _gf_false); if (ret) goto out; diff --git a/xlators/mgmt/glusterd/src/glusterd-replace-brick.c b/xlators/mgmt/glusterd/src/glusterd-replace-brick.c index 4c0982e87e2..dcac3a8e52d 100644 --- a/xlators/mgmt/glusterd/src/glusterd-replace-brick.c +++ b/xlators/mgmt/glusterd/src/glusterd-replace-brick.c @@ -261,7 +261,8 @@ glusterd_op_stage_replace_brick(dict_t *dict, char **op_errstr, if (gf_is_local_addr(host)) { ret = glusterd_validate_and_create_brickpath( - dst_brickinfo, volinfo->volume_id, op_errstr, is_force, _gf_false); + dst_brickinfo, volinfo->volume_id, volinfo->volname, op_errstr, + is_force, _gf_false); if (ret) goto out; } diff --git a/xlators/mgmt/glusterd/src/glusterd-reset-brick.c b/xlators/mgmt/glusterd/src/glusterd-reset-brick.c index 1fb6ea7fd1f..41adc40b5ce 100644 --- a/xlators/mgmt/glusterd/src/glusterd-reset-brick.c +++ b/xlators/mgmt/glusterd/src/glusterd-reset-brick.c @@ -148,8 +148,8 @@ glusterd_reset_brick_prevalidate(dict_t *dict, char **op_errstr, ret = 0; if (gf_is_local_addr(host)) { ret = glusterd_validate_and_create_brickpath( - dst_brickinfo, volinfo->volume_id, op_errstr, is_force, - ignore_partition); + dst_brickinfo, volinfo->volume_id, volinfo->volname, op_errstr, + is_force, ignore_partition); if (ret) goto out; } else { diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c index 7687a8b9d67..a38dfe43908 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.c +++ b/xlators/mgmt/glusterd/src/glusterd-utils.c @@ -1468,8 +1468,8 @@ out: int glusterd_validate_and_create_brickpath(glusterd_brickinfo_t *brickinfo, - uuid_t volume_id, char **op_errstr, - gf_boolean_t is_force, + uuid_t volume_id, char *volname, + char **op_errstr, gf_boolean_t is_force, gf_boolean_t ignore_partition) { int ret = -1; @@ -1544,8 +1544,9 @@ glusterd_validate_and_create_brickpath(glusterd_brickinfo_t *brickinfo, parentdir, strerror(errno)); goto out; } - - if (sizeof(GLUSTERD_DEFAULT_WORKDIR) <= (strlen(brickinfo->path) + 1) && + if (strncmp(volname, GLUSTER_SHARED_STORAGE, + SLEN(GLUSTER_SHARED_STORAGE)) && + sizeof(GLUSTERD_DEFAULT_WORKDIR) <= (strlen(brickinfo->path) + 1) && !strncmp(brickinfo->path, GLUSTERD_DEFAULT_WORKDIR, (sizeof(GLUSTERD_DEFAULT_WORKDIR) - 1))) { len = snprintf(msg, sizeof(msg), diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.h b/xlators/mgmt/glusterd/src/glusterd-utils.h index 4bdc048dd35..cffbebda70c 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.h +++ b/xlators/mgmt/glusterd/src/glusterd-utils.h @@ -329,8 +329,8 @@ glusterd_check_and_set_brick_xattr(char *host, char *path, uuid_t uuid, int glusterd_validate_and_create_brickpath(glusterd_brickinfo_t *brickinfo, - uuid_t volume_id, char **op_errstr, - gf_boolean_t is_force, + uuid_t volume_id, char *volname, + char **op_errstr, gf_boolean_t is_force, gf_boolean_t ignore_partition); int glusterd_sm_tr_log_transition_add(glusterd_sm_tr_log_t *log, int old_state, diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c index 10a477f7857..e5d5a8380d2 100644 --- a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c +++ b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c @@ -1381,7 +1381,8 @@ glusterd_op_stage_create_volume(dict_t *dict, char **op_errstr, } #endif ret = glusterd_validate_and_create_brickpath( - brick_info, volume_uuid, op_errstr, is_force, _gf_false); + brick_info, volume_uuid, volname, op_errstr, is_force, + _gf_false); if (ret) goto out; -- cgit