← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 1888022] Re: Detach is broken for multi-attached fs-based volumes

 

Reviewed:  https://review.opendev.org/741712
Committed: https://git.openstack.org/cgit/openstack/nova/commit/?id=806575cfd5327f96e62462f484118d06d17cbe8d
Submitter: Zuul
Branch:    master

commit 806575cfd5327f96e62462f484118d06d17cbe8d
Author: Alex Deiter <alex.deiter@xxxxxxxxx>
Date:   Fri Jul 17 20:38:55 2020 +0000

    Detach is broken for multi-attached fs-based volumes
    
    Fixed an issue with detaching multi-attached fs-based volumes.
    Volume drivers using _HostMountStateManager are special case.
    _HostMountStateManager ensures that the compute node only attempts
    to mount a single mountpoint in use by multiple attachments once,
    and that it is not unmounted until it is no longer in use by any
    attachments. So we can skip the multiattach check for volume drivers
    that based on LibvirtMountedFileSystemVolumeDriver.
    
    Closes-Bug: 1888022
    Change-Id: Ia91b63c0676f42ad8a7a0d16e6870bafc2ee7675


** Changed in: nova
       Status: In Progress => Fix Released

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to OpenStack Compute (nova).
https://bugs.launchpad.net/bugs/1888022

Title:
  Detach is broken for multi-attached fs-based volumes

Status in OpenStack Compute (nova):
  Fix Released

