[Ovirt-devel] [PATCH] generalized wait_for_service

Alan Pevec apevec at redhat.com
Wed Jul 2 10:17:40 UTC 2008


services were assumed to be ready immediately after startup, which isn't guaranteed
This generalizes waiting loop w/ timeout we had for postgres to a shell function, so it can be used where needed.
Portability fix by Jim Meyering <meyering at redhat.com>

Signed-off-by: Alan Pevec <apevec at redhat.com>
---
 wui/scripts/ovirt-wui-install |   35 ++++++++++++++++++++---------------
 1 files changed, 20 insertions(+), 15 deletions(-)

diff --git a/wui/scripts/ovirt-wui-install b/wui/scripts/ovirt-wui-install
index 6eb7d8e..8839358 100755
--- a/wui/scripts/ovirt-wui-install
+++ b/wui/scripts/ovirt-wui-install
@@ -71,6 +71,24 @@ find_ldap_base() {
     fi   
 }
 
+# wait_for_service 'test command' max_retries seconds_to_sleep_between_retries
+wait_for_service() {
+  local testcmd=$1; shift
+  local n_retries=$1; shift
+  local sleep_seconds=$1; shift
+  local total=$((n_retries*sleep_seconds))
+
+  while [ $n_retries -gt 0 ]
+  do
+    eval "$testcmd" > /dev/null 2>&1 && return 0
+    echo service not ready yet, retrying...
+    n_retries=$((n_retries-1))
+    sleep $sleep_seconds
+  done
+  printf 'service not ready after %d seconds, giving up\n' $total 1>&2
+  return 1
+}
+
 PASSWD=
 for i ; do
     case $1 in
@@ -124,6 +142,7 @@ fi
 # dnsmasq
 if [[ "$PROD_INST" == "false" ]]; then
     service libvirtd status > /dev/null 2&>1 || service libvirtd start > /dev/null 2>&1
+    wait_for_service 'virsh connect' 10 2 || exit 1
     virsh net-destroy default
     virsh net-undefine default
 fi
@@ -135,21 +154,7 @@ echo "host all all 127.0.0.1 255.255.255.0 trust" >> /var/lib/pgsql/data/pg_hba.
 service postgresql stop > /dev/null 2>&1
 service postgresql start
 [ $? != 0 ] && echo "Failed to start database" && exit 1
-declare -i timeout=10
-while [[ timeout -gt 0 ]]
-do
-  psql -l -U postgres > /dev/null 2>&1
-  rc=$?
-  if [[ rc -eq 0 ]]
-  then
-     break
-  else
-     echo Database not ready yet, retrying...
-  fi
-  let timeout--
-  sleep 2
-done
-[[ timeout -eq 0 ]] && echo "Failed to start database" && exit 1
+wait_for_service 'psql -l -U postgres' 10 2 || exit 1
 
 if [ -z $PASSWD ]; then
     # generate random pg user password
-- 
1.5.5.1




More information about the ovirt-devel mailing list