diff options
| author | Aravinda VK <avishwan@redhat.com> | 2015-05-27 18:05:35 +0530 | 
|---|---|---|
| committer | Vijay Bellur <vbellur@redhat.com> | 2015-06-12 03:01:07 -0700 | 
| commit | d28b226131d420070fa5cee921a4ad0be9d6446a (patch) | |
| tree | 41be8d01322e91385ae2e3bd80a415cdba247209 | |
| parent | 72a7a6ea78289b2897f9846dc4e111f442dd2788 (diff) | |
tools/glusterfind: Cleanup glusterfind dir after a volume delete
If `glusterfind delete` command was not run before volume delete, stale
session directories exists in /var/lib/glusterd/glusterfind directories.
Also shows these sessions in `glusterfind list`
When Volume is deleted, Post hook will be run which cleans up the stale
session directories
BUG: 1225465
Change-Id: I54c46c30313e92c1bb4cb07918ed2029b375462c
Signed-off-by: Aravinda VK <avishwan@redhat.com>
Reviewed-on: http://review.gluster.org/10944
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Kotresh HR <khiremat@redhat.com>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
| -rw-r--r-- | extras/hook-scripts/Makefile.am | 6 | ||||
| -rwxr-xr-x | extras/hook-scripts/S57glusterfind-delete-post.py | 60 | ||||
| -rw-r--r-- | glusterfs.spec.in | 6 | 
3 files changed, 71 insertions, 1 deletions
diff --git a/extras/hook-scripts/Makefile.am b/extras/hook-scripts/Makefile.am index 771b37e3fdf..f291261d123 100644 --- a/extras/hook-scripts/Makefile.am +++ b/extras/hook-scripts/Makefile.am @@ -1,7 +1,11 @@ -EXTRA_DIST = S40ufo-stop.py S56glusterd-geo-rep-create-post.sh +EXTRA_DIST = S40ufo-stop.py S56glusterd-geo-rep-create-post.sh \ +	S57glusterfind-delete-post.py  SUBDIRS = add-brick set start stop reset  scriptsdir = $(GLUSTERD_WORKDIR)/hooks/1/gsync-create/post/  if USE_GEOREP  scripts_SCRIPTS = S56glusterd-geo-rep-create-post.sh  endif + +deletehookscriptsdir = $(GLUSTERD_WORKDIR)/hooks/1/delete/post/ +deletehookscripts_SCRIPTS = S57glusterfind-delete-post.py diff --git a/extras/hook-scripts/S57glusterfind-delete-post.py b/extras/hook-scripts/S57glusterfind-delete-post.py new file mode 100755 index 00000000000..70edb563320 --- /dev/null +++ b/extras/hook-scripts/S57glusterfind-delete-post.py @@ -0,0 +1,60 @@ +#!/usr/bin/python +import os +import shutil +from errno import ENOENT +from subprocess import Popen, PIPE +from argparse import ArgumentParser + + +DEFAULT_GLUSTERD_WORKDIR = "/var/lib/glusterd" + + +def handle_rm_error(func, path, exc_info): +    if exc_info[1].errno == ENOENT: +        return + +    raise exc_info[1] + + +def get_glusterd_workdir(): +    p = Popen(["gluster", "system::", "getwd"], +              stdout=PIPE, stderr=PIPE) + +    out, _ = p.communicate() + +    if p.returncode == 0: +        return out.strip() +    else: +        return DEFAULT_GLUSTERD_WORKDIR + + +def get_args(): +    parser = ArgumentParser(description="Volume delete post hook script") +    parser.add_argument("--volname") +    return parser.parse_args() + + +def main(): +    args = get_args() +    glusterfind_dir = os.path.join(get_glusterd_workdir(), "glusterfind") + +    # Check all session directories, if any directory found for +    # the deleted volume, cleanup all the session directories +    for session in os.listdir(glusterfind_dir): +        # Possible session directory +        volume_session_path = os.path.join(glusterfind_dir, +                                           session, +                                           args.volname) +        if os.path.exists(volume_session_path): +            shutil.rmtree(volume_session_path, onerror=handle_rm_error) + +        # Try to Remove directory, if any other dir exists for different +        # volume, then rmdir will fail with ENOTEMPTY which is fine +        try: +            os.rmdir(os.path.join(glusterfind_dir, session)) +        except (OSError, IOError): +            pass + + +if __name__ == "__main__": +    main() diff --git a/glusterfs.spec.in b/glusterfs.spec.in index bf1794d7ddd..1ee637b6f28 100644 --- a/glusterfs.spec.in +++ b/glusterfs.spec.in @@ -1229,9 +1229,15 @@ fi  %{_libexecdir}/glusterfs/glusterfind  %{_bindir}/glusterfind  %{_libexecdir}/glusterfs/peer_add_secret_pub +%{_sharedstatedir}/glusterd/hooks/1/delete/post/S57glusterfind-delete-post.py +%exclude %{_sharedstatedir}/glusterd/hooks/1/delete/post/S57glusterfind-delete-post.pyc +%exclude %{_sharedstatedir}/glusterd/hooks/1/delete/post/S57glusterfind-delete-post.pyo  %changelog +* Tue Jun 02 2015 Aravinda VK <avishwan@redhat.com> +- Added post hook for volume delete as part of glusterfind (#1225465) +  * Wed May 27 2015 Aravinda VK <avishwan@redhat.com>  - Added stop-all-gluster-processes.sh in glusterfs-server section (#1204641)  | 
