So just attempting to read through this thread, I think I hear:

Problems:

1. multi-attach breaks the assumption that made detach work
2. live-migrate, already breaks with some drivers, due to not fully
understanding the side affects of all API calls.
3. evacuate and shelve issues also related


Solution ideas:

1. New export/target for every volume connection
* pro: simple
* con: that doesn't work for all drivers (?)

2. Nova works out when to disconnect volume on host
* pro: no cinder API changes (i.e. no upgrade issue)
* con: adds complexity in Nova
* con: requires all nodes to run fixed code before multi-attach is safe
* con: doesn't help with the live-migrate and evacuate issues anyways?

3. Give Cinder all the info, so it knows what has to happen
* pro: seems to give cinder the info to stop API users doing bad things
* pro: more robust API particularly useful with multiple nova, and
with baremetal, etc
* con: Need cinder micro-versions to do this API change and work across upgrade


So from where I am sat:
1: doesn't work for everyone
2: doesn't fix all the problems we need to fix
3: will take a long time

If so, it feels like we need solution 3, regardless, to solve wider issues.
We only need solution 2, if solution 3 will block multi-attach for too long.

Am I missing something in that summary?

Thanks,
johnthetubaguy

On 12 February 2016 at 20:26, Ildikó Váncsa <ildiko.van...@ericsson.com> wrote:
> Hi Walt,
>
> Thanks for describing the bigger picture.
>
> In my opinion when we will have microversion support available in Cinder that 
> will give us a bit of a freedom and also possibility to handle these 
> difficulties.
>
> Regarding terminate_connection we will have issues with live_migration as it 
> is today. We need to figure out what information would be best to feed back 
> to Cinder from Nova, so we should figure out what API we would need after we 
> are able to introduce it in a safe way. I still see benefit in storing the 
> connection_info for the attachments.
>
> Also I think the multiattach support should be disable for the problematic 
> drivers like lvm, until we don't have a solution for proper detach on the 
> whole call chain.
>
> Best Regards,
> Ildikó
>
>> -----Original Message-----
>> From: Walter A. Boring IV [mailto:walter.bor...@hpe.com]
>> Sent: February 11, 2016 18:31
>> To: openstack-dev@lists.openstack.org
>> Subject: Re: [openstack-dev] [Nova][Cinder] Multi-attach, determining when 
>> to call os-brick's connector.disconnect_volume
>>
>> There seems to be a few discussions going on here wrt to detaches.   One
>> is what to do on the Nova side with calling os-brick's disconnect_volume, 
>> and also when to or not to call Cinder's
>> terminate_connection and detach.
>>
>> My original post was simply to discuss a mechanism to try and figure out the 
>> first problem.  When should nova call brick to remove the
>> local volume, prior to calling Cinder to do something.
>>
>> Nova needs to know if it's safe to call disconnect_volume or not. Cinder 
>> already tracks each attachment, and it can return the
>> connection_info
>> for each attachment with a call to initialize_connection.   If 2 of
>> those connection_info dicts are the same, it's a shared volume/target.
>> Don't call disconnect_volume if there are any more of those left.
>>
>> On the Cinder side of things, if terminate_connection, detach is called, the 
>> volume manager can find the list of attachments for a
>> volume, and compare that to the attachments on a host.  The problem is, 
>> Cinder doesn't track the host along with the instance_uuid in
>> the attachments table.  I plan on allowing that as an API change after 
>> microversions lands, so we know how many times a volume is
>> attached/used on a particular host.  The driver can decide what to do with 
>> it at
>> terminate_connection, detach time.     This helps account for
>> the differences in each of the Cinder backends, which we will never get all 
>> aligned to the same model.  Each array/backend handles
>> attachments different and only the driver knows if it's safe to remove the 
>> target or not, depending on how many attachments/usages
>> it has
>> on the host itself.   This is the same thing as a reference counter,
>> which we don't need, because we have the count in the attachments table, 
>> once we allow setting the host and the instance_uuid at
>> the same time.
>>
>> Walt
>> > On Tue, Feb 09, 2016 at 11:49:33AM -0800, Walter A. Boring IV wrote:
>> >> Hey folks,
>> >>     One of the challenges we have faced with the ability to attach a
>> >> single volume to multiple instances, is how to correctly detach that
>> >> volume.  The issue is a bit complex, but I'll try and explain the
>> >> problem, and then describe one approach to solving one part of the detach 
>> >> puzzle.
>> >>
>> >> Problem:
>> >>    When a volume is attached to multiple instances on the same host.
>> >> There are 2 scenarios here.
>> >>
>> >>    1) Some Cinder drivers export a new target for every attachment on
>> >> a compute host.  This means that you will get a new unique volume
>> >> path on a host, which is then handed off to the VM instance.
>> >>
>> >>    2) Other Cinder drivers export a single target for all instances
>> >> on a compute host.  This means that every instance on a single host,
>> >> will reuse the same host volume path.
>> >
>> > This problem isn't actually new. It is a problem we already have in
>> > Nova even with single attachments per volume.  eg, with NFS and SMBFS
>> > there is a single mount setup on the host, which can serve up multiple 
>> > volumes.
>> > We have to avoid unmounting that until no VM is using any volume
>> > provided by that mount point. Except we pretend the problem doesn't
>> > exist and just try to unmount every single time a VM stops, and rely
>> > on the kernel failing umout() with EBUSY.  Except this has a race
>> > condition if one VM is stopping right as another VM is starting
>> >
>> > There is a patch up to try to solve this for SMBFS:
>> >
>> >     https://review.openstack.org/#/c/187619/
>> >
>> > but I don't really much like it, because it only solves it for one
>> > driver.
>> >
>> > I think we need a general solution that solves the problem for all
>> > cases, including multi-attach.
>> >
>> > AFAICT, the only real answer here is to have nova record more info
>> > about volume attachments, so it can reliably decide when it is safe to
>> > release a connection on the host.
>> >
>> >
>> >> Proposed solution:
>> >>    Nova needs to determine if the volume that's being detached is a
>> >> shared or non shared volume.  Here is one way to determine that.
>> >>
>> >>    Every Cinder volume has a list of it's attachments.  In those
>> >> attachments it contains the instance_uuid that the volume is attached
>> >> to.  I presume Nova can find which of the volume attachments are on
>> >> the same host.  Then Nova can call Cinder's initialize_connection for
>> >> each of those attachments to get the target's connection_info
>> >> dictionary.  This connection_info dictionary describes how to connect
>> >> to the target on the cinder backend.  If the target is shared, then
>> >> each of the connection_info dicts for each attachment on that host
>> >> will be identical.  Then Nova would know that it's a shared target,
>> >> and then only call os-brick's disconnect_volume, if it's the last
>> >> attachment on that host.  I think at most 2 calls to cinder's
>> >> initialize_connection would suffice to determine if the volume is a
>> >> shared target.  This would only need to be done if the volume is
>> >> multi-attach capable and if there are more than 1 attachments on the same 
>> >> host, where the detach is happening.
>> > As above, we need to solve this more generally than just multi-attach,
>> > even single-attach is flawed today.
>> >
>> > Regards,
>> > Daniel
>>
>>
>> __________________________________________________________________________
>> OpenStack Development Mailing List (not for usage questions)
>> Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe
>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
> __________________________________________________________________________
> OpenStack Development Mailing List (not for usage questions)
> Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

__________________________________________________________________________
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Reply via email to