diff --git a/ironic/common/json_rpc/client.py b/ironic/common/json_rpc/client.py index b6692d9019..e83ed1d8e9 100644 --- a/ironic/common/json_rpc/client.py +++ b/ironic/common/json_rpc/client.py @@ -41,11 +41,14 @@ def _get_session(): else: auth = None - _SESSION = keystone.get_session('json_rpc', auth=auth) - _SESSION.headers = { + session = keystone.get_session('json_rpc', auth=auth) + session.headers = { 'Content-Type': 'application/json' } + # Adds options like connect_retries + _SESSION = keystone.get_adapter('json_rpc', session=session) + return _SESSION diff --git a/ironic/conf/json_rpc.py b/ironic/conf/json_rpc.py index f11bb457fb..1e2f848bb8 100644 --- a/ironic/conf/json_rpc.py +++ b/ironic/conf/json_rpc.py @@ -38,6 +38,8 @@ opts = [ def register_opts(conf): conf.register_opts(opts, group='json_rpc') auth.register_auth_opts(conf, 'json_rpc') + conf.set_default('timeout', 15, group='json_rpc') + conf.set_default('connect_retries', 2, group='json_rpc') def list_opts(): diff --git a/releasenotes/notes/json-rpc-timeout-ac30eea164b3a294.yaml b/releasenotes/notes/json-rpc-timeout-ac30eea164b3a294.yaml new file mode 100644 index 0000000000..97c16cf2df --- /dev/null +++ b/releasenotes/notes/json-rpc-timeout-ac30eea164b3a294.yaml @@ -0,0 +1,7 @@ +--- +fixes: + - | + Fixes the JSON RPC backend potentially hanging on inability to connect + to a conductor. The default timeout is now 15 seconds and 2 retries are + made. These values can be adjusted via the configuration options + ``[json_rpc]timeout`` and ``[json_rpc]connect_retries`` accordingly.