Armada client: Enable TCP keepalives

This change enables TCP keepalives in the transport adapter used by the
Armada client.

Change-Id: I44d9fe0f29dfb1c00250a76452f4db610ea377ad
This commit is contained in:
Phil Sphicas 2022-03-14 00:29:03 -07:00
parent c5d39f27ca
commit 416eff4e52
1 changed files with 21 additions and 0 deletions

View File

@ -12,9 +12,13 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import socket
from oslo_config import cfg
from oslo_log import log as logging
import requests
from urllib3.poolmanager import PoolManager
from urllib3.connection import HTTPConnection
LOG = logging.getLogger(__name__)
CONF = cfg.CONF
@ -60,6 +64,7 @@ class ArmadaSession(object):
self.scheme, self.host, self.port)
else:
self.base_url = "{}://{}/api/".format(self.scheme, self.host)
self._session.mount(self.base_url, TcpKeepaliveAdapter())
self.default_timeout = ArmadaSession._calc_timeout_tuple(
(20, 3600), timeout)
@ -177,3 +182,19 @@ class ArmadaSession(object):
" integer. Proceeding with values of (%s, %s)",
connect_timeout, read_timeout)
return (connect_timeout, read_timeout)
class TcpKeepaliveAdapter(requests.adapters.HTTPAdapter):
""""Transport adapter" that enables TCP keepalives."""
def init_poolmanager(self, connections, maxsize, block=False):
options = HTTPConnection.default_socket_options + [
(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1),
(socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, 120),
(socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, 30),
]
self.poolmanager = PoolManager(
num_pools=connections,
maxsize=maxsize,
block=block,
socket_options=options)