summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--extras/hook-scripts/Makefile.am6
-rwxr-xr-xextras/hook-scripts/S57glusterfind-delete-post.py60
-rw-r--r--glusterfs.spec.in6
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)