Fix issue with DB upgrade to assignment table

There are two changes:
- Commit changes to the grant tables after each update to ensure MySQL
  doesn't get confused when there are multiple assignments for a given
  actor/target (Postgresql doesn't have this issue)
- Close any sessions in test_sql_upgarde before we call the migrations,
  to ensure table dropping won't be blocked

Fixes bug 1284700

Change-Id: I81704b17ea9c11be926018df125fcfdb79ee6271
This commit is contained in:
Henry Nash 2014-02-25 17:51:43 +00:00
parent 8c8f776b6d
commit 4d505e6390
2 changed files with 8 additions and 1 deletions

View File

@ -205,6 +205,7 @@ def downgrade_assignment_table(meta, migrate_engine):
update = build_update(meta, session, assignment)
if update is not None:
migrate_engine.execute(update)
session.commit()
# Delete all the rows
migrate_engine.execute(downgrade_table.delete())

View File

@ -1997,22 +1997,28 @@ class SqlUpgradeTests(SqlMigrateBase):
check_assignment_type(refs,
assignment_sql.AssignmentType.USER_DOMAIN)
session = self.Session()
self.upgrade(37)
session = self.Session()
self.assertTableDoesNotExist('assignment')
base_data = create_base_data(session)
populate_grants(session, base_data)
check_grants(session, base_data)
session.commit()
session.close()
self.upgrade(40)
session = self.Session()
self.assertTableExists('assignment')
self.assertTableDoesNotExist('user_project_metadata')
self.assertTableDoesNotExist('group_project_metadata')
self.assertTableDoesNotExist('user_domain_metadata')
self.assertTableDoesNotExist('group_domain__metadata')
check_assignments(session, base_data)
session.close()
self.downgrade(37)
session = self.Session()
self.assertTableDoesNotExist('assignment')
check_grants(session, base_data)
session.close()
def populate_user_table(self, with_pass_enab=False,
with_pass_enab_domain=False):