[Engine-devel] Floating Disks implementation in REST-API

Geert Jansen gjansen at redhat.com
Wed Apr 11 14:25:21 UTC 2012


On 04/10/2012 04:46 PM, Ori Liel wrote:

>> I assume that a floating disk can be attached to 0 VMs as well, right?
>> So i would assume we get a top-level /disks collection correct?? And I
>> assume that collection would only list floating disks?
>
> Indeed, there will be a root collection. but I do not see a reason why this collection should only show floating disks. I tend to think it should show all disks in the system. Keep in mind that we're going towards Shared disks, meaning the same disk may be used by two VMs, so it makes sense to show such a disk in the root collection, along with the information of which VMs it's attached to.

My gut feeling tells me it's easier to work with if it's only floating 
disks. Because if the disk is not floating, your primary URL to work on 
the disk will be the one under /vms.

>>
>> In my view, backwards compatible DELETE semantics for a floating disk
>> aren't that bad:
>>
>>   DELETE /vms/{vm:id}/disks/{disk:id}
>>
>> =>  Accept a<detach>true|false</detach>  argument.
>> =>  Defaults to "false" for compatibility.
>>
>> This means that DELETE will by default really DELETE any non-floating
>> disk. That is compatibility with today. For safety, implement this:
>>
>> =>  When deleting a disk that is floating, fail unless<force>  is also
>> set to "true". And always fail if one of the other VMs is running
>> (obviously).
>>
>
> I Agree with Eoghan that the drawbacks outweigh the benefits in this case,
> for the reasons Eoghan said.

Sorry it took a while to get back. I had a feeling that i didn't like 
the approach, and had to figure out why.

You and Eoghan propose this to detach a disk:

    POST /api/vms/{vm:id}/disks/{disk:id}/detach => detach disk

The problem i have with this is that after the "detach" action, the disk 
is gone. In my view, it is not an expected outcome of an action to 
remove the entity it is working on, because POST is not expected to 
delete the URL it is working on. This assumption is implicit for example 
when we do actions asynchronously. The status monitor that we return is 
actually a URL under the resource itself.

Two other reasons are:

  * "detach" and "attach" for NICs: there was actually a BZ open to 
implement these with PUT and DELETE as well. We just didn't have time to 
do this. So in my view this is not a valid precendent.

  * Also  "detach" and "attach" for NICs do *not* remove the NIC object 
itself, but instead it detached the network from the NIC but leaves the 
NIC in place.

So in my view, the POST and DELETE option is the best one.

Regards,
Geert



More information about the Engine-devel mailing list