glusterfs/tools/glusterfind/S57glusterfind-delete-post.py
Kaleb S. KEITHLEY af0d5a9b53 core: python3
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>
2018-09-03 09:14:44 +00:00

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()