From 52fd70500e0a00e273e2ec0c09d7c914b89432ce Mon Sep 17 00:00:00 2001 From: tedyu Date: Thu, 24 Mar 2016 06:55:45 -0700 Subject: [PATCH] HBASE-15486 Avoid multiple disable/enable balancer calls while running rolling-restart.sh --graceful (Samir Ahmic) --- bin/graceful_stop.sh | 21 ++++++++++++++++----- bin/rolling-restart.sh | 10 +++++++++- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/bin/graceful_stop.sh b/bin/graceful_stop.sh index f1f04d65254..510411eac8a 100755 --- a/bin/graceful_stop.sh +++ b/bin/graceful_stop.sh @@ -22,7 +22,7 @@ # Turn off the balancer before running this script. function usage { echo "Usage: graceful_stop.sh [--config ] [-e] [--restart [--reload]] [--thrift] \ -[--rest] " +[--rest] [-nob |--nobalancer ] " echo " thrift If we should stop/start thrift before/after the hbase stop/start" echo " rest If we should stop/start rest before/after the hbase stop/start" echo " restart If we should restart after graceful stop" @@ -34,6 +34,8 @@ moving regions" exit with error. Default value is INT_MAX." echo " hostname Hostname of server we are to stop" echo " e|failfast Set -e so exit immediately if any command exits with non-zero status" + echo " nob| nobalancer Do not manage balancer states. This is only used as optimization in \ +rolling_restart.sh to avoid multiple calls to hbase shell" exit 1 } @@ -54,6 +56,7 @@ rest= movetimeout=2147483647 maxthreads=1 failfast= +nob=false while [ $# -gt 0 ] do case "$1" in @@ -65,6 +68,7 @@ do --noack | -n) noack="--noack"; shift;; --maxthreads) shift; maxthreads=$1; shift;; --movetimeout) shift; movetimeout=$1; shift;; + --nobalancer | -nob) nob=true; shift;; --) shift; break;; -*) usage ;; *) break;; # terminate while loop @@ -97,9 +101,14 @@ if [ "$localhostname" == "$hostname" ]; then local=true fi -log "Disabling load balancer" -HBASE_BALANCER_STATE=`echo 'balance_switch false' | "$bin"/hbase --config ${HBASE_CONF_DIR} shell | tail -3 | head -1` -log "Previous balancer state was $HBASE_BALANCER_STATE" +if [ $nob == "true" ]; then + log "[ $0 ] skipping disabling balancer -nob argument is used" + HBASE_BALANCER_STATE=false +else + log "Disabling load balancer" + HBASE_BALANCER_STATE=$(echo 'balance_switch false' | "$bin"/hbase --config "${HBASE_CONF_DIR}" shell | tail -3 | head -1) + log "Previous balancer state was $HBASE_BALANCER_STATE" +fi log "Unloading $hostname region(s)" HBASE_NOEXEC=true "$bin"/hbase --config ${HBASE_CONF_DIR} org.apache.hadoop.hbase.util.RegionMover \ @@ -166,9 +175,11 @@ if [ "$restart" != "" ]; then fi # Restore balancer state -if [ $HBASE_BALANCER_STATE != "false" ]; then +if [ $HBASE_BALANCER_STATE != "false" ] && [ $nob != "true" ]; then log "Restoring balancer state to $HBASE_BALANCER_STATE" echo "balance_switch $HBASE_BALANCER_STATE" | "$bin"/hbase --config ${HBASE_CONF_DIR} shell &> /dev/null +else + log "[ $0 ] skipping restoring balancer" fi # Cleanup tmp files. diff --git a/bin/rolling-restart.sh b/bin/rolling-restart.sh index e6d25edb4ec..530b76ba346 100755 --- a/bin/rolling-restart.sh +++ b/bin/rolling-restart.sh @@ -188,6 +188,10 @@ else if [ "$zkrs" == "null" ]; then zkrs="rs"; fi zkrs="$zparent/$zkrs" online_regionservers=`$bin/hbase zkcli ls $zkrs 2>&1 | tail -1 | sed "s/\[//" | sed "s/\]//"` + echo "Disabling load balancer" + HBASE_BALANCER_STATE=$(echo 'balance_switch false' | "$bin"/hbase --config "${HBASE_CONF_DIR}" shell | tail -3 | head -1) + echo "Previous balancer state was $HBASE_BALANCER_STATE" + for rs in $online_regionservers do rs_parts=(${rs//,/ }) @@ -198,10 +202,14 @@ else continue else echo "Gracefully restarting: $hostname" - "$bin"/graceful_stop.sh --config ${HBASE_CONF_DIR} --restart --reload --maxthreads \ + "$bin"/graceful_stop.sh --config ${HBASE_CONF_DIR} --restart --reload -nob --maxthreads \ ${RR_MAXTHREADS} ${RR_NOACK} --movetimeout ${RR_MOVE_TIMEOUT} $hostname sleep 1 fi done + if [ "$HBASE_BALANCER_STATE" != "false" ]; then + echo "Restoring balancer state to $HBASE_BALANCER_STATE" + echo "balance_switch $HBASE_BALANCER_STATE" | "$bin"/hbase --config "${HBASE_CONF_DIR}" shell &> /dev/null + fi fi fi