]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commitdiff
Fixed logging for oslo versioned objects
authorSzymon Borkowski <szymon.borkowski@intel.com>
Tue, 12 Jan 2016 10:32:22 +0000 (11:32 +0100)
committerMichal Dulko <michal.dulko@intel.com>
Tue, 1 Mar 2016 18:21:31 +0000 (18:21 +0000)
Earlier, when we wanted to log a message with an object as a parameter,
obj_attr_is_set method used to check name parameter, which was a wrong
approach. The reason was, that the oslo logger, when received a
versioned object as a resource parameter, is trying to get the 'name'
parameter, which is a property, so the obj_attr_is_set method will
return False and the logger will try to get the 'type' parameter, which
does not exist in some versioned objects (please take a look at
oslo.logging code [1]).

Now, when the parameter's name is present in obj_extra_fields
dict, we avoid calling obj_attr_is_set and simply get() it.

The other cause was a difference between fields names: size (in volume
object) and volume_size (in snapshot object), and inproper condition
statement in lvm driver.

[1] goo.gl/YffLcK

Change-Id: Id92d58b4ccced907cc6e3e59d9e71650a459b4a8
Closes-Bug: 1501521

cinder/objects/base.py
cinder/tests/unit/objects/test_base.py
cinder/volume/drivers/lvm.py

index 24f775a1d5631554bd714ebdf83e043d1d176aba..1451e89511c3ab26eabdf939acdc4fd5827a67e5 100644 (file)
@@ -326,6 +326,7 @@ class CinderObjectDictCompat(base.VersionedObjectDictCompat):
                        'attribute_name': key})
             return None
         if (value != base._NotSpecifiedSentinel and
+                key not in self.obj_extra_fields and
                 not self.obj_attr_is_set(key)):
             return value
         else:
index 70e2da3020325cbe43e057261a4dbd28878eb6a3..b67da6c2aeb119c3997b4b2ea0a14407287b7483 100644 (file)
@@ -601,6 +601,7 @@ class TestCinderDictObject(test_objects.BaseObjectsTestCase):
         obj.abc = 'val2'
         self.assertEqual('val2', obj.get('abc', 'val'))
         self.assertEqual(42, obj.get('foo'))
+        self.assertEqual(42, obj.get('foo', None))
 
         self.assertTrue('foo' in obj)
         self.assertTrue('abc' in obj)
index 34a9172e1a02ac0976b97a23856a87829c90e262..81d959e21955395a82d16587f6ba3a4e41b19320 100644 (file)
@@ -152,7 +152,8 @@ class LVMVolumeDriver(driver.VolumeDriver):
             LOG.error(msg)
             raise exception.VolumeBackendAPIException(data=msg)
 
-        size_in_g = volume.get('volume_size') or volume.get('size')
+        size_in_g = (volume.get('volume_size') if is_snapshot
+                     else volume.get('size'))
         if size_in_g is None:
             msg = (_("Size for volume: %s not found, cannot secure delete.")
                    % volume['id'])