From b8e9ae892ab9c8c7c17a99450e0ff9d0b1787afc Mon Sep 17 00:00:00 2001 From: Rodrigo Barbieri Date: Thu, 10 Mar 2016 12:45:05 -0300 Subject: [PATCH] Fix Share Migration KeyError on dict.pop In Share migration it is always trying to remove the Copy object from dictionary, even if it has not been added yet. So, dict.pop() should include second argument to not throw exception. Improved unit test to cover this variation. Closes-bug: #1555630 Change-Id: If81c14cbeb03e41501d825cab000ceb1aa2cae7c --- manila/data/manager.py | 2 +- manila/tests/data/test_manager.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/manila/data/manager.py b/manila/data/manager.py index c78ece07..e61bee36 100644 --- a/manila/data/manager.py +++ b/manila/data/manager.py @@ -104,7 +104,7 @@ class DataManager(manager.Manager): context, share_ref, share_instance_id, dest_share_instance_id) raise exception.ShareDataCopyFailed(reason=msg) finally: - self.busy_tasks_shares.pop(share_id) + self.busy_tasks_shares.pop(share_id, None) LOG.info(_LI( "Completed copy operation of migrating share content from share " diff --git a/manila/tests/data/test_manager.py b/manila/tests/data/test_manager.py index f6b6d951..af83b87e 100644 --- a/manila/tests/data/test_manager.py +++ b/manila/tests/data/test_manager.py @@ -86,7 +86,8 @@ class DataManagerTestCase(test.TestCase): self.mock_object(data_utils, 'Copy', mock.Mock(return_value='fake_copy')) - self.manager.busy_tasks_shares[self.share['id']] = 'fake_copy' + if exc is None: + self.manager.busy_tasks_shares[self.share['id']] = 'fake_copy' self.mock_object(self.manager, '_copy_share_data', mock.Mock(side_effect=exc))