Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
Cloud:OpenStack:Newton:Staging
openstack-neutron
0016-Set-initial-ha-router-state-in-neutron-kee...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0016-Set-initial-ha-router-state-in-neutron-keepalived-state-change.patch of Package openstack-neutron
Index: neutron-9.4.2.dev21/neutron/agent/l3/keepalived_state_change.py =================================================================== --- neutron-9.4.2.dev21.orig/neutron/agent/l3/keepalived_state_change.py +++ neutron-9.4.2.dev21/neutron/agent/l3/keepalived_state_change.py @@ -70,6 +70,7 @@ class MonitorDaemon(daemon.Daemon): # as root if not run_as_root: super(MonitorDaemon, self).run() + self.handle_initial_state() for iterable in self.monitor: self.parse_and_handle_event(iterable) @@ -93,6 +94,23 @@ class MonitorDaemon(daemon.Daemon): LOG.exception(_LE( 'Failed to process or handle event for line %s'), iterable) + def handle_initial_state(self): + try: + state = 'backup' + ip = ip_lib.IPDevice(self.interface, self.namespace) + for address in ip.addr.list(): + if address.get('cidr') == self.cidr: + state = 'master' + self.write_state_change(state) + self.notify_agent(state) + break + + LOG.debug('Initial status of router %s is %s', + self.router_id, state) + except Exception: + LOG.exception('Failed to get initial status of router %s', + self.router_id) + def write_state_change(self, state): with open(os.path.join( self.conf_dir, 'state'), 'w') as state_file: Index: neutron-9.4.2.dev21/neutron/tests/functional/agent/l3/test_keepalived_state_change.py =================================================================== --- neutron-9.4.2.dev21.orig/neutron/tests/functional/agent/l3/test_keepalived_state_change.py +++ neutron-9.4.2.dev21/neutron/tests/functional/agent/l3/test_keepalived_state_change.py @@ -61,13 +61,13 @@ class TestKeepalivedStateChange(base.Bas self.router_id = uuidutils.generate_uuid() self.conf_dir = self.get_default_temp_dir().path self.cidr = '169.254.128.1/24' - self.interface_name = 'interface' + self.interface_name = utils.get_rand_name() self.monitor = keepalived_state_change.MonitorDaemon( self.get_temp_file_path('monitor.pid'), self.router_id, 1, 2, - 'namespace', + utils.get_rand_name(), self.conf_dir, self.interface_name, self.cidr) @@ -99,6 +99,32 @@ class TestKeepalivedStateChange(base.Bas self.monitor, 'notify_agent', side_effect=Exception): self.monitor.parse_and_handle_event(self.line) + def test_handle_initial_state_backup(self): + ip = ip_lib.IPWrapper(namespace=self.monitor.namespace) + ip.netns.add(self.monitor.namespace) + self.addCleanup(ip.netns.delete, self.monitor.namespace) + ip.add_dummy(self.interface_name) + + with mock.patch.object( + self.monitor, 'write_state_change') as write_state_change,\ + mock.patch.object( + self.monitor, 'notify_agent') as notify_agent: + + self.monitor.handle_initial_state() + write_state_change.assert_not_called() + notify_agent.assert_not_called() + + def test_handle_initial_state_master(self): + ip = ip_lib.IPWrapper(namespace=self.monitor.namespace) + ip.netns.add(self.monitor.namespace) + self.addCleanup(ip.netns.delete, self.monitor.namespace) + ha_interface = ip.add_dummy(self.interface_name) + + ha_interface.addr.add(self.cidr) + + self.monitor.handle_initial_state() + self.assertEqual('master', self._get_state()) + class TestMonitorDaemon(base.BaseSudoTestCase): def setUp(self):
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor