diff options
author | Balazs Gibizer <balazs.gibizer@ericsson.com> | 2019-01-16 10:57:07 +0100 |
---|---|---|
committer | Elod Illes <elod.illes@ericsson.com> | 2019-03-25 18:03:07 +0100 |
commit | ebf011f11ebb4d329e90e7ec0e498a3a6832e154 (patch) | |
tree | 7ce2d3326d3c707f7e5175ba2c39be3a2437f460 | |
parent | 3a8e98cbfc75f18cf448a8851f55d6380f0dfc4a (diff) | |
download | nova-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.py | 5 | ||||
-rw-r--r-- | nova/tests/unit/objects/test_build_request.py | 2 |
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, |