Bug description:
  Description: Detach is broken for multi-attached
  LibvirtMountedFileSystemVolumeDriver-based volumes.

  Steps to reproduce:
  1. Deploy Devstack Master

  2. Configure Nova to use KVM/Libvirt

  3. Configure Cinder to use any LibvirtMountedFileSystemVolumeDriver-
  based volume driver - for example - NFS:

  cinder.conf:

  [nfs]
  volume_driver = cinder.volume.drivers.nfs.NfsDriver
  volume_backend_name = nfs
  nas_secure_file_operations = False
  nfs_snapshot_support = True
  nas_host = 10.3.35.41
  nas_share_path = /volumes/pool1/nas

  4. Create a volume type with enabled multi-attach feature:
  $ cinder type-create multiattach
  $ cinder type-key multiattach set multiattach="<is> True"
  $ cinder type-key multiattach set volume_backend_name=nfs

  5. Create a volume:
  $ cinder create --volume-type nfs 1

  6. Boot two Nova virtual machines:
  $ nova boot --flavor m1.nano --image linux --nic none a
  $ nova boot --flavor m1.nano --image linux --nic none b

  7. Attach the volume to both VM's:
  $ nova volume-attach ac100d66-e92d-40da-a765-fea72ae0af3c 31b702b9-423b-4402-8a6e-1c3dcf84f956
  $ nova volume-attach 0843c96e-2cfe-49ca-a8eb-0d25f806ffeb 31b702b9-423b-4402-8a6e-1c3dcf84f956

  8. Check Nova CPU service log file:

  Jul 16 22:40:36 openstack-master-lustre7 nova-compute[74494]: INFO
  nova.compute.manager [None req-bc029573-7eea-4f56-ba89-060c158f2f75
  admin admin] [instance: ac100d66-e92d-40da-a765-fea72ae0af3c]
  Attaching volume 31b702b9-423b-4402-8a6e-1c3dcf84f956 to /dev/sdb

  Jul 16 22:40:38 openstack-master-lustre7 nova-compute[74494]: DEBUG nova.virt.libvirt.guest [None req-bc029573-7eea-4f56-ba89-060c158f2f75 admin admin] attach device
  xml: <disk type="file" device="disk">
                                                                  <driver name="qemu" type="raw" cache="none" io="native"/>
                                                                  <source file="/opt/stack/data/nova/mnt/0abe5ba79045d7dd179ddc8a4ff1991c/volume-31b702b9-423b-4402-8a6e-1c3dcf84f956"/>
                                                                  <target dev="sdb" bus="scsi"/>
                                                                  <serial>31b702b9-423b-4402-8a6e-1c3dcf84f956</serial>
                                                                  <shareable/>
                                                                  <address type="drive" controller="0" unit="1"/>
                                                                </disk>

  Jul 16 22:40:47 openstack-master-lustre7 nova-compute[74494]: INFO
  nova.compute.manager [None req-d0d5238d-a617-48d4-a439-4c998eea21b5
  admin admin] [instance: 0843c96e-2cfe-49ca-a8eb-0d25f806ffeb]
  Attaching volume 31b702b9-423b-4402-8a6e-1c3dcf84f956 to /dev/sdb

  Jul 16 22:40:48 openstack-master-lustre7 nova-compute[74494]: DEBUG nova.virt.libvirt.guest [None req-d0d5238d-a617-48d4-a439-4c998eea21b5 admin admin] attach device xml: <disk type="file" device="disk">
                                                                  <driver name="qemu" type="raw" cache="none" io="native"/>
                                                                  <source file="/opt/stack/data/nova/mnt/0abe5ba79045d7dd179ddc8a4ff1991c/volume-31b702b9-423b-4402-8a6e-1c3dcf84f956"/>
                                                                  <target dev="sdb" bus="scsi"/>
                                                                  <serial>31b702b9-423b-4402-8a6e-1c3dcf84f956</serial>
                                                                  <shareable/>
                                                                  <address type="drive" controller="0" unit="1"/>
                                                                </disk>

  9. Check the mountpoint:
  $ mount -t nfs4
  10.3.35.41:/volumes/pool1/nas on /opt/stack/data/nova/mnt/0abe5ba79045d7dd179ddc8a4ff1991c type nfs4 (rw,relatime,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.3.196.7,local_lock=none,addr=10.3.35.41)

  Looks good and works as expected.

  10. Detach the volume at the VM a

  11. Detach the volume at the VM b

  12. Check the mountpoint:
  $ mount -t nfs4
  10.3.35.41:/volumes/pool1/nas on /opt/stack/data/nova/mnt/0abe5ba79045d7dd179ddc8a4ff1991c type nfs4 (rw,relatime,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.3.196.7,local_lock=none,addr=10.3.35.41)

  it still mounted - but should be unmounted, when we detach the volume
  at all VM's!

  13. Check Nova CPU service log file:

  Jul 16 22:46:43 openstack-master-lustre7 nova-compute[74494]: INFO
  nova.virt.libvirt.driver [None req-ec46e195-645e-
  4ad7-a495-3b5fd9578935 admin admin] [instance: ac100d66-e92d-
  40da-a765-fea72ae0af3c] Detected multiple connections on this host for
  volume: 31b702b9-423b-4402-8a6e-1c3dcf84f956, skipping target
  disconnect.

  Jul 16 22:46:43 openstack-master-lustre7 nova-compute[74494]: INFO
  nova.virt.libvirt.driver [None req-048bb510-7012-405e-af7b-
  2b39772f5ad0 admin admin] [instance: 0843c96e-2cfe-49ca-a8eb-
  0d25f806ffeb] Detected multiple connections on this host for volume:
  31b702b9-423b-4402-8a6e-1c3dcf84f956, skipping target disconnect.

  Looks like an error in detach logic.

  Root cause:
  nova/compute/manager.py calls:
    self.driver.destroy(context, instance, network_info, block_device_info)
  from nova/virt/libvirt/driver.py
  and destroy(self, context, instance, network_info, block_device_info=None) calls:
    self.cleanup(context, instance, network_info, block_device_info) and
    self._cleanup(context, instance, network_info, block_device_info=block_device_info)
    _disconnect_volume((self, context, connection_info, instance, ncryption=None)

  and _disconnect_volume checks:

  if self._should_disconnect_target(context, connection_info, instance)

  and _should_disconnect_target(context, connection_info, instance) function
  checks the volume multi-attach property and number of attachments.
  And if len(attachments) > 1 and VM is running on the current host => it skip volume disconnect.

  And this logic is correct for true block device drivers (iSCSI/FC),
  but it don't works as expected for LibvirtMountedFileSystemVolumeDriver-based drivers.

  All LibvirtMountedFileSystemVolumeDriver-based drivers uses
  _HostMountStateManager from nova/virt/libvirt/volume/mount.py and this
  class manages mounts/unmounts and itself keeps track of the number of
  mounts for a particular volume.

  So if we exclude the _should_disconnect_target() logic for
  LibvirtMountedFileSystemVolumeDriver-based volumes, then this class
  will work correctly for multi-attached volumes.

  Please take a look my patch.

  Thank you!

To manage notifications about this bug go to:
https://bugs.launchpad.net/nova/+bug/1888022/+subscriptions


References