Fix sqlalchemy bug in transfer_get_all_by_project

Because of incorrect use of the sqlalchemy methods joinedload and filter,
incorrect lists of volume transfers were being returned by
transfer_get_all_by_project().

Change-Id: I378a512611591eec896edd5f217e75f9ff0f8ad3
Closes-Bug: 1262432
This commit is contained in:
Ollie Leahy 2013-12-19 16:11:29 +00:00 committed by john-griffith
parent da2caad4b9
commit d017dbacc8
2 changed files with 5 additions and 5 deletions

View File

@ -2551,8 +2551,8 @@ def _transfer_get(context, transfer_id, session=None):
if not is_admin_context(context):
volume = models.Volume
query = query.options(joinedload('volume')).\
filter(volume.project_id == context.project_id)
query = query.filter(models.Transfer.volume_id == volume.id,
volume.project_id == context.project_id)
result = query.first()
@ -2590,10 +2590,9 @@ def transfer_get_all(context):
def transfer_get_all_by_project(context, project_id):
authorize_project_context(context, project_id)
volume = models.Volume
query = model_query(context, models.Transfer).\
options(joinedload('volume')).\
filter(volume.project_id == project_id)
filter(models.Volume.id == models.Transfer.volume_id,
models.Volume.project_id == project_id)
results = query.all()
return _translate_transfers(results)

View File

@ -110,6 +110,7 @@ class VolumeTransferTestCase(test.TestCase):
nctxt = context.RequestContext(user_id='new_user_id',
project_id='new_project_id')
utils.create_volume(nctxt, id='2', updated_at=self.updated_at)
self.assertRaises(exception.TransferNotFound,
tx_api.get,
nctxt,