Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!

Bug 189005

Summary: net-proxy/squid very slow to stop or start - reload fails with squid: ERROR: No running copy
Product: Gentoo Linux Reporter: Winston Nolan <winston.nolan>
Component: [OLD] ServerAssignee: Gentoo Linux bug wranglers <bug-wranglers>
Status: RESOLVED UPSTREAM    
Severity: normal    
Priority: High    
Version: unspecified   
Hardware: All   
OS: Linux   
Whiteboard:
Package list:
Runtime testing required: ---

Description Winston Nolan 2007-08-15 14:37:11 UTC
-emerged squid
-etc-update
-copied over my squid.conf

squid took ages to restart, stop, start and reload failed with squid: ERROR: No running copy

all this ended when I replaced my /etc/init.d/squid with an older version.

Ill paste the two files here so you can see the differences.

###snip###
Squid Cache: Version 2.6.STABLE13 /etc/init.d/squid
###snip###

#!/sbin/runscript
# Copyright 1999-2006 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/net-proxy/squid/files/squid.initd,v 1.7 2007/03/10 09:39:42 mrness Exp $

opts="${opts} reload rotate"

depend() {
        need net
}

# Try to increase the # of filedescriptors we can open.
maxfds() {
        [ -n "$SQUID_MAXFD" ] || return
        [ -f /proc/sys/fs/file-max ] || return 0
        [ $SQUID_MAXFD -le 8192 ] || SQUID_MAXFD=8192
        local global_file_max=`cat /proc/sys/fs/file-max`
        local minimal_file_max=$(($SQUID_MAXFD + 4096))
        if [ "$global_file_max" -lt $minimal_file_max ]; then
                echo $minimal_file_max > /proc/sys/fs/file-max
        fi
        ulimit -n $SQUID_MAXFD
}

checkconfig() {
        maxfds
        local CACHE_SWAP=$(awk '/^[ \t]*cache_dir[ \t]+/ { printf "%s ", $3 ; }' < /etc/squid/squid.conf)
        [ -z "$CACHE_SWAP" ] && CACHE_SWAP=/var/cache/squid
        umask 027
        for x in $CACHE_SWAP ; do
                if [ ! -d $x/00 ] ; then
                        ebegin "Initializing cache directories"
                        local INIT_CACHE_RESPONSE="$(/usr/sbin/squid -z -N -D 2>&1)"
                        if [ $? != 0 ] || echo "$INIT_CACHE_RESPONSE" | grep -q "erminated abnormally" ; then
                                eend 1
                                echo "$INIT_CACHE_RESPONSE"
                                return 1
                        fi
                        eend 0
                        break
                fi
        done
        return 0
}

start() {
        checkconfig || return 1
        ebegin "Starting squid"
        /usr/sbin/squid ${SQUID_OPTS}
        eend $? && sleep 1
}

stop() {
        ebegin "Stopping squid"
        /usr/sbin/squid -k shutdown
        # Now we have to wait until squid has _really_ stopped.
        sleep 1
        if [ -f /var/run/squid.pid ] ; then
                einfon "Waiting for squid to shutdown ."
                cnt=0
                while [ -f /var/run/squid.pid ] ; do
                        cnt=$(expr $cnt + 1)
                        if [ $cnt -gt 60 ] ; then
                                # Waited 120 seconds now. Fail.
                                echo
                                eend 1 "Failed."
                                break
                        fi
                        sleep 2
                        echo -n "."
                done
                echo
        fi
        eend 0
}

reload() {
        checkconfig || return 1
        ebegin "Reloading squid"
        /usr/sbin/squid -k reconfigure
        eend $?
}

rotate() {
        service_started squid || return 1
        ebegin "Rotating logs"
        /usr/sbin/squid -k rotate
        eend $?
}
###snip###
Squid Cache: Version 2.6.STABLE4 /etc/init.d/squid
###snip###
#!/sbin/runscript
# Copyright 1999-2006 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/net-proxy/squid/files/squid.initd,v 1.6 2006/09/20 08:59:55 mrness Exp $

opts="${opts} reload rotate"

depend() {
        need net
}

# Try to increase the # of filedescriptors we can open.
maxfds() {
        [ -n "$SQUID_MAXFD" ] || return
        [ -f /proc/sys/fs/file-max ] || return 0
        [ $SQUID_MAXFD -le 8192 ] || SQUID_MAXFD=8192
        local global_file_max=`cat /proc/sys/fs/file-max`
        local minimal_file_max=$(($SQUID_MAXFD + 4096))
        if [ "$global_file_max" -lt $minimal_file_max ]; then
                echo $minimal_file_max > /proc/sys/fs/file-max
        fi
        ulimit -n $SQUID_MAXFD
}

checkconfig() {
        maxfds
        local CACHE_SWAP=`awk '/^[ \t]*cache_dir[ \t]+/ { printf "%s ", $3 ; }' < /etc/squid/squid.conf`
        [ -z "$CACHE_SWAP" ] && CACHE_SWAP=/var/cache/squid
        umask 027
        for x in $CACHE_SWAP ; do
                if [ ! -d $x/00 ] ; then
                        ebegin "Initializing cache directories"
                        local INIT_CACHE_RESPONSE=`/usr/sbin/squid -z -N -D 2>&1`
                        if [ $? != 0 ] || [ "$INIT_CACHE_RESPONSE" != "${INIT_CACHE_RESPONSE/erminated abnormally}" ]; then
                                eend 1
                                echo "$INIT_CACHE_RESPONSE"
                                return 1
                        fi
                        eend 0
                        break
                fi
        done
        return 0
}

start() {
        checkconfig || return 1
        ebegin "Starting squid"
        /usr/sbin/squid ${SQUID_OPTS}
        eend $? && sleep 1
}

stop() {
        ebegin "Stopping squid"
        /usr/sbin/squid -k shutdown
        # Now we have to wait until squid has _really_ stopped.
        sleep 1
        if [ -f /var/run/squid.pid ] ; then
                einfon "Waiting for squid to shutdown ."
                cnt=0
                while [ -f /var/run/squid.pid ] ; do
                        cnt=`expr $cnt + 1`
                        if [ $cnt -gt 60 ] ; then
                                # Waited 120 seconds now. Fail.
                                echo
                                eend 1 "Failed."
                                break
                        fi
                        sleep 2
                        echo -n "."
                done
                echo
        fi
        eend 0
}

reload() {
        checkconfig || return 1
        ebegin "Reloading squid"
        /usr/sbin/squid -k reconfigure
        eend $?
}

rotate() {
        service_started squid || return 1
        ebegin "Rotating logs"
        /usr/sbin/squid -k rotate
        eend $?
}
###snip###

Reproducible: Always

Steps to Reproduce:
1./etc/init.d/squid start
2./etc/init.d/squid reload
3./etc/init.d/squid restart

Actual Results:  
squid: ERROR: No running copy 

Expected Results:  
/etc/init.d/squid reload
 * Reloading squid ... [ok ]
Comment 1 Jakub Moc (RETIRED) gentoo-dev 2007-08-15 14:42:57 UTC
Sorry, but your complaints belong upstream, it's not our fault at all. (On that note, for seing a difference there's a unified diff, not pasting two huge initscripts inline).

http://www.squid-cache.org/bugs/index.cgi