Hi all,

I recently installed haproxy and I am in the process of configuring redundant load balancers and I discovered a bug in the haproxy shutdown sequence. For some reason the first PID in /var/run/haproxy is the only one that gets a kill signal when you shutdown. In order to reproduce this behavior you will have to increase the number of haproxy processes with the following setting:


nbproc          4 # Number of processes


I can get it to kill cleanly from the shell but when I modify the pre_stop() it still doesn't work. Any thoughts?


Current rc script for those who don't have it installed is below.

Regards,


Mark


#!/bin/sh

# PROVIDE: haproxy
# REQUIRE: DAEMON
# KEYWORD: shutdown

#######
#
# Add the following lines to /etc/rc.conf to enable haproxy:
#
# haproxy_enable (bool):        default: "NO"
#                               Set to "YES" to enable haproxy
# haproxy_pidfile (str):        default: /var/run/${name}.pid
#                               Set to the full path of the pid file
# haproxy_config (str):         default: /usr/local/etc/${name}.conf
#                               Set to the full path of the config file
# haproxy_flags (str): default: Autogenerated using pidfile and config options
#                               Set to override with your own options
#
#######
#
# rc.d Script Runtime Options:
#
# start         - starts application normally
# stop - (softstop) stops all proxies and exits once all sessions are closed
# forcestop     - (immediate) stops all proxies and kills active sessions
# reload        - hot-reconfig using "-sf" option (active sessions kept)
# forcereload   - hot-reconfig using "-st" option (active sessions killed)
# restart       - equiv to "stop" then "start"
# checkconfig   - checks configuration file defined in haproxy_config
#
#######

. /etc/rc.subr

name="haproxy"
rcvar=`set_rcvar`
command="/usr/local/sbin/haproxy"

# Load Configs/Set Defaults
load_rc_config $name
: ${haproxy_enable:="NO"}
: ${haproxy_config:="/usr/local/etc/${name}.conf"}
: ${haproxy_pidfile:="/var/run/${name}.pid"}
: ${haproxy_flags="-q -f ${haproxy_config} -p ${haproxy_pidfile}"}

# Update the globals
pidfile=${haproxy_pidfile}
required_files=${haproxy_config}

# Commands: start, stop, restart, reload, checkconfig
extra_commands="reload checkconfig"

checkconfig_cmd="haproxy_checkconfig"
reload_cmd="haproxy_reload"

haproxy_reload()
{
        # Check configuration file quietly first
        ${command} -q -c -f ${haproxy_config}
        if [ $? -ne 0 ]; then
echo "Error found in ${haproxy_config} - not reloading current process!"
                return
        fi
        rc_pid=$(check_pidfile ${haproxy_pidfile} ${command})
        if [ $rc_pid ]; then
                if [ $rc_force ]; then
                        ${command} ${haproxy_flags} -st ${rc_pid}
                else
                        ${command} ${haproxy_flags} -sf ${rc_pid}
                fi
        else
                echo "No process found.  Maybe $command isn't running?"
        fi
}

haproxy_checkconfig()
{
        ${command} -c -f ${haproxy_config}
}

haproxy_prestart()
{
        ${command} -q -c -f ${haproxy_config}
        rc_flags=${haproxy_flags}
}

haproxy_prestop()
{
        # SIGUSR1 = softstop, SIGTERM = faststop
        if [ $rc_force ]; then
                sig_stop="SIGTERM"
        else
                sig_stop="SIGUSR1"
        fi
}


run_rc_command "$1"
_______________________________________________
freebsd-ports@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"

Reply via email to