|
|
3604df |
From 2e072bb19d47080ca91c181698cfcf1beb60b8b1 Mon Sep 17 00:00:00 2001
|
|
|
3604df |
From: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
|
|
|
3604df |
Date: Fri, 16 Sep 2016 13:08:00 +0530
|
|
|
3604df |
Subject: [PATCH 37/86] extras: kill processes gracefully
|
|
|
3604df |
|
|
|
3604df |
Currently all of brick, gsyncd and other glustershd services/processes
|
|
|
3604df |
are killed without checking for ongoing tasks such as geo-rep,
|
|
|
3604df |
self-heal, rebalance and etc. which may lead to inconsistency after
|
|
|
3604df |
the node is brought back.
|
|
|
3604df |
|
|
|
3604df |
This patch introduce an option '-g' which ensures whether all the
|
|
|
3604df |
gluster processes are ready (not busy) to be terminated before we
|
|
|
3604df |
executing 'kill' on them
|
|
|
3604df |
|
|
|
3604df |
Usage: ./extras/stop-all-gluster-processes.sh [-g] [-h]
|
|
|
3604df |
options:
|
|
|
3604df |
-g Terminate in graceful mode
|
|
|
3604df |
-h Show this message, then exit
|
|
|
3604df |
|
|
|
3604df |
eg:
|
|
|
3604df |
1. ./extras/stop-all-gluster-processes.sh
|
|
|
3604df |
2. ./extras/stop-all-gluster-processes.sh -g
|
|
|
3604df |
|
|
|
3604df |
By default, this script executes in force mode, processes are killed
|
|
|
3604df |
without checking for ongoing tasks, on specifying '-g' option this
|
|
|
3604df |
script works in graceful mode, which returns exitcode if some of gluster
|
|
|
3604df |
processes are busy in doing their jobs.
|
|
|
3604df |
|
|
|
3604df |
exitcodes include:
|
|
|
3604df |
0 No errors/Success
|
|
|
3604df |
64 Rebalance is in progress
|
|
|
3604df |
65 Self-Heal is in progress
|
|
|
3604df |
66 Tier daemon running on this node
|
|
|
3604df |
127 option not found
|
|
|
3604df |
|
|
|
3604df |
Backport of:
|
|
|
3604df |
> Change-Id: I2f924b2bf9f04a81788d0f5604895a42755b33a1
|
|
|
3604df |
> BUG: 1367771
|
|
|
3604df |
> Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
|
|
|
3604df |
> Reviewed-on: http://review.gluster.org/15188
|
|
|
3604df |
> Tested-by: Prasanna Kumar Kalever <pkalever@redhat.com>
|
|
|
3604df |
> Smoke: Gluster Build System <jenkins@build.gluster.org>
|
|
|
3604df |
> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
|
|
|
3604df |
> Reviewed-by: Rajesh Joseph <rjoseph@redhat.com>
|
|
|
3604df |
> CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
|
|
|
3604df |
> Reviewed-by: Ravishankar N <ravishankar@redhat.com>
|
|
|
3604df |
> Reviewed-by: mohammed rafi kc <rkavunga@redhat.com>
|
|
|
3604df |
> Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
|
|
|
3604df |
|
|
|
3604df |
Change-Id: I2f924b2bf9f04a81788d0f5604895a42755b33a1
|
|
|
3604df |
BUG: 1294754
|
|
|
3604df |
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
|
|
|
3604df |
Reviewed-on: https://code.engineering.redhat.com/gerrit/84768
|
|
|
3604df |
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
|
|
|
3604df |
---
|
|
|
3604df |
extras/stop-all-gluster-processes.sh | 111 +++++++++++++++++++++++++++++++++-
|
|
|
3604df |
1 files changed, 110 insertions(+), 1 deletions(-)
|
|
|
3604df |
|
|
|
3604df |
diff --git a/extras/stop-all-gluster-processes.sh b/extras/stop-all-gluster-processes.sh
|
|
|
3604df |
index 356a2a6..f11c634 100755
|
|
|
3604df |
--- a/extras/stop-all-gluster-processes.sh
|
|
|
3604df |
+++ b/extras/stop-all-gluster-processes.sh
|
|
|
3604df |
@@ -1,4 +1,37 @@
|
|
|
3604df |
#!/usr/bin/env bash
|
|
|
3604df |
+#
|
|
|
3604df |
+# Kill all the processes/services except glusterd
|
|
|
3604df |
+#
|
|
|
3604df |
+# Usage: ./extras/stop-all-gluster-processes.sh [-g] [-h]
|
|
|
3604df |
+# options:
|
|
|
3604df |
+# -g Terminate in graceful mode
|
|
|
3604df |
+# -h Show this message, then exit
|
|
|
3604df |
+#
|
|
|
3604df |
+# eg:
|
|
|
3604df |
+# 1. ./extras/stop-all-gluster-processes.sh
|
|
|
3604df |
+# 2. ./extras/stop-all-gluster-processes.sh -g
|
|
|
3604df |
+#
|
|
|
3604df |
+# By default, this script executes in force mode, i.e. all of brick, gsyncd
|
|
|
3604df |
+# and other glustershd services/processes are killed without checking for
|
|
|
3604df |
+# ongoing tasks such as geo-rep, self-heal, rebalance and etc. which may lead
|
|
|
3604df |
+# to inconsistency after the node is brought back.
|
|
|
3604df |
+#
|
|
|
3604df |
+# On specifying '-g' option this script works in graceful mode, to maintain
|
|
|
3604df |
+# data consistency the script fails with a valid exit code incase if any of
|
|
|
3604df |
+# the gluster processes are busy in doing their jobs.
|
|
|
3604df |
+#
|
|
|
3604df |
+# The author of page [1] proposes user-defined exit codes to the range 64 - 113
|
|
|
3604df |
+# Find the better explanation behind the choice in the link
|
|
|
3604df |
+#
|
|
|
3604df |
+# The exit code returned by stop-all-gluster-processes.sh:
|
|
|
3604df |
+# 0 No errors/Success
|
|
|
3604df |
+# 64 Rebalance is in progress
|
|
|
3604df |
+# 65 Self-Heal is in progress
|
|
|
3604df |
+# 66 Tier daemon running on this node
|
|
|
3604df |
+# 127 option not found
|
|
|
3604df |
+#
|
|
|
3604df |
+# [1] http://www.tldp.org/LDP/abs/html/exitcodes.html
|
|
|
3604df |
+
|
|
|
3604df |
|
|
|
3604df |
# global
|
|
|
3604df |
errors=0
|
|
|
3604df |
@@ -64,8 +97,84 @@ kill_georep_gsync()
|
|
|
3604df |
fi
|
|
|
3604df |
}
|
|
|
3604df |
|
|
|
3604df |
+# check if all processes are ready to die
|
|
|
3604df |
+check_background_tasks()
|
|
|
3604df |
+{
|
|
|
3604df |
+ volumes=$(gluster vol list)
|
|
|
3604df |
+ quit=0
|
|
|
3604df |
+ for volname in ${volumes};
|
|
|
3604df |
+ do
|
|
|
3604df |
+ # tiering
|
|
|
3604df |
+ if [[ $(gluster volume tier ${volname} status 2> /dev/null |
|
|
|
3604df |
+ grep "localhost" | grep -c "in progress") -gt 0 ]]
|
|
|
3604df |
+ then
|
|
|
3604df |
+ quit=66
|
|
|
3604df |
+ break;
|
|
|
3604df |
+ fi
|
|
|
3604df |
+
|
|
|
3604df |
+ # rebalance
|
|
|
3604df |
+ if [[ $(gluster volume rebalance ${volname} status 2> /dev/null |
|
|
|
3604df |
+ grep -c "in progress") -gt 0 ]]
|
|
|
3604df |
+ then
|
|
|
3604df |
+ quit=64
|
|
|
3604df |
+ break;
|
|
|
3604df |
+ fi
|
|
|
3604df |
+
|
|
|
3604df |
+ # self heal
|
|
|
3604df |
+ if [[ $(gluster volume heal ${volname} info | grep "Number of entries" |
|
|
|
3604df |
+ awk '{ sum+=$4} END {print sum}') -gt 0 ]];
|
|
|
3604df |
+ then
|
|
|
3604df |
+ quit=65
|
|
|
3604df |
+ break;
|
|
|
3604df |
+ fi
|
|
|
3604df |
+
|
|
|
3604df |
+ # geo-rep, snapshot and quota doesn't need grace checks,
|
|
|
3604df |
+ # as they ensures the consistancy on force kills
|
|
|
3604df |
+ done
|
|
|
3604df |
+
|
|
|
3604df |
+ echo ${quit}
|
|
|
3604df |
+}
|
|
|
3604df |
+
|
|
|
3604df |
+usage()
|
|
|
3604df |
+{
|
|
|
3604df |
+ cat <
|
|
|
3604df |
+Usage: $0 [-g] [-h]
|
|
|
3604df |
+ options:
|
|
|
3604df |
+ -g Terminate in graceful mode
|
|
|
3604df |
+ -h Show this message, then exit
|
|
|
3604df |
+
|
|
|
3604df |
+eg:
|
|
|
3604df |
+ 1. $0
|
|
|
3604df |
+ 2. $0 -g
|
|
|
3604df |
+EOM
|
|
|
3604df |
+}
|
|
|
3604df |
+
|
|
|
3604df |
main()
|
|
|
3604df |
{
|
|
|
3604df |
+ while getopts "gh" opt; do
|
|
|
3604df |
+ case $opt in
|
|
|
3604df |
+ g)
|
|
|
3604df |
+ # graceful mode
|
|
|
3604df |
+ quit=$(check_background_tasks)
|
|
|
3604df |
+ if [[ ${quit} -ne 0 ]]
|
|
|
3604df |
+ then
|
|
|
3604df |
+ exit ${quit};
|
|
|
3604df |
+ fi
|
|
|
3604df |
+ # else safe to kill
|
|
|
3604df |
+ ;;
|
|
|
3604df |
+ h)
|
|
|
3604df |
+ usage
|
|
|
3604df |
+ exit 0;
|
|
|
3604df |
+ ;;
|
|
|
3604df |
+ *)
|
|
|
3604df |
+ usage
|
|
|
3604df |
+ exit 127;
|
|
|
3604df |
+ ;;
|
|
|
3604df |
+ esac
|
|
|
3604df |
+ done
|
|
|
3604df |
+ # remove all the options that have been parsed by getopts
|
|
|
3604df |
+ shift $((OPTIND-1))
|
|
|
3604df |
+
|
|
|
3604df |
kill_mounts TERM
|
|
|
3604df |
kill_bricks_and_services TERM
|
|
|
3604df |
kill_georep_gsync TERM
|
|
|
3604df |
@@ -81,4 +190,4 @@ main()
|
|
|
3604df |
exit ${errors};
|
|
|
3604df |
}
|
|
|
3604df |
|
|
|
3604df |
-main
|
|
|
3604df |
+main "$@"
|
|
|
3604df |
--
|
|
|
3604df |
1.7.1
|
|
|
3604df |
|