Merge "Revert "Build retry loop for screen sessions""
diff --git a/functions-common b/functions-common
index 0bf354f..613a86c 100644
--- a/functions-common
+++ b/functions-common
@@ -1058,100 +1058,44 @@
     echo $!
 }
 
-function _start_in_screen {
-    local service=$1
-    local cmd=$2
-    local screen_name=${SCREEN_NAME:-stack}
-    local status_dir=${SERVICE_DIR:-${DEST}/status}
-    local service_dir="$status_dir/$screen_name"
-    local pid="$service_dir/$service.pid"
-    local failure="$service_dir/$service.failure"
-
-    if [[ -n ${SCREEN_LOGDIR} ]]; then
-        local logfile=${SCREEN_LOGDIR}/screen-${service}.${CURRENT_LOG_TIME}.log
-        local shortlog=${SCREEN_LOGDIR}/screen-${service}.log
-        # this whole dance is done because of slow nodes
-        screen -S $screen_name -p $service -X logfile ${logfile}
-        screen -S $screen_name -p $service -X log on
-        ln -sf ${logfile} ${shortlog}
-    fi
-
-    NL=`echo -ne '\015'`
-    # This fun command does the following:
-    # - the passed server command is backgrounded
-    # - the pid of the background process is saved in the usual place
-    # - the server process is brought back to the foreground
-    # - if the server process exits prematurely the fg command errors
-    #   and a message is written to stdout and the service failure file
-    # The pid saved can be used in screen_stop() as a process group
-    # id to kill off all child processes
-    echo "Running: $cmd & echo \$! >$pid; fg || echo \"$service failed to start\" | tee \"$failure\"$NL"
-    screen -S $screen_name -p $service -X stuff "$cmd & echo \$! >$pid; fg || echo \"$service failed to start\" | tee \"$failure\"$NL"
-}
-
-
-function _is_running_in_screen {
-    local service=$1
-    local screen_name=${SCREEN_NAME:-stack}
-    local status_dir=${SERVICE_DIR:-${DEST}/status}
-    local service_dir="$status_dir/$screen_name"
-    local pid="$service_dir/$service.pid"
-    local failure="$service_dir/$service.failure"
-    if [[ ! -e "$pid" && ! -e "$failure" ]]; then
-        # if we don't have a pid or a failure for why, the command may not
-        # have stuffed in there
-        echo "Warning: neither $pid nor $failure exist, $service didn't seem to start"
-        return 1
-    fi
-    if [[ -n ${SCREEN_LOGDIR} ]]; then
-        # if we should be logging, but we don't have a log file, something is wrong
-        local logfile=${SCREEN_LOGDIR}/screen-${service}.${CURRENT_LOG_TIME}.log
-        if [[ ! -e "$logfile" ]]; then
-            echo "Warning: expected logfile $logfile not found, something wrong with starting $service"
-            return 1
-        fi
-    fi
-    return 0
-}
-
 # Helper to launch a service in a named screen
 # screen_it service "command-line"
 function screen_it {
-    local service=$1
-    local cmd=$2
-    local screen_name=${SCREEN_NAME:-stack}
-    local status_dir=${SERVICE_DIR:-${DEST}/status}
-    local service_dir="$status_dir/$screen_name"
-    local use_screen=$(trueorfalse True $USE_SCREEN)
-    local pid="$service_dir/$service.pid"
+    SCREEN_NAME=${SCREEN_NAME:-stack}
+    SERVICE_DIR=${SERVICE_DIR:-${DEST}/status}
+    USE_SCREEN=$(trueorfalse True $USE_SCREEN)
 
     if is_service_enabled $1; then
         # Append the service to the screen rc file
-        screen_rc "$service" "$cmd"
+        screen_rc "$1" "$2"
 
-        if [[ "$use_screen" = "True" ]]; then
-            screen -S $screen_name -X screen -t $service
+        if [[ "$USE_SCREEN" = "True" ]]; then
+            screen -S $SCREEN_NAME -X screen -t $1
 
-            # this retry loop brought to you by slow compute nodes, screen raciness,
-            # and frustration in upgrading.
-            local screen_tries=0
-            while [ "$screen_tries" -lt 10 ]; do
-                _start_in_screen "$service" "$cmd"
-                if _is_running_in_screen $service; then
-                    screen_tries=10
-                else
-                    screen_tries=$[screen_tries + 1]
-                    echo "Failed to start service after $screen_tries attempt(s), retrying"
-                    if [[ "$screen_tries" -eq 10 ]]; then
-                        echo "Too many retries, giving up"
-                        exit 1
-                    fi
-                    sleep 1
-                fi
-            done
+            if [[ -n ${SCREEN_LOGDIR} ]]; then
+                screen -S $SCREEN_NAME -p $1 -X logfile ${SCREEN_LOGDIR}/screen-${1}.${CURRENT_LOG_TIME}.log
+                screen -S $SCREEN_NAME -p $1 -X log on
+                ln -sf ${SCREEN_LOGDIR}/screen-${1}.${CURRENT_LOG_TIME}.log ${SCREEN_LOGDIR}/screen-${1}.log
+            fi
+
+            # sleep to allow bash to be ready to be send the command - we are
+            # creating a new window in screen and then sends characters, so if
+            # bash isn't running by the time we send the command, nothing happens
+            sleep 3
+
+            NL=`echo -ne '\015'`
+            # This fun command does the following:
+            # - the passed server command is backgrounded
+            # - the pid of the background process is saved in the usual place
+            # - the server process is brought back to the foreground
+            # - if the server process exits prematurely the fg command errors
+            #   and a message is written to stdout and the service failure file
+            # The pid saved can be used in screen_stop() as a process group
+            # id to kill off all child processes
+            screen -S $SCREEN_NAME -p $1 -X stuff "$2 & echo \$! >$SERVICE_DIR/$SCREEN_NAME/$1.pid; fg || echo \"$1 failed to start\" | tee \"$SERVICE_DIR/$SCREEN_NAME/$1.failure\"$NL"
         else
             # Spawn directly without screen
-            run_process "$service" "$cmd" >$pid
+            run_process "$1" "$2" >$SERVICE_DIR/$SCREEN_NAME/$1.pid
         fi
     fi
 }