Comment 4 for bug 1000609

Revision history for this message
Robert Collins (lifeless) wrote :

I'll put this in gerrit once my application for the -cla team is approved, but to start with:

This just makes the code cleaner; I need to track down whether openstack has backfill helpers or just assumes downtime is ok for the change to have the join table non-nullable.

diff --git a/keystone/identity/backends/sql.py b/keystone/identity/backends/sql.py
index dafd19b..d13683c 100644
--- a/keystone/identity/backends/sql.py
+++ b/keystone/identity/backends/sql.py
@@ -385,27 +385,13 @@ class Identity(sql.Base, identity.Driver):

     def delete_user(self, user_id):
         session = self.get_session()
- user_ref = session.query(User).filter_by(id=user_id).first()
- if not user_ref:
- raise exception.UserNotFound(user_id=user_id)
- membership_refs = session.query(UserTenantMembership)\
- .filter_by(user_id=user_id)\
- .all()
- metadata_refs = session.query(Metadata)\
- .filter_by(user_id=user_id)\
- .all()
-
         with session.begin():
- if membership_refs:
- for membership_ref in membership_refs:
- session.delete(membership_ref)
- session.flush()
- if metadata_refs:
- for metadata_ref in metadata_refs:
- session.delete(metadata_ref)
-
- session.delete(user_ref)
- session.flush()
+ session.query(UserTenantMembership)\
+ .filter_by(user_id=user_id).delete(False)
+ session.query(Metadata)\
+ .filter_by(user_id=user_id).delete(False)
+ if not session.query(User).filter_by(id=user_id).delete(False):
+ raise exception.UserNotFound(user_id=user_id)

     @handle_conflicts(type='tenant')
     def create_tenant(self, tenant_id, tenant):
@@ -438,26 +424,13 @@ class Identity(sql.Base, identity.Driver):

     def delete_tenant(self, tenant_id):
         session = self.get_session()
- tenant_ref = session.query(Tenant).filter_by(id=tenant_id).first()
- if not tenant_ref:
- raise exception.TenantNotFound(tenant_id=tenant_id)
- membership_refs = session.query(UserTenantMembership)\
- .filter_by(tenant_id=tenant_id)\
- .all()
- metadata_refs = session.query(Metadata)\
- .filter_by(tenant_id=tenant_id)\
- .all()
-
         with session.begin():
- if membership_refs:
- for membership_ref in membership_refs:
- session.delete(membership_ref)
- if metadata_refs:
- for metadata_ref in metadata_refs:
- session.delete(metadata_ref)
-
- session.delete(tenant_ref)
- session.flush()
+ session.query(UserTenantMembership)\
+ .filter_by(tenant_id=tenant_id).delete(False)
+ session.query(Metadata)\
+ .filter_by(tenant_id=tenant_id).delete(False)
+ if not session.query(Tenant).filter_by(id=tenant_id).delete(False):
+ raise exception.TenantNotFound(tenant_id=tenant_id)

     @handle_conflicts(type='metadata')
     def create_metadata(self, user_id, tenant_id, metadata):