see https://review.gluster.org/#/c/19788/, https://review.gluster.org/#/c/19871/, https://review.gluster.org/#/c/19952/, https://review.gluster.org/#/c/20104/, https://review.gluster.org/#/c/20162/, https://review.gluster.org/#/c/20185/, https://review.gluster.org/#/c/20207/, https://review.gluster.org/#/c/20227/, https://review.gluster.org/#/c/20307/, https://review.gluster.org/#/c/20320/, https://review.gluster.org/#/c/20332/, https://review.gluster.org/#/c/20364/, https://review.gluster.org/#/c/20441/, and https://review.gluster.org/#/c/20484 shebangs changed from /usr/bin/python2 to /usr/bin/python3. (Reminder, various distribution packaging guidelines require use of explicit python version and don't allow '#!/usr/bin/env python', regardless of how handy that idiom may be.) glusterfs.spec(.in) package python{2,3}-gluster and python2 or python3 dependencies as appropriate. configure(.ac): + test for and use python2 or python3 as appropriate. If build machine has python2 and python3, use python3. Override by setting PYTHON=/usr/bin/python2 when running configure. + PYTHONDEV_CPPFLAGS from python[23]-config --includes is a better match to the original python sysconfig.get_python_inc(). All those other extraneous flags breaks the build. + Only change the shebangs once. Changing them over and over again, e.g., during a `make glusterrpms` in extras/LinuxRPM just sends make (is it really make that's looping?) into an infinite loop. If you figure out why, let me know. + Oldest python2 is python2.6 on CentOS 6 and Debian 8 (Jessie). Everything else has 2.7 or 3.x + logic from https://review.gluster.org/c/glusterfs/+/21050, which needs to be removed/merged after that patch is merged. Builds on CentOS 6, CentOS 7, Fedora 28, Fedora rawhide, and the mysterious RHEL > 7. Change-Id: Idae21d3b6f58b32372e1daa0d234e491e563198f updates: #411 Signed-off-by: Kaleb S. KEITHLEY <kkeithle@redhat.com>
70 lines
1.8 KiB
Python
Executable File
70 lines
1.8 KiB
Python
Executable File
#!/usr/bin/python3
|
|
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
|
|
try:
|
|
ls_glusterfind_dir = os.listdir(glusterfind_dir)
|
|
except OSError:
|
|
ls_glusterfind_dir = []
|
|
|
|
for session in ls_glusterfind_dir:
|
|
# don't blow away the keys directory
|
|
if session == ".keys":
|
|
continue
|
|
|
|
# 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()
|