[Fullstack] HA L3 agent restart only standby agents

In fullstack test which is testing if there is no packet lost
during restart of agents there were restarted always all agents
which hosted router.
In case when as first was restarted 'master' agent it might
lead to the case when after restart 'master' node was switched
to second L3 agent and that caused lost of few packets and
failed test.
This test should only check if restart of standby agents will
not cause any packet lost so this patch do it in this way.

Change-Id: I6293169d7d7f35e3a9726071e63003ac569dd01e
Closes-Bug: #1776459
This commit is contained in:
Slawek Kaplonski 2018-06-27 16:02:28 +02:00
parent cfff3aae99
commit c57a5d9d8a
2 changed files with 20 additions and 4 deletions

View File

@ -115,6 +115,9 @@ class NeutronConfigFixture(ConfigFixture):
def _generate_policy_json(self):
return c_helpers.find_sample_file('policy.json')
def get_host(self):
return self.config['DEFAULT']['host']
class ML2ConfigFixture(ConfigFixture):

View File

@ -23,7 +23,6 @@ from neutron.agent.l3 import ha_router
from neutron.agent.l3 import namespaces
from neutron.agent.linux import ip_lib
from neutron.common import utils as common_utils
from neutron.tests import base as tests_base
from neutron.tests.common.exclusive_resources import ip_network
from neutron.tests.common import machine_fixtures
from neutron.tests.fullstack import base
@ -274,6 +273,19 @@ class TestHAL3Agent(TestL3Agent):
if self._get_keepalived_state(keepalived_state_file) == "master":
return keepalived_state_file
def _get_l3_agents_with_ha_state(self, l3_agents, router_id, ha_state):
found_agents = []
agents_hosting_router = self.client.list_l3_agent_hosting_routers(
router_id)['agents']
for agent in l3_agents:
agent_host = agent.neutron_cfg_fixture.get_host()
for agent_hosting_router in agents_hosting_router:
if (agent_hosting_router['host'] == agent_host and
agent_hosting_router['ha_state'] == ha_state):
found_agents.append(agent)
break
return found_agents
def test_keepalived_multiple_sighups_does_not_forfeit_mastership(self):
"""Setup a complete "Neutron stack" - both an internal and an external
network+subnet, and a router connected to both.
@ -323,8 +335,7 @@ class TestHAL3Agent(TestL3Agent):
"master",
self._get_keepalived_state(keepalived_state_file))
@tests_base.unstable_test("bug 1776459")
def test_ha_router_restart_agents_no_packet_lost(self):
def test_ha_router_restart_standby_agents_no_packet_lost(self):
tenant_id = uuidutils.generate_uuid()
ext_net, ext_sub = self._create_external_network_and_subnet(tenant_id)
router = self.safe_client.create_router(tenant_id, ha=True,
@ -354,6 +365,8 @@ class TestHAL3Agent(TestL3Agent):
external_vm.block_until_ping(router_ip)
l3_agents = [host.agents['l3'] for host in self.environment.hosts]
l3_standby_agents = self._get_l3_agents_with_ha_state(
l3_agents, router['id'], 'standby')
self._assert_ping_during_agents_restart(
l3_agents, external_vm.namespace, [router_ip], count=60)
l3_standby_agents, external_vm.namespace, [router_ip], count=60)