summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert Collins <robertc@robertcollins.net>2012-08-12 19:30:35 +1200
committerRobert Collins <robertc@robertcollins.net>2012-08-12 20:18:03 +1200
commit37ff759707f64ee4f4eafee8448ece36b96173e4 (patch)
tree4025ad5196f0d136fca90a9906bb0cd4991d03d3
parent4f3dcb6c9b23867e6049f24c851b12904aee3b76 (diff)
downloadkeystone-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.py51
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):