Remove race condition (in Networks)
Soft delete all duplicate rows with the same vlan except one with the biggest value in `id` column. Create UC on fields (vlan, deleted) Replace Select then Insert -> Try to Insert. Fix error in network_update method. We were able to update vlan to duplicate. Fix typo in description of method drop_old_duplicate_entries_from_table() blueprint db-enforce-unique-keys Change-Id: Ia1b58ab5a5e369a1939de0b5c2f89aee6fc2c40b
This commit is contained in:
@@ -334,6 +334,16 @@ class DbApiTestCase(test.TestCase):
|
|||||||
self.assertRaises(exception.DuplicateVlan,
|
self.assertRaises(exception.DuplicateVlan,
|
||||||
db.network_create_safe, ctxt, values2)
|
db.network_create_safe, ctxt, values2)
|
||||||
|
|
||||||
|
def test_network_update_with_duplicate_vlan(self):
|
||||||
|
ctxt = context.get_admin_context()
|
||||||
|
values1 = {'host': 'localhost', 'project_id': 'project1', 'vlan': 1}
|
||||||
|
values2 = {'host': 'something', 'project_id': 'project1', 'vlan': 2}
|
||||||
|
network_ref = db.network_create_safe(ctxt, values1)
|
||||||
|
db.network_create_safe(ctxt, values2)
|
||||||
|
self.assertRaises(exception.DuplicateVlan,
|
||||||
|
db.network_update,
|
||||||
|
ctxt, network_ref["id"], values2)
|
||||||
|
|
||||||
def test_instance_update_with_instance_uuid(self):
|
def test_instance_update_with_instance_uuid(self):
|
||||||
# test instance_update() works when an instance UUID is passed.
|
# test instance_update() works when an instance UUID is passed.
|
||||||
ctxt = context.get_admin_context()
|
ctxt = context.get_admin_context()
|
||||||
|
|||||||
@@ -860,6 +860,26 @@ class TestNovaMigrations(BaseMigrationTestCase):
|
|||||||
# recheck the 149 data
|
# recheck the 149 data
|
||||||
self._check_149(engine, data)
|
self._check_149(engine, data)
|
||||||
|
|
||||||
|
def _prerun_158(self, engine):
|
||||||
|
networks = get_table(engine, 'networks')
|
||||||
|
data = [
|
||||||
|
{'vlan': 1, 'deleted': 0},
|
||||||
|
{'vlan': 1, 'deleted': 0},
|
||||||
|
{'vlan': 1, 'deleted': 0},
|
||||||
|
]
|
||||||
|
|
||||||
|
for item in data:
|
||||||
|
networks.insert().values(item).execute()
|
||||||
|
return data
|
||||||
|
|
||||||
|
def _check_158(self, engine, data):
|
||||||
|
networks = get_table(engine, 'networks')
|
||||||
|
rows = networks.select().\
|
||||||
|
where(networks.c.deleted != networks.c.id).\
|
||||||
|
execute().\
|
||||||
|
fetchall()
|
||||||
|
self.assertEqual(len(rows), 1)
|
||||||
|
|
||||||
|
|
||||||
class TestBaremetalMigrations(BaseMigrationTestCase):
|
class TestBaremetalMigrations(BaseMigrationTestCase):
|
||||||
"""Test sqlalchemy-migrate migrations."""
|
"""Test sqlalchemy-migrate migrations."""
|
||||||
|
|||||||
Reference in New Issue
Block a user