summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBalazs Gibizer <balazs.gibizer@ericsson.com>2019-01-16 10:57:07 +0100
committerElod Illes <elod.illes@ericsson.com>2019-03-25 18:03:07 +0100
commitebf011f11ebb4d329e90e7ec0e498a3a6832e154 (patch)
tree7ce2d3326d3c707f7e5175ba2c39be3a2437f460
parent3a8e98cbfc75f18cf448a8851f55d6380f0dfc4a (diff)
downloadnova-ebf011f11ebb4d329e90e7ec0e498a3a6832e154.tar.gz
Fix incompatible version handling in BuildRequest
The BuildRequest object code assumed that IncompatibleObjectVersion exception has a objver field that contains the object version. This assumption is not true. The unit test made another mistake serializing the function object obj_to_primitive instead of serializing the result of the call of obj_to_primitive. This caused a false positive test covering the error in the implementation as well. Conflicts: nova/objects/build_request.py Note(elod.illes): conflict is due to not having patch Ie3a83fef0dc689b9d37ac43e047ce5d48f567adc on stable/pike. Closes-Bug: #1812177 Change-Id: I1ef4a23aa2bf5cb46b481045f3d968f62f74606d (cherry picked from commit 975f0156137e37f7a9139c0268547d79dcc3c43c) (cherry picked from commit 6061186d2d86eb628dcdc61667c240576fa8f10e) (cherry picked from commit 7c85ebad0bf13d609b384e7637b0787bf8d484f7)
-rw-r--r--nova/objects/build_request.py5
-rw-r--r--nova/tests/unit/objects/test_build_request.py2
2 files changed, 4 insertions, 3 deletions
diff --git a/nova/objects/build_request.py b/nova/objects/build_request.py
index 6553dc4598..306e1d2947 100644
--- a/nova/objects/build_request.py
+++ b/nova/objects/build_request.py
@@ -72,7 +72,7 @@ class BuildRequest(base.NovaObject):
LOG.debug('Failed to load instance from BuildRequest with uuid '
'%s because it is None', self.instance_uuid)
raise exception.BuildRequestNotFound(uuid=self.instance_uuid)
- except ovoo_exc.IncompatibleObjectVersion as exc:
+ except ovoo_exc.IncompatibleObjectVersion:
# This should only happen if proper service upgrade strategies are
# not followed. Log the exception and raise BuildRequestNotFound.
# If the instance can't be loaded this object is useless and may
@@ -81,7 +81,8 @@ class BuildRequest(base.NovaObject):
'with uuid %(instance_uuid)s. Found version %(version)s '
'which is not supported here.',
dict(instance_uuid=self.instance_uuid,
- version=exc.objver))
+ version=jsonutils.loads(
+ db_instance)["nova_object.version"]))
LOG.exception(_LE('Could not deserialize instance in '
'BuildRequest'))
raise exception.BuildRequestNotFound(uuid=self.instance_uuid)
diff --git a/nova/tests/unit/objects/test_build_request.py b/nova/tests/unit/objects/test_build_request.py
index a124581076..c4b654cde9 100644
--- a/nova/tests/unit/objects/test_build_request.py
+++ b/nova/tests/unit/objects/test_build_request.py
@@ -59,7 +59,7 @@ class _TestBuildRequestObject(object):
instance = fake_instance.fake_instance_obj(self.context,
objects.Instance, uuid=fake_req['instance_uuid'])
instance.VERSION = '99'
- fake_req['instance'] = jsonutils.dumps(instance.obj_to_primitive)
+ fake_req['instance'] = jsonutils.dumps(instance.obj_to_primitive())
get_by_uuid.return_value = fake_req
self.assertRaises(exception.BuildRequestNotFound,