Browse code

Merge "XenAPI: Fix another race condition"

Jenkins authored on 2015/01/21 17:12:06
Showing 2 changed files
... ...
@@ -119,9 +119,7 @@ script
119 119
 
120 120
     chown -R $STACK_USER /opt/stack
121 121
 
122
-    if su -c "/opt/stack/run.sh" $STACK_USER; then
123
-        touch /var/run/devstack.succeeded
124
-    fi
122
+    su -c "/opt/stack/run.sh" $STACK_USER
125 123
 
126 124
     # Update /etc/issue
127 125
     {
... ...
@@ -177,8 +175,19 @@ fi
177 177
 cat <<EOF >$STAGING_DIR/opt/stack/run.sh
178 178
 #!/bin/bash
179 179
 set -eux
180
-cd /opt/stack/devstack
181
-./unstack.sh || true
182
-./stack.sh
180
+(
181
+  flock -n 9 || exit 1
182
+
183
+  [ -e /opt/stack/runsh.succeeded ] && rm /opt/stack/runsh.succeeded
184
+  echo \$\$ >> /opt/stack/run_sh.pid
185
+
186
+  cd /opt/stack/devstack
187
+  ./unstack.sh || true
188
+  ./stack.sh
189
+
190
+  # Got to the end - success
191
+  touch /opt/stack/runsh.succeeded
192
+  rm /opt/stack/run_sh.pid
193
+) 9> /opt/stack/.runsh_lock
183 194
 EOF
184 195
 chmod 755 $STAGING_DIR/opt/stack/run.sh
... ...
@@ -365,8 +365,8 @@ COPYENV=${COPYENV:-1}
365 365
 if [ "$WAIT_TILL_LAUNCH" = "1" ]  && [ -e ~/.ssh/id_rsa.pub  ] && [ "$COPYENV" = "1" ]; then
366 366
     set +x
367 367
 
368
-    echo "VM Launched - Waiting for devstack to start"
369
-    while ! ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS "service devstack status | grep -q running"; do
368
+    echo "VM Launched - Waiting for run.sh"
369
+    while ! ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS "test -e /opt/stack/run_sh.pid"; do
370 370
         sleep 10
371 371
     done
372 372
     echo -n "devstack service is running, waiting for stack.sh to start logging..."
... ...
@@ -376,14 +376,11 @@ if [ "$WAIT_TILL_LAUNCH" = "1" ]  && [ -e ~/.ssh/id_rsa.pub  ] && [ "$COPYENV" =
376 376
     done
377 377
     set -x
378 378
 
379
-    # Watch devstack's output (which doesn't start until stack.sh is running,
380
-    # but wait for run.sh (which starts stack.sh) to exit as that is what
381
-    # hopefully writes the succeeded cookie.
382
-    pid=`ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS pgrep run.sh`
379
+    pid=`ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS "cat /opt/stack/run_sh.pid"`
383 380
     ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS "tail --pid $pid -n +1 -f /tmp/devstack/log/stack.log"
384 381
 
385 382
     # Fail if devstack did not succeed
386
-    ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS 'test -e /var/run/devstack.succeeded'
383
+    ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS 'test -e /opt/stack/runsh.succeeded'
387 384
 
388 385
     set +x
389 386
     echo "################################################################################"
... ...
@@ -401,7 +398,7 @@ else
401 401
     echo ""
402 402
     echo "ssh into your domU now: 'ssh stack@$OS_VM_MANAGEMENT_ADDRESS' using your password"
403 403
     echo "and then do: 'sudo service devstack status' to check if devstack is still running."
404
-    echo "Check that /var/run/devstack.succeeded exists"
404
+    echo "Check that /opt/stack/runsh.succeeded exists"
405 405
     echo ""
406 406
     echo "When devstack completes, you can visit the OpenStack Dashboard"
407 407
     echo "at http://$OS_VM_SERVICES_ADDRESS, and contact other services at the usual ports."