summaryrefslogtreecommitdiffstats
path: root/nova
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-05-10 16:14:49 +0000
committerGerrit Code Review <review@openstack.org>2013-05-10 16:14:49 +0000
commitf6ed0183fd01851255f1c01af5ac185a70f4082d (patch)
treed61a2850e970be3807b4f1d9b63eea13185e3f5f /nova
parent175584f0afef308e1021bb4daf49cbf222a61a40 (diff)
parent188a94c898bcf07f9fe42ef2f3b5ee4aa8859b49 (diff)
Merge "Remove invalid block_device_mapping volume_size of ''"
Diffstat (limited to 'nova')
-rw-r--r--nova/db/sqlalchemy/api.py13
-rw-r--r--nova/tests/test_db_api.py17
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)