1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-11 05:18:09 +03:00

Eventscript functions: optimise ctdb_check_tcp_ports() and add debug.

ctdb_check_tcp_ports() runs "netstat -a -t -n" in a loop for each
port.  There are 2 problems with this:

* Netstat is run on each loop iteration when it need only be run once.

* The -a option is used to list all connections but the function only
  cares about the listening ports.  There may be many thousands of
  non-listening ports to grep through.

This changes ctdb_check_tcp_ports() to run netstat with the -l option
instead of the -a option.  It also only runs netstat once before the
main loop.

When a port is found to not be listening the output of the netstat
command is now dumped to help with debugging.

Signed-off-by: Martin Schwenke <martin@meltin.net>

(This used to be ctdb commit 830355a8b18c53cfcc3ad1e3009bbb1a7a681fa0)
This commit is contained in:
Martin Schwenke 2011-07-05 11:32:06 +10:00
parent f0f9271301
commit 5c9fbb55ce

View File

@ -324,15 +324,26 @@ ctdb_check_directories() {
# check a set of tcp ports
# usage: ctdb_check_tcp_ports <ports...>
######################################################
ctdb_check_tcp_ports() {
ctdb_check_tcp_ports()
{
_cmd='netstat -l -t -n'
_ns=$($_cmd)
for _p ; do # process each function argument (port)
for _a in '0\.0\.0\.0' '::' ; do
_pat="[[:space:]]${_a}:${_p}[[:space:]]+[^[:space:]]+[[:space:]]+LISTEN"
if echo "$_ns" | grep -E -q "$_pat" ; then
# We matched the port, so process next port
continue 2
fi
done
for p ; do
if ! netstat -a -t -n | grep -q "0\.0\.0\.0:$p .*LISTEN" ; then
if ! netstat -a -t -n | grep -q ":::$p .*LISTEN" ; then
echo "ERROR: $service_name tcp port $p is not responding"
return 1
fi
fi
# We didn't match the port, so flag an error, print some debug
cat <<EOF
ERROR: $service_name tcp port $_p is not responding
$_cmd shows this output:
$_ns
EOF
return 1
done
}