l2pop: check port mac in pre-commit to stop change

Check that a port mac address hasn't changed during the precommit
phase of the port update rather than the post commit so the resulting
exception actually stops it from happening.

Change-Id: I62f120b3c954fa4251a7d676cf2c623e6da5a98b
Closes-Bug: #1486379
This commit is contained in:
Kevin Benton 2015-08-18 23:35:46 -07:00
parent 3513a79a93
commit 9016c1f810
2 changed files with 9 additions and 4 deletions

View File

@ -99,7 +99,7 @@ class L2populationMechanismDriver(api.MechanismDriver,
return True
def update_port_postcommit(self, context):
def update_port_precommit(self, context):
port = context.current
orig = context.original
@ -107,7 +107,12 @@ class L2populationMechanismDriver(api.MechanismDriver,
context.status == const.PORT_STATUS_ACTIVE):
LOG.warning(_LW("unable to modify mac_address of ACTIVE port "
"%s"), port['id'])
raise ml2_exc.MechanismDriverError(method='update_port_postcommit')
raise ml2_exc.MechanismDriverError(method='update_port_precommit')
def update_port_postcommit(self, context):
port = context.current
orig = context.original
diff_ips = self._get_diff_ips(orig, port)
if diff_ips:
self._fixed_ips_changed(context, orig, port, diff_ips)

View File

@ -892,7 +892,7 @@ class TestL2PopulationMechDriver(base.BaseTestCase):
[constants.FLOODING_ENTRY]}}
self.assertEqual(expected_result, result)
def test_update_port_postcommit_mac_address_changed_raises(self):
def test_update_port_precommit_mac_address_changed_raises(self):
port = {'status': u'ACTIVE',
'device_owner': u'compute:None',
'mac_address': u'12:34:56:78:4b:0e',
@ -912,4 +912,4 @@ class TestL2PopulationMechDriver(base.BaseTestCase):
mech_driver = l2pop_mech_driver.L2populationMechanismDriver()
with testtools.ExpectedException(ml2_exc.MechanismDriverError):
mech_driver.update_port_postcommit(ctx)
mech_driver.update_port_precommit(ctx)