diff options
Diffstat (limited to 'xlators/mgmt')
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-brick-ops.c | 10 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-utils.c | 14 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-volume-ops.c | 18 |
3 files changed, 41 insertions, 1 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-brick-ops.c b/xlators/mgmt/glusterd/src/glusterd-brick-ops.c index 706dadef71e..2fcd769e136 100644 --- a/xlators/mgmt/glusterd/src/glusterd-brick-ops.c +++ b/xlators/mgmt/glusterd/src/glusterd-brick-ops.c @@ -22,6 +22,8 @@ #include "glusterd-server-quorum.h" #include "run.h" #include "glusterd-volgen.h" +#include "syscall.h" +#include "compat-errno.h" #include <sys/signal.h> /* misc */ @@ -1609,6 +1611,14 @@ glusterd_op_perform_remove_brick (glusterd_volinfo_t *volinfo, char *brick, goto out; } + ret = sys_lremovexattr (brickinfo->path, GF_XATTR_BRICK_PATH); + if (ret == -1 && errno != ENODATA) { + gf_log (THIS->name, GF_LOG_ERROR, + "Error removing xattr %s. Reaason: %s", + GF_XATTR_BRICK_PATH, strerror (errno)); + goto out; + } + brickinfo->decommissioned = 1; ret = 0; out: diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c index 27bf68d50e1..948670632bb 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.c +++ b/xlators/mgmt/glusterd/src/glusterd-utils.c @@ -6262,8 +6262,10 @@ glusterd_check_and_set_brick_xattr (char *host, char *path, uuid_t uuid, } - if (!is_force) + if (!is_force) { flags = XATTR_CREATE; + //sys_lremovexattr (path, GF_XATTR_BRICK_PATH); + } ret = sys_lsetxattr (path, GF_XATTR_VOL_ID_KEY, uuid, 16, flags); @@ -6274,6 +6276,16 @@ glusterd_check_and_set_brick_xattr (char *host, char *path, uuid_t uuid, goto out; } + ret = sys_lsetxattr (path, GF_XATTR_BRICK_PATH, path, strlen (path), + flags); + + if (ret == -1) { + snprintf (msg, sizeof (msg), "Failed to set extended " + "attributes %s, reason: %s", + GF_XATTR_BRICK_PATH, strerror (errno)); + goto out; + } + ret = 0; out: if (strlen (msg)) diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c index 97fb5605715..9fb60cc0802 100644 --- a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c +++ b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c @@ -1610,6 +1610,24 @@ glusterd_op_stage_start_volume (dict_t *dict, char **op_errstr, goto out; } + /* check GF_XATTR_BRICK_PATH is set to brick path */ + ret = gf_compare_or_fix_xattr_brick_path (brickinfo->path); + + if (ret != 0) { + gf_log (this->name, GF_LOG_ERROR, "Error comparing %s " + "on %s", GF_XATTR_BRICK_PATH, brickinfo->path); + if (strstr (brickinfo->path, "/snaps/")) { + /* + * This is "naturally" going to be wrong on + * snap bricks, but that's OK. + */ + ret = 0; + } else { + ret = -1; + goto out; + } + } + /* A bricks mount dir is required only by snapshots which were * introduced in gluster-3.6.0 */ |
