diff options
author | Varun Shastry <vshastry@redhat.com> | 2013-10-15 17:25:51 +0530 |
---|---|---|
committer | Anand Avati <avati@redhat.com> | 2013-11-26 11:57:11 -0800 |
commit | 50a6e9a74014897b003cadbd297fd0343eb56367 (patch) | |
tree | 171cded6a73ebf7441d53f301859c5665d2ba7e9 /xlators/mgmt | |
parent | 8690388bc7b3fe92c5dfc43a7173d5f05137e9cd (diff) |
features/quota: Add the quota config xattr to newly added brick
Issue:
Quota directory limit configuration is stored in the xattrs. When a new brick
is added these 'limit-set' xattrs have to be created to the directory in the
new brick. This is done by the dht directory healing when the directory is
created in the new brick. Since 'root' directory is already created DHT doesn't
heal the limit-set xattr root.
Solution:
When the add-brick command is issued run the below hook script to heal the
'limit-set' xattr. The hook script does the following only if limit is
configured on root.
1. Create an auxiliary mount.
2. getxattr 'limit-set' on the root
3. setxattr the same value on the root
But this script needs the volume to be started to make the auxiliary mount.
To handle the case when the add-brick is issued when the volume was stopped,
symlink is created by the 'master' script to the corresponding location and
these two are by default disabled.
So, a 'master' script is added in the add-brick/pre. When add-brick command is
issued, it enables one of the scripts mentioned above based on the condition,
if volume is started - enable add-brick/post script
else - enable start/post script
After the actual script completes its job, it disables itself.
Note:
The enabling and disabling of the script is based on the glusterd's logic, that
it only runs the scripts which starts its name with 'S'. So,
Enable - symlink the file to 'S'*
Disable - unlink the symlink.
Change-Id: I2d3947a4d686c54417ec95f530af3bdd3444f4e2
BUG: 969461
Signed-off-by: Varun Shastry <vshastry@redhat.com>
Reviewed-on: http://review.gluster.org/6104
Reviewed-by: Brian Foster <bfoster@redhat.com>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
Diffstat (limited to 'xlators/mgmt')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-hooks.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-hooks.c b/xlators/mgmt/glusterd/src/glusterd-hooks.c index 2b43a452e0c..352b6ba1197 100644 --- a/xlators/mgmt/glusterd/src/glusterd-hooks.c +++ b/xlators/mgmt/glusterd/src/glusterd-hooks.c @@ -143,6 +143,24 @@ glusterd_hooks_get_hooks_cmd_subdir (glusterd_op_t op) return glusterd_hook_dirnames[op]; } +void +glusterd_hooks_add_working_dir (runner_t *runner, glusterd_conf_t *priv) +{ + runner_argprintf (runner, "--gd-workdir=%s", priv->workdir); +} + +void +glusterd_hooks_add_op (runner_t *runner, char *op) +{ + runner_argprintf (runner, "--volume-op=%s", op); +} + +void +glusterd_hooks_add_hooks_version (runner_t* runner) +{ + runner_argprintf (runner, "--version=%d", GLUSTERD_HOOK_VER); +} + int glusterd_hooks_set_volume_args (dict_t *dict, runner_t *runner) { @@ -216,6 +234,11 @@ glusterd_hooks_add_op_args (runner_t *runner, glusterd_op_t op, runner_argprintf (runner, "--first=%s", truth? "yes":"no"); + + glusterd_hooks_add_hooks_version (runner); + glusterd_hooks_add_op (runner, "start"); + glusterd_hooks_add_working_dir (runner, priv); + break; case GD_OP_STOP_VOLUME: @@ -250,6 +273,11 @@ glusterd_hooks_add_op_args (runner_t *runner, glusterd_op_t op, runner_argprintf (runner, "%s", hooks_args); break; + case GD_OP_ADD_BRICK: + glusterd_hooks_add_hooks_version (runner); + glusterd_hooks_add_op (runner, "add-brick"); + glusterd_hooks_add_working_dir (runner, priv); + default: break; |