[Engine-devel] Logical network Usages collection problematic approach

Ori Liel oliel at redhat.com
Wed May 2 15:25:35 UTC 2012


>
>
>> The new design of logical network 'usages' collection came out a bit
>> problematic or shall i say annoying.
>> The idea is to send the entire collection elements every time a user
>> wants to update a single usage otherwise the missing elements will be
>> automatically removed from the collection.
>>
>> Example:
>> having <usages><usage>VM</usage><usages>
>> 1. in order to add 'display' usage to the collection i must send 'vm'
>> as well.
>> 2. to remove an element from the collection, i must send the entire
>> collection without the desired element
>> (note: in this case it is only one extra element for every update but
>> in other cases it could be much more)
>
>
>Yep, this seems to conflict with the general idiom around the
>interpretation of missing properties in a PUT representation -
>i.e. any properties omitted from the representation are ignored
>and not changed.
>

**I'm going to explain the current modelling; this does not mean I 
object to other modellings**

In the current modelling, usages are a non-trivial collection within a 
Network, but they are not business entities, and thus do not have their
own 'context' (i.e, there's no: .../networks/{network:id}/usages).

This is not new to our API; VM Custom Properties behave in the same way. 
If user doesn't pass custom-properties when updating a VM, they are 
unchanged. But if he passes <custom_properties> element, then its contents
*replace* the previous context. This means effectively that if an existing
custom property isn't there - it will be deleted. 

I understood from Avi (although I don't think you mentioned it in this 
mail), that there's a bug, that if the user doesn't pass <usages> at all - 
they will all be deleted. This is off course a bug, and it will be fixed. 
But if user passes empty <usages> then yes, they all will be deleted. 

>
>> The solution should be:
>> <usages><vm>true</vm><display>false</display></usages>
>> That way we can send a single usage having different boolean text
>> without including the entire collection elements.
>
>
>I wonder would a POST/DELETE idiom be more natural, if the individual
>usages would be pressed into service as a psuedo-OID, e.g:
>
>  POST .../networks/network_id/usages HTTP/1.1
>  <usage id="VM"/>
>
>  201 Created
>  Location: .../networks/network_id/usages/VM
>  <usage id="VM" href=".../networks/network_id/usages/VM"/>
>
>--
>
>  GET .../networks/network_id/usages HTTP/1.1
>
>  200 OK
>  Location: .../networks/network_id/usages/VM
>  <usages>
>    <usage id="VM" href=".../networks/network_id/usages/VM"/>
>  </usages>
>
>--
>
>  POST .../networks/network_id/usages HTTP/1.1
>  <usage id="display"/>
>
>  201 Created
>  Location: .../networks/network_id/usages/display
>  <usage id="display" href=".../networks/network_id/usages/display"/>
>
>--
>
>  GET .../networks/network_id/usages HTTP/1.1
>
>  200 OK
>  <usages>
>    <usage id="VM" href=".../networks/network_id/usages/VM"/>
>    <usage id="display" href=".../networks/network_id/usages/display"/>
>  <usages>
>
>--
>
>  DELETE .../networks/network_id/usages/VM
>  
>  204 No Content
>
>--
>
>  GET .../networks/network_id/usages HTTP/1.1
>
>  200 OK
>  <usages>
>    <usage id="display" href=".../networks/network_id/usages/display"/>
>  <usages>
>
>So from each usage would appear like a first class resource from the
>perspective of the creation/deletion idiom. If the client providing
>the ID is considered inconsistent, this could be a "name" child
>element instead, e.g.:
>
>  POST .../networks/network_id/usages HTTP/1.1
>  <usage>
>    <name>display</name>
>  </usage>
>
>  201 Created
>  Location: .../networks/network_id/usages/display
>  <usage id="display" href=".../networks/network_id/usages/display">
>    <name>display</name>
>  </usage>
>

  
We'd need to develop an infrastructure for generating on-the-fly IDs for internal, 
non-entity, collections (based on a specified field) - and then correctly following
links that contain these IDs. I like it, but it won't be trivial, so the question 
is - is now the time to do it? 

Ori. 

>
>Cheers,
>Eoghan  
>



More information about the Engine-devel mailing list