diff options
| author | Robert Collins <robertc@robertcollins.net> | 2012-08-12 19:30:35 +1200 |
|---|---|---|
| committer | Robert Collins <robertc@robertcollins.net> | 2012-08-12 20:18:03 +1200 |
| commit | 37ff759707f64ee4f4eafee8448ece36b96173e4 (patch) | |
| tree | 4025ad5196f0d136fca90a9906bb0cd4991d03d3 | |
| parent | 4f3dcb6c9b23867e6049f24c851b12904aee3b76 (diff) | |
| download | keystone-37ff759707f64ee4f4eafee8448ece36b96173e4.tar.gz keystone-37ff759707f64ee4f4eafee8448ece36b96173e4.tar.xz keystone-37ff759707f64ee4f4eafee8448ece36b96173e4.zip | |
Simplify the sql backend deletion of users and tenants.
There is a remaining problem in that the table definition permits dangling
membership in tenants, and vice verca, but this change will make the fix for
that easier to review, and make the code simpler and faster at the sametime.
See bug 1000609 for the bug report that lead to examining this.
Change-Id: Id7cd5fad7032779d352a7c577c8d10558091d767
| -rw-r--r-- | keystone/identity/backends/sql.py | 51 |
1 files changed, 12 insertions, 39 deletions
diff --git a/keystone/identity/backends/sql.py b/keystone/identity/backends/sql.py index dafd19bb..d13683c2 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): |
