Eliminate race conditions in floating association

This makes associating and disassociating floating ips atomic and
idempotent. This means multiple concurrent messages will not leave
behind iptables rules and concurrent request will not cause odd
failures.

Fixes bug 1092762 and bug 1092761.

Change-Id: Idbcad6c1d2a3d4881cf7180b848ed3844fac4054
This commit is contained in:
Vishvananda Ishaya
2012-12-20 20:13:37 -08:00
parent cfd3335462
commit e7a1923889

View File

@@ -246,6 +246,21 @@ class DbApiTestCase(test.TestCase):
self.assertEqual(0, len(results))
db.instance_update(ctxt, instance['uuid'], {"task_state": None})
def test_multi_associate_disassociate(self):
ctxt = context.get_admin_context()
values = {'address': 'floating'}
floating = db.floating_ip_create(ctxt, values)
values = {'address': 'fixed'}
fixed = db.fixed_ip_create(ctxt, values)
res = db.floating_ip_fixed_ip_associate(ctxt, floating, fixed, 'foo')
self.assertEqual(res, fixed)
res = db.floating_ip_fixed_ip_associate(ctxt, floating, fixed, 'foo')
self.assertEqual(res, None)
res = db.floating_ip_disassociate(ctxt, floating)
self.assertEqual(res, fixed)
res = db.floating_ip_disassociate(ctxt, floating)
self.assertEqual(res, None)
def test_network_create_safe(self):
ctxt = context.get_admin_context()
values = {'host': 'localhost', 'project_id': 'project1'}