eventscripts: Reimplement kill_tcp_connections_local_only()
authorMartin Schwenke <martin@meltin.net>
Mon, 29 Apr 2013 20:19:18 +0000 (06:19 +1000)
committerAmitay Isaacs <amitay@gmail.com>
Mon, 6 May 2013 05:45:11 +0000 (15:45 +1000)
... using kill_tcp_connections()

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

index e90093a70d2fe4ec6b4f438f08f3817f6c03378b..ca0d3d46d0d3d6ffb0d00cad6f3c792955183e19 100755 (executable)
@@ -586,6 +586,12 @@ ctdb_check_command ()
 ################################################
 kill_tcp_connections() {
     _IP="$1"    
+
+    _oneway=false
+    if [ "$2" = "oneway" ] ; then
+       _oneway=true
+    fi
+
     _failed=0
 
     _killcount=0
@@ -598,7 +604,7 @@ kill_tcp_connections() {
        echo "Killing TCP connection $src $dest"
        ctdb killtcp $src $dest >/dev/null 2>&1 || _failed=1
        _destport="${dest##*:}"
-       __oneway=false
+       __oneway=$_oneway
        case $_destport in
          # we only do one-way killtcp for CIFS
          139|445) __oneway=true ;;
@@ -633,40 +639,9 @@ kill_tcp_connections() {
 ##################################################################
 # kill off the local end for any TCP connections with the given IP
 ##################################################################
-kill_tcp_connections_local_only() {
-    _IP="$1"    
-    _failed=0
-
-    _killcount=0
-    connfile="$CTDB_VARDIR/state/connections.$_IP"
-    mkdir -p "${connfile%/*}" # dirname
-    netstat -tn |egrep "^tcp.*[[:space:]]+$_IP:.*ESTABLISHED" | awk '{print $4" "$5}' > $connfile
-    netstat -tn |egrep "^tcp.*[[:space:]]+::ffff:$_IP:.*ESTABLISHED" | awk '{print $4" "$5}' >> $connfile
-
-    while read dest src; do
-       echo "Killing TCP connection $src $dest"
-       ctdb killtcp $src $dest >/dev/null 2>&1 || _failed=1
-       _killcount=`expr $_killcount + 1`
-     done < $connfile
-    rm -f $connfile
-
-    [ $_failed = 0 ] || {
-       echo "Failed to send killtcp control"
-       return;
-    }
-    [ $_killcount -gt 0 ] || {
-       return;
-    }
-    _count=0
-    while netstat -tn |egrep "^tcp.*[[:space:]]+$_IP:.*ESTABLISHED" > /dev/null; do
-       sleep 1
-       _count=`expr $_count + 1`
-       [ $_count -gt 3 ] && {
-           echo "Timed out killing tcp connections for IP $_IP"
-           return;
-       }
-    done
-    echo "killed $_killcount TCP connections to released IP $_IP"
+kill_tcp_connections_local_only()
+{
+    kill_tcp_connections "$1" "oneway"
 }
 
 ##################################################################