Remove deprecated min_l3_agents_per_router
The option was deprecated [1] for removal in Newton and is being removed in Ocata. [1] Deprecated in patch with Gerrit Change-Id of: I8a5fc74a96c784d474aefe2d9b27eeb66521ca82 DocImpact remove all references to the option. Change-Id: I3a9195ff6fd18fad9f85cec03a632e7e52d954e7 Closes-Bug: #1555042
This commit is contained in:
parent
1a528e817f
commit
dd5aca38f9
@ -31,8 +31,6 @@ SNAT_ROUTER_INTF_KEY = '_snat_router_interfaces'
|
|||||||
HA_NETWORK_NAME = 'HA network tenant %s'
|
HA_NETWORK_NAME = 'HA network tenant %s'
|
||||||
HA_SUBNET_NAME = 'HA subnet tenant %s'
|
HA_SUBNET_NAME = 'HA subnet tenant %s'
|
||||||
HA_PORT_NAME = 'HA port tenant %s'
|
HA_PORT_NAME = 'HA port tenant %s'
|
||||||
MINIMUM_MINIMUM_AGENTS_FOR_HA = 1
|
|
||||||
DEFAULT_MINIMUM_AGENTS_FOR_HA = 2
|
|
||||||
HA_ROUTER_STATE_ACTIVE = 'active'
|
HA_ROUTER_STATE_ACTIVE = 'active'
|
||||||
HA_ROUTER_STATE_STANDBY = 'standby'
|
HA_ROUTER_STATE_STANDBY = 'standby'
|
||||||
|
|
||||||
|
@ -72,15 +72,6 @@ L3_HA_OPTS = [
|
|||||||
help=_("Maximum number of L3 agents which a HA router will be "
|
help=_("Maximum number of L3 agents which a HA router will be "
|
||||||
"scheduled on. If it is set to 0 then the router will "
|
"scheduled on. If it is set to 0 then the router will "
|
||||||
"be scheduled on every agent.")),
|
"be scheduled on every agent.")),
|
||||||
cfg.IntOpt('min_l3_agents_per_router',
|
|
||||||
default=n_const.DEFAULT_MINIMUM_AGENTS_FOR_HA,
|
|
||||||
help=_("DEPRECATED: Minimum number of L3 agents that have to "
|
|
||||||
"be available in order to allow a new HA router to be "
|
|
||||||
"scheduled. This option is deprecated in the Newton "
|
|
||||||
"release and will be removed for the Ocata release "
|
|
||||||
"where the scheduling of new HA routers will always "
|
|
||||||
"be allowed."),
|
|
||||||
deprecated_for_removal=True),
|
|
||||||
cfg.StrOpt('l3_ha_net_cidr',
|
cfg.StrOpt('l3_ha_net_cidr',
|
||||||
default=n_const.L3_HA_NET_CIDR,
|
default=n_const.L3_HA_NET_CIDR,
|
||||||
help=_('Subnet used for the l3 HA admin network.')),
|
help=_('Subnet used for the l3 HA admin network.')),
|
||||||
@ -114,15 +105,9 @@ class L3_HA_NAT_db_mixin(l3_dvr_db.L3_NAT_with_dvr_db_mixin,
|
|||||||
|
|
||||||
def _check_num_agents_per_router(self):
|
def _check_num_agents_per_router(self):
|
||||||
max_agents = cfg.CONF.max_l3_agents_per_router
|
max_agents = cfg.CONF.max_l3_agents_per_router
|
||||||
min_agents = cfg.CONF.min_l3_agents_per_router
|
|
||||||
|
|
||||||
if (max_agents != UNLIMITED_AGENTS_PER_ROUTER
|
if max_agents != UNLIMITED_AGENTS_PER_ROUTER and max_agents < 1:
|
||||||
and max_agents < min_agents):
|
raise l3_ha.HAMaximumAgentsNumberNotValid(max_agents=max_agents)
|
||||||
raise l3_ha.HAMaximumAgentsNumberNotValid(
|
|
||||||
max_agents=max_agents, min_agents=min_agents)
|
|
||||||
|
|
||||||
if min_agents < n_const.MINIMUM_MINIMUM_AGENTS_FOR_HA:
|
|
||||||
raise l3_ha.HAMinimumAgentsNumberNotValid()
|
|
||||||
|
|
||||||
def __new__(cls, *args, **kwargs):
|
def __new__(cls, *args, **kwargs):
|
||||||
inst = super(L3_HA_NAT_db_mixin, cls).__new__(cls, *args, **kwargs)
|
inst = super(L3_HA_NAT_db_mixin, cls).__new__(cls, *args, **kwargs)
|
||||||
@ -273,14 +258,8 @@ class L3_HA_NAT_db_mixin(l3_dvr_db.L3_NAT_with_dvr_db_mixin,
|
|||||||
return ha_network
|
return ha_network
|
||||||
|
|
||||||
def get_number_of_agents_for_scheduling(self, context):
|
def get_number_of_agents_for_scheduling(self, context):
|
||||||
"""Return the number of agents on which the router will be scheduled.
|
"""Return number of agents on which the router will be scheduled."""
|
||||||
|
|
||||||
Raises an exception if there are not enough agents available to honor
|
|
||||||
the min_agents config parameter. If the max_agents parameter is set to
|
|
||||||
0 all the agents will be used.
|
|
||||||
"""
|
|
||||||
|
|
||||||
min_agents = cfg.CONF.min_l3_agents_per_router
|
|
||||||
num_agents = len(self.get_l3_agents(context, active=True,
|
num_agents = len(self.get_l3_agents(context, active=True,
|
||||||
filters={'agent_modes': [constants.L3_AGENT_MODE_LEGACY,
|
filters={'agent_modes': [constants.L3_AGENT_MODE_LEGACY,
|
||||||
constants.L3_AGENT_MODE_DVR_SNAT]}))
|
constants.L3_AGENT_MODE_DVR_SNAT]}))
|
||||||
@ -293,10 +272,6 @@ class L3_HA_NAT_db_mixin(l3_dvr_db.L3_NAT_with_dvr_db_mixin,
|
|||||||
else:
|
else:
|
||||||
num_agents = max_agents
|
num_agents = max_agents
|
||||||
|
|
||||||
if num_agents < min_agents:
|
|
||||||
raise l3_ha.HANotEnoughAvailableAgents(min_agents=min_agents,
|
|
||||||
num_agents=num_agents)
|
|
||||||
|
|
||||||
return num_agents
|
return num_agents
|
||||||
|
|
||||||
@db_api.retry_if_session_inactive()
|
@db_api.retry_if_session_inactive()
|
||||||
@ -475,11 +450,6 @@ class L3_HA_NAT_db_mixin(l3_dvr_db.L3_NAT_with_dvr_db_mixin,
|
|||||||
'set router admin_state_up to False prior to upgrade.')
|
'set router admin_state_up to False prior to upgrade.')
|
||||||
raise n_exc.BadRequest(resource='router', msg=msg)
|
raise n_exc.BadRequest(resource='router', msg=msg)
|
||||||
|
|
||||||
if requested_ha_state:
|
|
||||||
# This will throw HANotEnoughAvailableAgents if there aren't
|
|
||||||
# enough l3 agents to handle this router.
|
|
||||||
self.get_number_of_agents_for_scheduling(context)
|
|
||||||
|
|
||||||
with context.session.begin(subtransactions=True):
|
with context.session.begin(subtransactions=True):
|
||||||
router_db = super(L3_HA_NAT_db_mixin, self)._update_router_db(
|
router_db = super(L3_HA_NAT_db_mixin, self)._update_router_db(
|
||||||
context, router_id, data)
|
context, router_id, data)
|
||||||
|
@ -18,7 +18,6 @@ from neutron_lib import constants
|
|||||||
from neutron_lib import exceptions
|
from neutron_lib import exceptions
|
||||||
|
|
||||||
from neutron._i18n import _
|
from neutron._i18n import _
|
||||||
from neutron.common import constants as n_const
|
|
||||||
|
|
||||||
HA_INFO = 'ha'
|
HA_INFO = 'ha'
|
||||||
EXTENDED_ATTRIBUTES_2_0 = {
|
EXTENDED_ATTRIBUTES_2_0 = {
|
||||||
@ -76,21 +75,10 @@ class HANetworkCIDRNotValid(exceptions.NeutronException):
|
|||||||
"isn't valid; %(cidr)s.")
|
"isn't valid; %(cidr)s.")
|
||||||
|
|
||||||
|
|
||||||
class HANotEnoughAvailableAgents(exceptions.NeutronException):
|
|
||||||
message = _("Not enough l3 agents available to ensure HA. Minimum "
|
|
||||||
"required %(min_agents)s, available %(num_agents)s.")
|
|
||||||
|
|
||||||
|
|
||||||
class HAMaximumAgentsNumberNotValid(exceptions.NeutronException):
|
class HAMaximumAgentsNumberNotValid(exceptions.NeutronException):
|
||||||
message = _("max_l3_agents_per_router %(max_agents)s config parameter "
|
message = _("max_l3_agents_per_router %(max_agents)s config parameter "
|
||||||
"is not valid. It has to be greater than or equal to "
|
"is not valid as it cannot be negative. It must be 1 or "
|
||||||
"min_l3_agents_per_router %(min_agents)s.")
|
"greater. Alternatively, it can be 0 to mean unlimited.")
|
||||||
|
|
||||||
|
|
||||||
class HAMinimumAgentsNumberNotValid(exceptions.NeutronException):
|
|
||||||
message = (_("min_l3_agents_per_router config parameter is not valid. "
|
|
||||||
"It has to be greater than or equal to %s for HA.") %
|
|
||||||
n_const.MINIMUM_MINIMUM_AGENTS_FOR_HA)
|
|
||||||
|
|
||||||
|
|
||||||
class L3_ext_ha_mode(extensions.ExtensionDescriptor):
|
class L3_ext_ha_mode(extensions.ExtensionDescriptor):
|
||||||
|
@ -26,7 +26,7 @@ from oslo_log import log as logging
|
|||||||
import six
|
import six
|
||||||
from sqlalchemy import sql
|
from sqlalchemy import sql
|
||||||
|
|
||||||
from neutron._i18n import _LE, _LW
|
from neutron._i18n import _LW
|
||||||
from neutron.common import utils
|
from neutron.common import utils
|
||||||
from neutron.db import api as db_api
|
from neutron.db import api as db_api
|
||||||
from neutron.db import l3_hamode_db
|
from neutron.db import l3_hamode_db
|
||||||
@ -44,7 +44,6 @@ cfg.CONF.register_opts(l3_hamode_db.L3_HA_OPTS)
|
|||||||
class L3Scheduler(object):
|
class L3Scheduler(object):
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.min_ha_agents = cfg.CONF.min_l3_agents_per_router
|
|
||||||
self.max_ha_agents = cfg.CONF.max_l3_agents_per_router
|
self.max_ha_agents = cfg.CONF.max_l3_agents_per_router
|
||||||
|
|
||||||
@abc.abstractmethod
|
@abc.abstractmethod
|
||||||
@ -299,13 +298,6 @@ class L3Scheduler(object):
|
|||||||
return (min(self.max_ha_agents, candidates_count) if self.max_ha_agents
|
return (min(self.max_ha_agents, candidates_count) if self.max_ha_agents
|
||||||
else candidates_count)
|
else candidates_count)
|
||||||
|
|
||||||
def _enough_candidates_for_ha(self, candidates):
|
|
||||||
if not candidates or len(candidates) < self.min_ha_agents:
|
|
||||||
LOG.error(_LE("Not enough candidates, a HA router needs at least "
|
|
||||||
"%s agents"), self.min_ha_agents)
|
|
||||||
return False
|
|
||||||
return True
|
|
||||||
|
|
||||||
def _add_port_from_net_and_ensure_vr_id(self, plugin, ctxt, router_db,
|
def _add_port_from_net_and_ensure_vr_id(self, plugin, ctxt, router_db,
|
||||||
tenant_id, ha_net):
|
tenant_id, ha_net):
|
||||||
plugin._ensure_vr_id(ctxt, router_db, ha_net)
|
plugin._ensure_vr_id(ctxt, router_db, ha_net)
|
||||||
@ -379,9 +371,6 @@ class L3Scheduler(object):
|
|||||||
tenant_id, candidates):
|
tenant_id, candidates):
|
||||||
"""Bind a HA router to agents based on a specific policy."""
|
"""Bind a HA router to agents based on a specific policy."""
|
||||||
|
|
||||||
if not self._enough_candidates_for_ha(candidates):
|
|
||||||
return
|
|
||||||
|
|
||||||
chosen_agents = self._choose_router_agents_for_ha(
|
chosen_agents = self._choose_router_agents_for_ha(
|
||||||
plugin, context, candidates)
|
plugin, context, candidates)
|
||||||
|
|
||||||
|
@ -344,10 +344,6 @@ class L3AZLeastRoutersSchedulerTestCase(L3AZSchedulerBaseTest):
|
|||||||
Maximum number of agents on which a router will be scheduled.
|
Maximum number of agents on which a router will be scheduled.
|
||||||
0 means test for regular router.
|
0 means test for regular router.
|
||||||
|
|
||||||
min_l3_agents_per_router
|
|
||||||
Minimum number of agents on which a router will be scheduled.
|
|
||||||
N/A for regular router test.
|
|
||||||
|
|
||||||
down_agent_count[each az]
|
down_agent_count[each az]
|
||||||
Number of l3 agents which are down.
|
Number of l3 agents which are down.
|
||||||
|
|
||||||
@ -361,7 +357,6 @@ class L3AZLeastRoutersSchedulerTestCase(L3AZSchedulerBaseTest):
|
|||||||
router_az_hints=1,
|
router_az_hints=1,
|
||||||
agent_count=[1, 1],
|
agent_count=[1, 1],
|
||||||
max_l3_agents_per_router=0,
|
max_l3_agents_per_router=0,
|
||||||
min_l3_agents_per_router=0,
|
|
||||||
down_agent_count=[0, 0],
|
down_agent_count=[0, 0],
|
||||||
expected_scheduled_agent_count=[1, 0])),
|
expected_scheduled_agent_count=[1, 0])),
|
||||||
|
|
||||||
@ -370,7 +365,6 @@ class L3AZLeastRoutersSchedulerTestCase(L3AZSchedulerBaseTest):
|
|||||||
router_az_hints=2,
|
router_az_hints=2,
|
||||||
agent_count=[1, 1, 1],
|
agent_count=[1, 1, 1],
|
||||||
max_l3_agents_per_router=2,
|
max_l3_agents_per_router=2,
|
||||||
min_l3_agents_per_router=2,
|
|
||||||
down_agent_count=[0, 0, 0],
|
down_agent_count=[0, 0, 0],
|
||||||
expected_scheduled_agent_count=[1, 1, 0])),
|
expected_scheduled_agent_count=[1, 1, 0])),
|
||||||
|
|
||||||
@ -379,18 +373,8 @@ class L3AZLeastRoutersSchedulerTestCase(L3AZSchedulerBaseTest):
|
|||||||
router_az_hints=2,
|
router_az_hints=2,
|
||||||
agent_count=[2, 1],
|
agent_count=[2, 1],
|
||||||
max_l3_agents_per_router=3,
|
max_l3_agents_per_router=3,
|
||||||
min_l3_agents_per_router=2,
|
|
||||||
down_agent_count=[0, 0],
|
down_agent_count=[0, 0],
|
||||||
expected_scheduled_agent_count=[2, 1])),
|
expected_scheduled_agent_count=[2, 1])),
|
||||||
|
|
||||||
('HA router, not enough agents',
|
|
||||||
dict(az_count=3,
|
|
||||||
router_az_hints=2,
|
|
||||||
agent_count=[2, 2, 2],
|
|
||||||
max_l3_agents_per_router=3,
|
|
||||||
min_l3_agents_per_router=2,
|
|
||||||
down_agent_count=[1, 1, 0],
|
|
||||||
expected_scheduled_agent_count=[1, 1, 0])),
|
|
||||||
]
|
]
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
@ -402,7 +386,6 @@ class L3AZLeastRoutersSchedulerTestCase(L3AZSchedulerBaseTest):
|
|||||||
ha = False
|
ha = False
|
||||||
if self.max_l3_agents_per_router:
|
if self.max_l3_agents_per_router:
|
||||||
self.config(max_l3_agents_per_router=self.max_l3_agents_per_router)
|
self.config(max_l3_agents_per_router=self.max_l3_agents_per_router)
|
||||||
self.config(min_l3_agents_per_router=self.min_l3_agents_per_router)
|
|
||||||
ha = True
|
ha = True
|
||||||
|
|
||||||
# create l3 agents
|
# create l3 agents
|
||||||
@ -451,10 +434,6 @@ class L3AZAutoScheduleTestCaseBase(L3AZSchedulerBaseTest):
|
|||||||
Maximum number of agents on which a router will be scheduled.
|
Maximum number of agents on which a router will be scheduled.
|
||||||
0 means test for regular router.
|
0 means test for regular router.
|
||||||
|
|
||||||
min_l3_agents_per_router
|
|
||||||
Minimum number of agents on which a router will be scheduled.
|
|
||||||
N/A for regular router test.
|
|
||||||
|
|
||||||
down_agent_count[each az]
|
down_agent_count[each az]
|
||||||
Number of l3 agents which are down.
|
Number of l3 agents which are down.
|
||||||
|
|
||||||
@ -472,7 +451,6 @@ class L3AZAutoScheduleTestCaseBase(L3AZSchedulerBaseTest):
|
|||||||
agent_az='az0',
|
agent_az='az0',
|
||||||
agent_count=[1, 1],
|
agent_count=[1, 1],
|
||||||
max_l3_agents_per_router=0,
|
max_l3_agents_per_router=0,
|
||||||
min_l3_agents_per_router=0,
|
|
||||||
down_agent_count=[1, 1],
|
down_agent_count=[1, 1],
|
||||||
scheduled_agent_count=[0, 0],
|
scheduled_agent_count=[0, 0],
|
||||||
expected_scheduled_agent_count=[1, 0])),
|
expected_scheduled_agent_count=[1, 0])),
|
||||||
@ -483,7 +461,6 @@ class L3AZAutoScheduleTestCaseBase(L3AZSchedulerBaseTest):
|
|||||||
agent_az='az1',
|
agent_az='az1',
|
||||||
agent_count=[1, 1],
|
agent_count=[1, 1],
|
||||||
max_l3_agents_per_router=0,
|
max_l3_agents_per_router=0,
|
||||||
min_l3_agents_per_router=0,
|
|
||||||
down_agent_count=[1, 1],
|
down_agent_count=[1, 1],
|
||||||
scheduled_agent_count=[0, 0],
|
scheduled_agent_count=[0, 0],
|
||||||
expected_scheduled_agent_count=[0, 0])),
|
expected_scheduled_agent_count=[0, 0])),
|
||||||
@ -494,7 +471,6 @@ class L3AZAutoScheduleTestCaseBase(L3AZSchedulerBaseTest):
|
|||||||
agent_az='az1',
|
agent_az='az1',
|
||||||
agent_count=[1, 1, 1],
|
agent_count=[1, 1, 1],
|
||||||
max_l3_agents_per_router=2,
|
max_l3_agents_per_router=2,
|
||||||
min_l3_agents_per_router=2,
|
|
||||||
down_agent_count=[0, 1, 0],
|
down_agent_count=[0, 1, 0],
|
||||||
scheduled_agent_count=[0, 0, 0],
|
scheduled_agent_count=[0, 0, 0],
|
||||||
expected_scheduled_agent_count=[0, 1, 0])),
|
expected_scheduled_agent_count=[0, 1, 0])),
|
||||||
@ -505,7 +481,6 @@ class L3AZAutoScheduleTestCaseBase(L3AZSchedulerBaseTest):
|
|||||||
agent_az='az2',
|
agent_az='az2',
|
||||||
agent_count=[1, 1, 1],
|
agent_count=[1, 1, 1],
|
||||||
max_l3_agents_per_router=2,
|
max_l3_agents_per_router=2,
|
||||||
min_l3_agents_per_router=2,
|
|
||||||
down_agent_count=[0, 0, 1],
|
down_agent_count=[0, 0, 1],
|
||||||
scheduled_agent_count=[0, 0, 0],
|
scheduled_agent_count=[0, 0, 0],
|
||||||
expected_scheduled_agent_count=[0, 0, 0])),
|
expected_scheduled_agent_count=[0, 0, 0])),
|
||||||
@ -517,7 +492,6 @@ class L3AZAutoScheduleTestCaseBase(L3AZSchedulerBaseTest):
|
|||||||
ha = False
|
ha = False
|
||||||
if self.max_l3_agents_per_router:
|
if self.max_l3_agents_per_router:
|
||||||
self.config(max_l3_agents_per_router=self.max_l3_agents_per_router)
|
self.config(max_l3_agents_per_router=self.max_l3_agents_per_router)
|
||||||
self.config(min_l3_agents_per_router=self.min_l3_agents_per_router)
|
|
||||||
ha = True
|
ha = True
|
||||||
|
|
||||||
# create l3 agents
|
# create l3 agents
|
||||||
|
@ -119,19 +119,8 @@ class L3HATestCase(L3HATestFramework):
|
|||||||
l3_ext_ha_mode.HANetworkCIDRNotValid,
|
l3_ext_ha_mode.HANetworkCIDRNotValid,
|
||||||
self.plugin._verify_configuration)
|
self.plugin._verify_configuration)
|
||||||
|
|
||||||
def test_verify_configuration_min_l3_agents_per_router_below_minimum(self):
|
def test_verify_configuration_max_l3_agents_below_0(self):
|
||||||
cfg.CONF.set_override('min_l3_agents_per_router', 0)
|
cfg.CONF.set_override('max_l3_agents_per_router', -5)
|
||||||
self.assertRaises(
|
|
||||||
l3_ext_ha_mode.HAMinimumAgentsNumberNotValid,
|
|
||||||
self.plugin._check_num_agents_per_router)
|
|
||||||
|
|
||||||
def test_verify_configuration_min_l3_agents_per_router_eq_one(self):
|
|
||||||
cfg.CONF.set_override('min_l3_agents_per_router', 1)
|
|
||||||
self.plugin._check_num_agents_per_router()
|
|
||||||
|
|
||||||
def test_verify_configuration_max_l3_agents_below_min_l3_agents(self):
|
|
||||||
cfg.CONF.set_override('max_l3_agents_per_router', 3)
|
|
||||||
cfg.CONF.set_override('min_l3_agents_per_router', 4)
|
|
||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
l3_ext_ha_mode.HAMaximumAgentsNumberNotValid,
|
l3_ext_ha_mode.HAMaximumAgentsNumberNotValid,
|
||||||
self.plugin._check_num_agents_per_router)
|
self.plugin._check_num_agents_per_router)
|
||||||
@ -323,15 +312,6 @@ class L3HATestCase(L3HATestFramework):
|
|||||||
ha=True,
|
ha=True,
|
||||||
distributed=True)
|
distributed=True)
|
||||||
|
|
||||||
def test_migrate_legacy_router_to_ha_not_enough_agents(self):
|
|
||||||
router = self._create_router(ha=False, distributed=False)
|
|
||||||
self.assertFalse(router['ha'])
|
|
||||||
self.assertFalse(router['distributed'])
|
|
||||||
|
|
||||||
helpers.set_agent_admin_state(self.agent2['id'], admin_state_up=False)
|
|
||||||
self.assertRaises(l3_ext_ha_mode.HANotEnoughAvailableAgents,
|
|
||||||
self._migrate_router, router['id'], ha=True)
|
|
||||||
|
|
||||||
def test_unbind_ha_router(self):
|
def test_unbind_ha_router(self):
|
||||||
router = self._create_router()
|
router = self._create_router()
|
||||||
|
|
||||||
@ -802,13 +782,6 @@ class L3HATestCase(L3HATestFramework):
|
|||||||
self.admin_ctx)
|
self.admin_ctx)
|
||||||
self.assertEqual(3, num_ha_candidates)
|
self.assertEqual(3, num_ha_candidates)
|
||||||
|
|
||||||
def test_get_number_of_agents_for_scheduling_not_enough_agents(self):
|
|
||||||
cfg.CONF.set_override('min_l3_agents_per_router', 3)
|
|
||||||
helpers.kill_agent(helpers.register_l3_agent(host='l3host_3')['id'])
|
|
||||||
self.assertRaises(l3_ext_ha_mode.HANotEnoughAvailableAgents,
|
|
||||||
self.plugin.get_number_of_agents_for_scheduling,
|
|
||||||
self.admin_ctx)
|
|
||||||
|
|
||||||
def test_ha_network_deleted_if_no_ha_router_present_two_tenants(self):
|
def test_ha_network_deleted_if_no_ha_router_present_two_tenants(self):
|
||||||
# Create two routers in different tenants.
|
# Create two routers in different tenants.
|
||||||
router1 = self._create_router()
|
router1 = self._create_router()
|
||||||
|
@ -39,7 +39,6 @@ from neutron.db.models import agent as agent_model
|
|||||||
from neutron.db.models import l3agent as rb_model
|
from neutron.db.models import l3agent as rb_model
|
||||||
from neutron.db.models import l3ha as l3ha_model
|
from neutron.db.models import l3ha as l3ha_model
|
||||||
from neutron.extensions import l3
|
from neutron.extensions import l3
|
||||||
from neutron.extensions import l3_ext_ha_mode as l3_ha
|
|
||||||
from neutron.extensions import l3agentscheduler as l3agent
|
from neutron.extensions import l3agentscheduler as l3agent
|
||||||
from neutron.extensions import portbindings
|
from neutron.extensions import portbindings
|
||||||
from neutron import manager
|
from neutron import manager
|
||||||
@ -1555,7 +1554,6 @@ class VacantBindingIndexTestCase(L3HATestCaseMixin):
|
|||||||
def test_get_vacant_binding_index(self):
|
def test_get_vacant_binding_index(self):
|
||||||
helpers.register_l3_agent('host_3')
|
helpers.register_l3_agent('host_3')
|
||||||
cfg.CONF.set_override('max_l3_agents_per_router', 3)
|
cfg.CONF.set_override('max_l3_agents_per_router', 3)
|
||||||
cfg.CONF.set_override('min_l3_agents_per_router', 3)
|
|
||||||
router = self._create_ha_router()
|
router = self._create_ha_router()
|
||||||
|
|
||||||
if self.binding_index:
|
if self.binding_index:
|
||||||
@ -1875,18 +1873,6 @@ class L3HAChanceSchedulerTestCase(L3HATestCaseMixin):
|
|||||||
'host_3',
|
'host_3',
|
||||||
routers_to_auto_schedule)
|
routers_to_auto_schedule)
|
||||||
|
|
||||||
def test_scheduler_with_ha_enabled_not_enough_agent(self):
|
|
||||||
r1 = self._create_ha_router()
|
|
||||||
agents = self.plugin.get_l3_agents_hosting_routers(
|
|
||||||
self.adminContext, [r1['id']],
|
|
||||||
admin_state_up=True)
|
|
||||||
self.assertEqual(2, len(agents))
|
|
||||||
|
|
||||||
self._set_l3_agent_admin_state(self.adminContext,
|
|
||||||
self.agent_id2, False)
|
|
||||||
self.assertRaises(
|
|
||||||
l3_ha.HANotEnoughAvailableAgents, self._create_ha_router)
|
|
||||||
|
|
||||||
|
|
||||||
class L3HALeastRoutersSchedulerTestCase(L3HATestCaseMixin):
|
class L3HALeastRoutersSchedulerTestCase(L3HATestCaseMixin):
|
||||||
|
|
||||||
|
@ -0,0 +1,12 @@
|
|||||||
|
---
|
||||||
|
upgrade:
|
||||||
|
- The neutron.conf:min_l3_agents_per_router option was
|
||||||
|
deprecated in Newton and removed in Ocata. HA routers
|
||||||
|
no longer require a minimal number of L3 agents to
|
||||||
|
be created, although obviously require at least
|
||||||
|
two L3 agents to provide HA. The rationale for the
|
||||||
|
removal of the option is the case a router was created
|
||||||
|
just when an agent was not operational. The creation
|
||||||
|
of the router will now succeed and when a second agent
|
||||||
|
resumes operation the router will be scheduled to it
|
||||||
|
providing HA.
|
Loading…
Reference in New Issue
Block a user