You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by an...@apache.org on 2013/10/03 08:06:06 UTC

[08/50] git commit: updated refs/heads/4.2 to 86c9363

Fixed sysvmadm helper script (responsible for restarting/recreating VRs when needed on upgraded setups due to template changes) to have -v option. When -v is specified, all VPCs in the system will get restarted. As a part of the restart, VPC routers will get recreated


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/a14145bb
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/a14145bb
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/a14145bb

Branch: refs/heads/4.2
Commit: a14145bb5e063e4545789635943bf28712b8fa83
Parents: e81e6ef
Author: Alena Prokharchyk <al...@citrix.com>
Authored: Thu Sep 19 10:26:59 2013 -0700
Committer: Alena Prokharchyk <al...@citrix.com>
Committed: Thu Sep 19 10:28:19 2013 -0700

----------------------------------------------------------------------
 setup/bindir/cloud-sysvmadm.in | 102 ++++++++++++++++++++++++++++++++++--
 1 file changed, 99 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/a14145bb/setup/bindir/cloud-sysvmadm.in
----------------------------------------------------------------------
diff --git a/setup/bindir/cloud-sysvmadm.in b/setup/bindir/cloud-sysvmadm.in
index 3cb7858..e2a626e 100755
--- a/setup/bindir/cloud-sysvmadm.in
+++ b/setup/bindir/cloud-sysvmadm.in
@@ -23,13 +23,14 @@
 #set -x
 
 usage() {
-  printf "\nThe tool stopping/starting running system vms and domain routers \n\nUsage: %s: [-d] [-u] [-p] [-m] [-s] [-r] [-a] [-t] [-n] [-z]\n\n -d - cloud DB server ip address, defaulted to localhost if not specified \n -u - user name to access cloud DB, defaulted to "root" if not specified \n -p - cloud DB user password, defaulted to no password if not specified \n\n -m - the ip address of management server, defaulted to localhost if not specified\n\n -s - stop then start all running SSVMs and Console Proxies \n -r - stop then start all running Virtual Routers\n -a - stop then start all running SSVMs, Console Proxies, and Virtual Routers \n -n - restart all Guest networks \n -t - number of parallel threads used for stopping Domain Routers. Default is 10.\n -l - log file location. Default is cloud.log under current directory.\n -z - do restart only for the instances in the specific zone. If not specified, restart will apply to instances in all zones\n\n" $(basename $0) >&2
+  printf "\nThe tool stopping/starting running system vms and domain routers \n\nUsage: %s: [-d] [-u] [-p] [-m] [-s] [-r] [-a] [-t] [-n] [-z] [-v]\n\n -d - cloud DB server ip address, defaulted to localhost if not specified \n -u - user name to access cloud DB, defaulted to "root" if not specified \n -p - cloud DB user password, defaulted to no password if not specified \n\n -m - the ip address of management server, defaulted to localhost if not specified\n\n -s - stop then start all running SSVMs and Console Proxies \n -r - stop then start all running Virtual Routers\n -a - stop then start all running SSVMs, Console Proxies, and Virtual Routers \n -n - restart all Guest networks \n -t - number of parallel threads used for stopping Domain Routers. Default is 10.\n -l - log file location. Default is cloud.log under current directory.\n -z - do restart only for the instances in the specific zone. If not specified, restart will apply to instances in all zones\n -v - do restart all VPCs
  in the entire system\n\n" $(basename $0) >&2
 }
 
 
 system=
 router=
 all=
+vpc=
 db=localhost
 ms=localhost
 user=root
@@ -42,7 +43,7 @@ inzone=""
 
 
 
-while getopts 'sarhnd:m:u:p:t:l:z:' OPTION
+while getopts 'sarhnvd:m:u:p:t:l:z:' OPTION
 do
   case $OPTION in
   s)    system=1
@@ -53,6 +54,8 @@ do
         ;;
   a)    all=1
         ;;
+  v)    vpc=1
+        ;;
   d)    db="$OPTARG"
         ;;
   u)    user="$OPTARG"
@@ -317,6 +320,92 @@ restart_network(){
     
 }
 
+
+restart_vpc(){
+    echo -e "INFO: Restarting vpc with id $1"
+    echo "INFO: Restarting vpc with id $1" >>$LOGFILE
+    jobid=`curl -sS "http://$ms:8096/?command=restartVPC&id=$1&response=json" | sed 's/\"//g' | sed 's/ //g' | sed 's/{//g' | sed 's/}//g' | awk -F: {'print $3'}`
+    if [ "$jobid" == "" ]; then
+        echo "ERROR: Failed to restart vpc with id $1" >>$LOGFILE
+        echo 2
+        return
+    fi
+    
+    jobresult=$(query_async_job_result $jobid)
+    
+    if [ "$jobresult" != "1" ]; then
+        echo -e "ERROR: Failed to restart vpc with id $1 \n"
+        echo "ERROR: Failed to restart vpc with id $1" >>$LOGFILE
+    else
+        echo -e "INFO: Successfully restarted vpc with id $1 \n"
+        echo "INFO: Successfully restarted vpc with id $1" >>$LOGFILE
+    fi
+}
+
+
+restart_vpcs(){
+    vpcs=(`mysql -h $db --user=$user --password=$password --skip-column-names -U cloud -e "select id from vpc WHERE removed is null$zone"`)
+    length_vpcs=(${#vpcs[@]})
+    
+    echo -e "\nRestarting $length_vpcs vpcs... "
+    echo -e "Restarting $length_vpcs vpcs... " >>$LOGFILE
+    
+    #Spawn restart vpcs in parallel - run commands in <n> chunks - number of threads is configurable
+
+    pids=()
+    for d in "${vpcs[@]}"; do
+        
+        restart_vpc $d &
+
+        pids=( "${pids[@]}" $! )
+        
+        length_pids=(${#pids[@]})
+        unfinishedPids=(${#pids[@]})
+        
+        if [ $maxthreads -gt $length_vpcs ]; then
+            maxthreads=$length_vpcs
+        fi
+        
+        if [ $length_pids -ge $maxthreads ]; then
+            while [ $unfinishedPids -gt 0 ]; do
+                sleep 10
+                count=0
+                for ((  i = 0 ;  i < $length_pids;  i++  )); do
+                    if ! ps ax | grep -v grep | grep ${pids[$i]} > /dev/null; then
+                        count=`expr $count + 1`
+                    fi
+                done
+                
+                if [ $count -eq $unfinishedPids ]; then
+                    unfinishedPids=0
+                fi
+                
+            done
+            
+            #remove all elements from pids
+            if [ $unfinishedPids -eq 0 ]; then
+                pids=()
+                length_pids=(${#pids[@]})
+            fi
+            
+        fi
+        
+    done
+
+    
+    if [ "$length_vpcs" == "0" ];then
+        echo -e "No vpcs found \n" >>$LOGFILE
+    else    
+        while [ $unfinishedPids -gt 0 ]; do
+            sleep 10
+        done
+        
+        echo -e "Done restarting vpcs$inzone. \n"
+        echo -e "Done restarting vpcs$inzone. \n" >>$LOGFILE
+        
+    fi
+}
+
 query_async_job_result() {
 while [ 1 ]
 do
@@ -329,7 +418,7 @@ sleep 5
 done
 }
 
-if [ "$system$router$all$help$redundant" == "" ]
+if [ "$system$router$all$help$redundant$vpc" == "" ]
 then
   usage
   exit
@@ -361,3 +450,10 @@ if [ "$redundant" == "1" ]
 then
       restart_networks
 fi
+
+if [ "$vpc" == "1" ]
+then
+      restart_vpcs
+fi
+
+