diff options
| author | Jenkins <jenkins@review.openstack.org> | 2013-05-10 16:14:49 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2013-05-10 16:14:49 +0000 |
| commit | f6ed0183fd01851255f1c01af5ac185a70f4082d (patch) | |
| tree | d61a2850e970be3807b4f1d9b63eea13185e3f5f /nova | |
| parent | 175584f0afef308e1021bb4daf49cbf222a61a40 (diff) | |
| parent | 188a94c898bcf07f9fe42ef2f3b5ee4aa8859b49 (diff) | |
Merge "Remove invalid block_device_mapping volume_size of ''"
Diffstat (limited to 'nova')
| -rw-r--r-- | nova/db/sqlalchemy/api.py | 13 | ||||
| -rw-r--r-- | nova/tests/test_db_api.py | 17 |
2 files changed, 30 insertions, 0 deletions
diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py index d5f4c8e6f..4b869914f 100644 --- a/nova/db/sqlalchemy/api.py +++ b/nova/db/sqlalchemy/api.py @@ -3014,8 +3014,19 @@ def _block_device_mapping_get_query(context, session=None): return model_query(context, models.BlockDeviceMapping, session=session) +def _scrub_empty_str_values(dct, keys_to_scrub): + """ + Remove any keys found in sequence keys_to_scrub from the dict + if they have the value ''. + """ + for key in keys_to_scrub: + if key in dct and dct[key] == '': + del dct[key] + + @require_context def block_device_mapping_create(context, values): + _scrub_empty_str_values(values, ['volume_size']) bdm_ref = models.BlockDeviceMapping() bdm_ref.update(values) bdm_ref.save() @@ -3023,6 +3034,7 @@ def block_device_mapping_create(context, values): @require_context def block_device_mapping_update(context, bdm_id, values): + _scrub_empty_str_values(values, ['volume_size']) _block_device_mapping_get_query(context).\ filter_by(id=bdm_id).\ update(values) @@ -3030,6 +3042,7 @@ def block_device_mapping_update(context, bdm_id, values): @require_context def block_device_mapping_update_or_create(context, values): + _scrub_empty_str_values(values, ['volume_size']) session = get_session() with session.begin(): result = _block_device_mapping_get_query(context, session=session).\ diff --git a/nova/tests/test_db_api.py b/nova/tests/test_db_api.py index cfed3ab3b..bf7cc003a 100644 --- a/nova/tests/test_db_api.py +++ b/nova/tests/test_db_api.py @@ -19,6 +19,7 @@ """Unit tests for the DB API.""" +import copy import datetime import types import uuid as stdlib_uuid @@ -3343,6 +3344,22 @@ class BlockDeviceMappingTestCase(test.TestCase): if bdm['device_name'] == values['device_name']: return bdm + def test_scrub_empty_str_values_no_effect(self): + values = {'volume_size': 5} + expected = copy.copy(values) + sqlalchemy_api._scrub_empty_str_values(values, ['volume_size']) + self.assertEqual(values, expected) + + def test_scrub_empty_str_values_empty_string(self): + values = {'volume_size': ''} + sqlalchemy_api._scrub_empty_str_values(values, ['volume_size']) + self.assertEqual(values, {}) + + def test_scrub_empty_str_values_empty_unicode(self): + values = {'volume_size': u''} + sqlalchemy_api._scrub_empty_str_values(values, ['volume_size']) + self.assertEqual(values, {}) + def test_block_device_mapping_create(self): bdm = self._create_bdm({}) self.assertFalse(bdm is None) |
