cinder/cinder/objects
Gorka Eguileor 42ce739a08 Fix VolumeAttachment is not bound to a Session
In some cases, when loading a list of volumes using
cinder.objects.VolumeList.get_all we may end up with a SQL alchemy error
like this one:

 sqlalchemy.orm.exc.DetachedInstanceError: Parent instance
 <VolumeAttachment at 0x7f048ff22290> is not bound to a Session; lazy
 load operation of attribute 'volume' cannot proceed (Background on this
 error at: http://sqlalche.me/e/bhk3)

This happens because when loading a Cinder Volume we also load the
volume attachments, so the Volume OVO tries to create the
VolumeAttachmentList OVO, which in turn creates the individual
VolumeAttachment OVOs, but these have the volume field set in
expected_attrs, but in this case the volume data is not loaded.

In most cases we don't see this issue because the session is still
available and SQLAlchemy will return this information.

Instead of using the dictionary "get" method that will do the lazy
loading we use the hasattr method that will return False if the lazy
loading exception happens when trying to get the volume.

Depends-On: I9f0fec25444ed865d56d0d250fb6d840ab5b4095
Closes-Bug: #1812913
Change-Id: I253123d5451b32f0e3143916e41aaa1af75561c2
2019-03-15 11:29:25 +01:00
..
__init__.py Add service dynamic log change/query 2017-05-16 13:37:35 +02:00
backup.py Handle migrating encryption key IDs in Backup table 2018-04-03 12:23:38 -04:00
base.py Fix A/A 'resource_backend' when scheduling volumes 2018-12-13 09:56:34 -05:00
cgsnapshot.py Fix replication freeze mechanism 2017-01-19 10:42:24 +01:00
cleanable.py Make code py3-compatible (global callable()) 2018-08-13 22:45:36 +05:30
cleanup_request.py Add cleanable base object and cleanup request VO 2016-10-04 15:17:31 +02:00
cluster.py Add support for promoting a failed over backend 2018-05-09 12:19:33 -04:00
consistencygroup.py CG API changes for migrating CGs 2016-11-22 19:08:20 -05:00
dynamic_log.py Add service dynamic log change/query 2017-05-16 13:37:35 +02:00
fields.py Adding missing Volume states to VolumeStatus enum 2018-12-06 22:58:55 +05:30
group.py Add group to cluster when init host 2017-07-12 14:08:43 +08:00
group_snapshot.py OVO: Remove child_versions from list classes 2017-05-25 13:00:13 +02:00
group_type.py OVO: Remove child_versions from list classes 2017-05-25 13:00:13 +02:00
manageableresources.py Switch ManageableSnaphots & ManageableVolumes list to OVO 2017-01-25 00:41:30 +00:00
qos_specs.py OVO: Remove child_versions from list classes 2017-05-25 13:00:13 +02:00
request_spec.py Support availability-zone type 2018-05-17 12:09:12 +00:00
service.py OVO: support query for disabled services 2018-03-29 11:27:49 -04:00
snapshot.py Initiating Cinder Volume Manager with large number of volumes 2019-01-11 08:19:07 -05:00
volume.py Initiating Cinder Volume Manager with large number of volumes 2019-01-11 08:19:07 -05:00
volume_attachment.py Fix VolumeAttachment is not bound to a Session 2019-03-15 11:29:25 +01:00
volume_type.py Add tests for multiattach check in cinder.objects 2018-09-29 19:24:46 +05:30