components/openstack/cinder/patches/05-keepalive.patch
changeset 3998 5bd484384122
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/patches/05-keepalive.patch	Thu Mar 19 14:41:20 2015 -0700
@@ -0,0 +1,80 @@
+In-house patch to allow the TCP keepalive parameters from cinder.conf
+to be used on Solaris. Patch has not yet been submitted upstream.
+
+--- cinder-2014.2.2/cinder/openstack/common/network_utils.py.orig	2014-12-04 21:00:20.000000000 -0800
++++ cinder-2014.2.2/cinder/openstack/common/network_utils.py	2015-01-23 18:46:17.465276851 -0800
+@@ -18,6 +18,7 @@ Network-related utilities and helper fun
+ """
+ 
+ import socket
++import sys
+ 
+ from six.moves.urllib import parse
+ 
+@@ -135,26 +136,44 @@ def set_tcp_keepalive(sock, tcp_keepaliv
+     if not tcp_keepalive:
+         return
+ 
+-    # These options aren't available in the OS X version of eventlet,
+-    # Idle + Count * Interval effectively gives you the total timeout.
+-    if tcp_keepidle is not None:
+-        if hasattr(socket, 'TCP_KEEPIDLE'):
+-            sock.setsockopt(socket.IPPROTO_TCP,
+-                            socket.TCP_KEEPIDLE,
+-                            tcp_keepidle)
++    if sys.platform == 'sunos5':
++        # Should match definitions in <netinet/tcp.h>
++        TCP_KEEPALIVE_THRESHOLD = 0x16
++        TCP_KEEPALIVE_ABORT_THRESHOLD = 0x17
++
++        if tcp_keepidle is not None:
++            sock.setsockopt(socket.IPPROTO_TCP, TCP_KEEPALIVE_THRESHOLD,
++                            tcp_keepidle * 1000)
++        if tcp_keepalive_interval is None and tcp_keepalive_count is None:
++            return
++        if tcp_keepalive_interval is None or tcp_keepalive_count is None:
++            LOG.warning(_LW('tcp_keepintvl and tcp_keepknt must be set '
++                            'together'))
+         else:
+-            LOG.warning(_LW('tcp_keepidle not available on your system'))
+-    if tcp_keepalive_interval is not None:
+-        if hasattr(socket, 'TCP_KEEPINTVL'):
+-            sock.setsockopt(socket.IPPROTO_TCP,
+-                            socket.TCP_KEEPINTVL,
+-                            tcp_keepalive_interval)
+-        else:
+-            LOG.warning(_LW('tcp_keepintvl not available on your system'))
+-    if tcp_keepalive_count is not None:
+-        if hasattr(socket, 'TCP_KEEPCNT'):
+-            sock.setsockopt(socket.IPPROTO_TCP,
+-                            socket.TCP_KEEPCNT,
+-                            tcp_keepalive_count)
+-        else:
+-            LOG.warning(_LW('tcp_keepknt not available on your system'))
++            sock.setsockopt(
++                socket.IPPROTO_TCP, TCP_KEEPALIVE_ABORT_THRESHOLD,
++                tcp_keepalive_interval * tcp_keepalive_count * 1000)
++    else:
++        # These options aren't available in the OS X version of eventlet,
++        # Idle + Count * Interval effectively gives you the total timeout.
++        if tcp_keepidle is not None:
++            if hasattr(socket, 'TCP_KEEPIDLE'):
++                sock.setsockopt(socket.IPPROTO_TCP,
++                                socket.TCP_KEEPIDLE,
++                                tcp_keepidle)
++            else:
++                LOG.warning(_LW('tcp_keepidle not available on your system'))
++        if tcp_keepalive_interval is not None:
++            if hasattr(socket, 'TCP_KEEPINTVL'):
++                sock.setsockopt(socket.IPPROTO_TCP,
++                                socket.TCP_KEEPINTVL,
++                                tcp_keepalive_interval)
++            else:
++                LOG.warning(_LW('tcp_keepintvl not available on your system'))
++        if tcp_keepalive_count is not None:
++            if hasattr(socket, 'TCP_KEEPCNT'):
++                sock.setsockopt(socket.IPPROTO_TCP,
++                                socket.TCP_KEEPCNT,
++                                tcp_keepalive_count)
++            else:
++                LOG.warning(_LW('tcp_keepknt not available on your system'))