[openstack-dev] [Cinder] Getting `ValueError: Field `volume_id' cannot be None`

Deepak Shetty dpkshetty at gmail.com
Tue Jun 9 15:06:13 UTC 2015


Thangp,
  I have a related Question wrt your comment in
https://review.openstack.org/#/c/172808/6/cinder/api/contrib/snapshot_actions.py

Do i need to add support for snapshot_admin_metadata table in
object/snapshot.py or I need to create
a new object since its a new table, I am not clear on this, can you let me
know pls ?

ALternatively I am fine if you want to collaborate on my patch and add
snapshot_admin_metadata object support too ?

Let me know pls

thanx,
deepak

On Tue, Jun 9, 2015 at 12:12 PM, Deepak Shetty <dpkshetty at gmail.com> wrote:

> Thang,
>   Thanks! Its still not clear to me why my method doesn't work. FWIW, i
> did try db.snapshot_get = mock.Mock(...) before and when that didn't work,
> i was just trying out
> with remotefs.db.snapshot_get with the assumption that maybe some scope
> issue is there hence I should try using the complete path right from
> module, but that didn't work either and i guess its still not clear why
> a mock in one test module affects another.
>
> Given that mock.patch is working as evident from your patch, i will
> continue to use it.
>
> Thanks for helping out.
>
> On Thu, Jun 4, 2015 at 9:21 PM, Thang Pham <thang.g.pham at gmail.com> wrote:
>
>> The problem is in your test case.  There is no such methods as
>> "remotefs.db.snapshot_get" or "remotefs.db.snapshot_admin_metadata_get".
>> You need to use "with mock.patch('cinder.db.snapshot_get') as snapshot_get,
>> mock.patch('cinder.db.snapshot_admin_metadata_get')
>> as snapshot_admin_metadata_get".  These incorrect calls somehow created a
>> side effect in the other test cases.  I updated you patch with what is
>> correct, so you should follow it for you other tests.  Your test case needs
>> a lot more work, I just edited it to just have it pass the unit tests.
>>
>> Thang
>>
>> On Thu, Jun 4, 2015 at 4:36 AM, Deepak Shetty <dpkshetty at gmail.com>
>> wrote:
>>
>>> I was able to narrow down to the scenario where it fails only when i do:
>>>
>>> ./run_tests.sh -N cinder.tests.unit.test_remotefs
>>> cinder.tests.unit.test_volume.VolumeTestCase
>>>
>>> and fails with:
>>> {0}
>>> cinder.tests.unit.test_volume.VolumeTestCase.test_can_delete_errored_snapshot
>>> [0.507361s] ... FAILED
>>>
>>> Captured traceback:
>>> ~~~~~~~~~~~~~~~~~~~
>>>     Traceback (most recent call last):
>>>       File "cinder/tests/unit/test_volume.py", line 3029, in
>>> test_can_delete_errored_snapshot
>>>         snapshot_obj = objects.Snapshot.get_by_id(self.context,
>>> snapshot_id)
>>>       File
>>> "/usr/lib/python2.7/site-packages/oslo_versionedobjects/base.py", line 169,
>>> in wrapper
>>>         result = fn(cls, context, *args, **kwargs)
>>>       File "cinder/objects/snapshot.py", line 130, in get_by_id
>>>         expected_attrs=['metadata'])
>>>       File "cinder/objects/snapshot.py", line 112, in _from_db_object
>>>         snapshot[name] = value
>>>       File
>>> "/usr/lib/python2.7/site-packages/oslo_versionedobjects/base.py", line 691,
>>> in __setitem__
>>>         setattr(self, name, value)
>>>       File
>>> "/usr/lib/python2.7/site-packages/oslo_versionedobjects/base.py", line 70,
>>> in setter
>>>         field_value = field.coerce(self, name, value)
>>>       File
>>> "/usr/lib/python2.7/site-packages/oslo_versionedobjects/fields.py", line
>>> 183, in coerce
>>>         return self._null(obj, attr)
>>>       File
>>> "/usr/lib/python2.7/site-packages/oslo_versionedobjects/fields.py", line
>>> 161, in _null
>>>         raise ValueError(_("Field `%s' cannot be None") % attr)
>>>     ValueError: Field `volume_id' cannot be None
>>>
>>> Both the testsuites run fine when i run them individually, as in the
>>> below is success:
>>>
>>> ./run_tests.sh -N cinder.tests.unit.test_remotefs - no errors
>>>
>>> ./run_tests.sh -N cinder.tests.unit.test_volume.VolumeTestCase - no
>>> errors
>>>
>>> So i modified my patch @ https://review.openstack.org/#/c/172808/
>>> (Patch set 6) and
>>> removed all testcase i added in test_remotefs.py except one, so that we
>>> have lesser code to debug/deal with!
>>>
>>> See
>>> https://review.openstack.org/#/c/172808/6/cinder/tests/unit/test_remotefs.py
>>>
>>> Now when i disable test_create_snapshot_online_success then running
>>> both the suites work,
>>> but when i enable test_create_snapshot_online_success then it fails as
>>> above.
>>>
>>> I am unable to figure whats the connection between test_create_snapshot_online_success
>>> in test_remotefs.py
>>> and VolumeTestCase.test_can_delete_errored_snapshot in test_volume.py
>>> failure
>>>
>>> Can someone help here ?
>>>
>>> thanx,
>>> deepak
>>>
>>>
>>>
>>> On Thu, Jun 4, 2015 at 1:37 PM, Deepak Shetty <dpkshetty at gmail.com>
>>> wrote:
>>>
>>>> Hi Thang,
>>>>   Since you are working on Snapshot Objects, any idea on why the
>>>> testcase when run all by itself, works, but when run as part of the overall
>>>> suite, fails ?
>>>> This seems to be related to the Snapshot Objects, hence Ccing you.
>>>>
>>>> On Wed, Jun 3, 2015 at 9:54 PM, Deepak Shetty <dpkshetty at gmail.com>
>>>> wrote:
>>>>
>>>>> Hi All,
>>>>>   I am hitting a strange issue when running Cinder unit tests against
>>>>> my patch @
>>>>> https://review.openstack.org/#/c/172808/5
>>>>>
>>>>> I have spent 1 day and haven't been successfull at figuring how/why my
>>>>> patch is causing it!
>>>>>
>>>>> All tests failing are part of VolumeTestCase suite and from the error
>>>>> (see below) it seems
>>>>> the Snapshot Object is complaining that 'volume_id' field is null
>>>>> (while it shouldn't be)
>>>>>
>>>>> An example error from the associated Jenkins run can be seen @
>>>>>
>>>>> http://logs.openstack.org/08/172808/5/check/gate-cinder-python27/0abd15e/console.html.gz#_2015-05-22_13_28_47_140
>>>>>
>>>>> I am seeing a total of 21 such errors.
>>>>>
>>>>> Its strange because, when I try to reproduce it locally in my devstack
>>>>> env, I see the below:
>>>>>
>>>>> 1) When i just run: ./run_tests.sh -N cinder.tests.unit.test_volume.
>>>>> VolumeTestCase
>>>>> all testcases pass
>>>>>
>>>>> 2) When i run 1 individual testcase: ./run_tests.sh -N
>>>>> cinder.tests.unit.test_volume.VolumeTestCase.test_delete_busy_snapshot
>>>>> that passes too
>>>>>
>>>>> 3) When i run : ./run_tests.sh -N
>>>>> I see 21 tests failing and all are failing with error similar to the
>>>>> below
>>>>>
>>>>> {0} cinder.tests.unit.test_volume.VolumeTestCase.test_delete_busy_snapshot
>>>>> [0.537366s] ... FAILED
>>>>>
>>>>> Captured traceback:
>>>>> ~~~~~~~~~~~~~~~~~~~
>>>>>     Traceback (most recent call last):
>>>>>       File "cinder/tests/unit/test_volume.py", line 3219, in
>>>>> test_delete_busy_snapshot
>>>>>         snapshot_obj = objects.Snapshot.get_by_id(self.context,
>>>>> snapshot_id)
>>>>>       File "/usr/lib/python2.7/site-packages/oslo_versionedobjects/base.py",
>>>>> line 163, in wrapper
>>>>>         result = fn(cls, context, *args, **kwargs)
>>>>>       File "cinder/objects/snapshot.py", line 130, in get_by_id
>>>>>         expected_attrs=['metadata'])
>>>>>       File "cinder/objects/snapshot.py", line 112, in _from_db_object
>>>>>         snapshot[name] = value
>>>>>       File "/usr/lib/python2.7/site-packages/oslo_versionedobjects/base.py",
>>>>> line 675, in __setitem__
>>>>>         setattr(self, name, value)
>>>>>       File "/usr/lib/python2.7/site-packages/oslo_versionedobjects/base.py",
>>>>> line 70, in setter
>>>>>         field_value = field.coerce(self, name, value)
>>>>>       File "/usr/lib/python2.7/site-packages/oslo_versionedobjects/fields.py",
>>>>> line 182, in coerce
>>>>>         return self._null(obj, attr)
>>>>>       File "/usr/lib/python2.7/site-packages/oslo_versionedobjects/fields.py",
>>>>> line 160, in _null
>>>>>         raise ValueError(_("Field `%s' cannot be None") % attr)
>>>>>     ValueError: Field `volume_id' cannot be None
>>>>>
>>>>> Any suggestions / thoughts on why this could be happening ?
>>>>>
>>>>> thanx,
>>>>> deepak
>>>>>
>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20150609/b3ecf808/attachment.html>


More information about the OpenStack-dev mailing list