summaryrefslogtreecommitdiffstats
path: root/xlators/mgmt
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/mgmt')
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-brick-ops.c10
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-utils.c14
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-volume-ops.c18
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
*/