Merge "Fix overriding default listener timeout values in config file" into stable/victoria

This commit is contained in:
Zuul 2021-03-05 13:09:55 +00:00 committed by Gerrit Code Review
commit ec3f46ca7b
5 changed files with 99 additions and 21 deletions

View File

@ -12,7 +12,6 @@
# License for the specific language governing permissions and limitations
# under the License.
from oslo_config import cfg
from wsme import types as wtypes
from octavia.api.common import types
@ -20,9 +19,6 @@ from octavia.api.v2.types import l7policy
from octavia.api.v2.types import pool
from octavia.common import constants
CONF = cfg.CONF
CONF.import_group('haproxy_amphora', 'octavia.common.config')
class BaseListenerType(types.BaseType):
_type_to_model_map = {
@ -136,20 +132,16 @@ class ListenerPOST(BaseListenerType):
loadbalancer_id = wtypes.wsattr(wtypes.UuidType(), mandatory=True)
timeout_client_data = wtypes.wsattr(
wtypes.IntegerType(minimum=constants.MIN_TIMEOUT,
maximum=constants.MAX_TIMEOUT),
default=CONF.haproxy_amphora.timeout_client_data)
maximum=constants.MAX_TIMEOUT))
timeout_member_connect = wtypes.wsattr(
wtypes.IntegerType(minimum=constants.MIN_TIMEOUT,
maximum=constants.MAX_TIMEOUT),
default=CONF.haproxy_amphora.timeout_member_connect)
maximum=constants.MAX_TIMEOUT))
timeout_member_data = wtypes.wsattr(
wtypes.IntegerType(minimum=constants.MIN_TIMEOUT,
maximum=constants.MAX_TIMEOUT),
default=CONF.haproxy_amphora.timeout_member_data)
maximum=constants.MAX_TIMEOUT))
timeout_tcp_inspect = wtypes.wsattr(
wtypes.IntegerType(minimum=constants.MIN_TIMEOUT,
maximum=constants.MAX_TIMEOUT),
default=CONF.haproxy_amphora.timeout_tcp_inspect)
maximum=constants.MAX_TIMEOUT))
tags = wtypes.wsattr(wtypes.ArrayType(wtypes.StringType(max_length=255)))
client_ca_tls_container_ref = wtypes.StringType(max_length=255)
client_authentication = wtypes.wsattr(
@ -231,20 +223,16 @@ class ListenerSingleCreate(BaseListenerType):
wtypes.DictType(str, wtypes.StringType(max_length=255)))
timeout_client_data = wtypes.wsattr(
wtypes.IntegerType(minimum=constants.MIN_TIMEOUT,
maximum=constants.MAX_TIMEOUT),
default=CONF.haproxy_amphora.timeout_client_data)
maximum=constants.MAX_TIMEOUT))
timeout_member_connect = wtypes.wsattr(
wtypes.IntegerType(minimum=constants.MIN_TIMEOUT,
maximum=constants.MAX_TIMEOUT),
default=CONF.haproxy_amphora.timeout_member_connect)
maximum=constants.MAX_TIMEOUT))
timeout_member_data = wtypes.wsattr(
wtypes.IntegerType(minimum=constants.MIN_TIMEOUT,
maximum=constants.MAX_TIMEOUT),
default=CONF.haproxy_amphora.timeout_member_data)
maximum=constants.MAX_TIMEOUT))
timeout_tcp_inspect = wtypes.wsattr(
wtypes.IntegerType(minimum=constants.MIN_TIMEOUT,
maximum=constants.MAX_TIMEOUT),
default=CONF.haproxy_amphora.timeout_tcp_inspect)
maximum=constants.MAX_TIMEOUT))
tags = wtypes.wsattr(wtypes.ArrayType(wtypes.StringType(max_length=255)))
client_ca_tls_container_ref = wtypes.StringType(max_length=255)
client_authentication = wtypes.wsattr(

View File

@ -118,6 +118,19 @@ def create_listener(listener_dict, lb_id):
listener_dict['alpn_protocols'] = (
CONF.api_settings.default_listener_alpn_protocols)
if listener_dict.get('timeout_client_data') is None:
listener_dict['timeout_client_data'] = (
CONF.haproxy_amphora.timeout_client_data)
if listener_dict.get('timeout_member_connect') is None:
listener_dict['timeout_member_connect'] = (
CONF.haproxy_amphora.timeout_member_connect)
if listener_dict.get('timeout_member_data') is None:
listener_dict['timeout_member_data'] = (
CONF.haproxy_amphora.timeout_member_data)
if listener_dict.get('timeout_tcp_inspect') is None:
listener_dict['timeout_tcp_inspect'] = (
CONF.haproxy_amphora.timeout_tcp_inspect)
return listener_dict

View File

@ -663,6 +663,23 @@ class TestListener(base.BaseAPITest):
self.assertEqual(constants.MAX_TIMEOUT,
listener_api.get('timeout_tcp_inspect'))
def test_create_with_default_timeouts(self):
self.conf = self.useFixture(oslo_fixture.Config(cfg.CONF))
self.conf.config(group='haproxy_amphora', timeout_client_data=20)
self.conf.config(group='haproxy_amphora', timeout_member_connect=21)
self.conf.config(group='haproxy_amphora',
timeout_member_data=constants.MIN_TIMEOUT)
self.conf.config(group='haproxy_amphora',
timeout_tcp_inspect=constants.MAX_TIMEOUT)
listener_api = self.test_create()
self.assertEqual(20, listener_api.get('timeout_client_data'))
self.assertEqual(21, listener_api.get('timeout_member_connect'))
self.assertEqual(constants.MIN_TIMEOUT,
listener_api.get('timeout_member_data'))
self.assertEqual(constants.MAX_TIMEOUT,
listener_api.get('timeout_tcp_inspect'))
def test_create_with_timeouts_too_high(self):
optionals = {
'timeout_client_data': 1,

View File

@ -2683,7 +2683,15 @@ class TestLoadBalancerGraph(base.BaseAPITest):
create_client_crl_container=None,
expected_client_crl_container=None,
create_allowed_cidrs=None,
expected_allowed_cidrs=None):
expected_allowed_cidrs=None,
create_timeout_client_data=None,
expected_timeout_client_data=None,
create_timeout_member_connect=None,
expected_timeout_member_connect=None,
create_timeout_member_data=None,
expected_timeout_member_data=None,
create_timeout_tcp_inspect=None,
expected_timeout_tcp_inspect=None):
create_listener = {
'name': name,
'protocol_port': protocol_port,
@ -2764,6 +2772,31 @@ class TestLoadBalancerGraph(base.BaseAPITest):
[lib_consts.ALPN_PROTOCOL_HTTP_1_1,
lib_consts.ALPN_PROTOCOL_HTTP_1_0])
if create_timeout_client_data is not None:
create_listener['timeout_client_data'] = (
create_timeout_client_data)
if expected_timeout_client_data is not None:
expected_listener['timeout_client_data'] = (
expected_timeout_client_data)
if create_timeout_member_connect is not None:
create_listener['timeout_member_connect'] = (
create_timeout_member_connect)
if expected_timeout_member_connect is not None:
expected_listener['timeout_member_connect'] = (
expected_timeout_member_connect)
if create_timeout_member_data is not None:
create_listener['timeout_member_data'] = (
create_timeout_member_data)
if expected_timeout_member_data is not None:
expected_listener['timeout_member_data'] = (
expected_timeout_member_data)
if create_timeout_tcp_inspect is not None:
create_listener['timeout_tcp_inspect'] = (
create_timeout_tcp_inspect)
if expected_timeout_tcp_inspect is not None:
expected_listener['timeout_tcp_inspect'] = (
expected_timeout_tcp_inspect)
return create_listener, expected_listener
def _get_pool_bodies(self, name='pool1', create_members=None,
@ -2949,6 +2982,27 @@ class TestLoadBalancerGraph(base.BaseAPITest):
api_lb = response.json.get(self.root_tag)
self._assert_graphs_equal(expected_lb, api_lb)
def test_with_one_listener_with_default_timeouts(self):
self.conf = self.useFixture(oslo_fixture.Config(cfg.CONF))
self.conf.config(group='haproxy_amphora', timeout_client_data=20)
self.conf.config(group='haproxy_amphora', timeout_member_connect=21)
self.conf.config(group='haproxy_amphora',
timeout_member_data=constants.MIN_TIMEOUT)
self.conf.config(group='haproxy_amphora',
timeout_tcp_inspect=constants.MAX_TIMEOUT)
create_listener, expected_listener = self._get_listener_bodies(
expected_timeout_client_data=20,
expected_timeout_member_connect=21,
expected_timeout_member_data=constants.MIN_TIMEOUT,
expected_timeout_tcp_inspect=constants.MAX_TIMEOUT)
create_lb, expected_lb = self._get_lb_bodies([create_listener],
[expected_listener])
body = self._build_body(create_lb)
response = self.post(self.LBS_PATH, body)
api_lb = response.json.get(self.root_tag)
self._assert_graphs_equal(expected_lb, api_lb)
def test_with_many_listeners(self):
create_listener1, expected_listener1 = self._get_listener_bodies()
create_listener2, expected_listener2 = self._get_listener_bodies(

View File

@ -0,0 +1,6 @@
---
fixes:
- |
Fix default value override for timeout values for listeners. Changing the
default timeouts in the configuration file wasn't correctly applied in the
default listener parameters.