Few questions on Backup Restore API implmn.
snmishra at linux.vnet.ibm.com
snmishra at linux.vnet.ibm.com
Wed Jun 5 16:16:44 UTC 2013
Quoting Deepak C Shetty <deepakcs at linux.vnet.ibm.com>:
> On 06/05/2013 05:18 PM, Michael Pasternak wrote:
>> On 06/05/2013 02:14 PM, Deepak C Shetty wrote:
>>> On 06/05/2013 03:58 PM, Michael Pasternak wrote:
>>>> Hi Deepak,
>>>>
>>>> On 05/30/2013 06:07 PM, Deepak C Shetty wrote:
>>>>> Hi All,
>>>>> Per the previous mail from Ayal.. I am refering to the flow below...
>>>>>
>>>>> The backup flow should be (all api calls are engine REST API):
>>>> I disagree with this, by following this pattern you move internal
>>>> logic (even more than this given implementation specific logic) to
>>>> the api users instead of abstracting it and creating solid api for
>>>> backups,
>>>>
>>>> +++++++++ several api calls for single backup ++++++++++++++
>>>>
>>>>
>>>> cons:
>>>> ====
>>>>
>>>> 1. user have to be aware of internal (implementation specific)
>>>> flow of each provider in order to be able creating backup
>>>> 1.1 call add(a)->do(a)->del(a)->do(b)->etc.
>>>> 2. no flexibility for backup provider to change the backup flow
>>>> (as it would be considered an api break)
>>>> 3. no atomic resolution for the /backup failures
>>>> 3.1. failure at do(b) of add(a)->do(a)->del(a)->do(b)->etc. will mean
>>>> that user have to del(a) manually and if it's deeper in the flow
>>>> every api user will have to implement own rollbacks to
>>>> the steps that took
>>>> place before the failure.
>>>> 4. backward compatibility becomes an issue when exposing
>>>> internals in such a low level.
>>>> 5. new features expose becomes much complex task cause they may
>>>> require performing extra
>>>> step/s in a middle.
>>>>
>>>> pros:
>>>> ====
>>>>
>>>> can't think of any ..., cause it doesn't give you flexibility,
>>>> but creates unnatural
>>>> (to public APIs) complexity.
>>> I was able to dig the below from one of the older mails. I had
>>> exactly this Q on why we need separate APIs Vs 1 and this is what
>>> Ayal had to say
>>>
>>> Deepak asked:
>>>
>>> /Wouldn't it be better if there was just 1 REST API for startign backup
>>> which would take all the necessary inputs (VM uuid, hostid, disk(s)) and
>>> internally caused the above individual APIs to get called ?
>>> Why do we have to expose each of the steps in backup process as
>>> individual REST APIs ?
>>> /
>>>
>>> Ayal said:
>>>
>>> /1. Because a single API assumes that I always want to backup
>>> everything which isn't necessarily true (normally backup policy
>>> for system disk and data disks are different)
>> modelling backup under /api/vms/xxx/disks/yyy/backups solves this.
>>
>>> 2. Going forward we will have disk level snapshot in which case
>>> the backup API would have to change.
>> same
>>
>>> 3. You could always return the vm config per disk when calling
>>> "prepare backup disk" which would be a bit redundant now but once
>>> we have disk level snapshots it would be more relevant and this
>>> way remove 1 API call now.
>>> Later on when we do have disk level snaps it could be an option to
>>> the command to take the snap or something I guess.
>> it's only proves my point, we can/should hide this under api abstraction
>> rather than forcing users using different flows now and then.
>>
>>> /
>>> So i kind of agreed to what Ayal said... from the perspective that
>>> it provides flexibility to the end user using the API, as to how
>>> he/she wants to script/use it.
>>> What do you think ? I just wanted to put the above here... so
>>> that we are sure we can considering all aspects before making the
>>> decision on 1 Vs many APIs.
>> i've mentioned this before, - i don't think this is about
>> flexibility, if you want to allow
>> user doing several things differently, - expose several api for
>> same thing (like method overloads),
>> but it doesn't mean that we should be exposing implementation
>> internals to end user.
>>
>>> 1 API provides simplicity, but getting flexibility using 1 API
>>> would mean passing addnl params.. for eg> If i want to backup a
>>> particular vmdisk only, then the xml below would change, rite ?
>> no, you misunderstood, see url [1] from my previous eamil, you
>> already doing this for specific disk - yyy
>>
>> [1] /api/vms/xxx/disks/yyy/backups
>
> I see your point now.... thanks for correcting. I think i am ok with
> 1 API approach then.
Added Ayal to the CC. Since he is the owner of this feature. Would
like to hear his opinion.
-Sharad
>
>
>>> Questions...
>>>
>>> 1) My current implmn of prepareBackupDisk in VDSM (pls see
>>> http://gerrit.ovirt.org/#/q/status:open+project:vdsm+branch:master+topic:backup-restore,n,z)
>>> returns drive and cbtinfo as dicts back to engine. The
>>> understnading here is that the drive returned will be a dict which
>>> has all the necessary info
>>> to represent a NBD drive to libvirt... hence this drive will be
>>> passed as-is in the "attach disk to VM" REST API. Is this correct ?
>>>
>>> Note that i cannot return a disk UUID (like VDSM does for create
>>> volume case).. because in preparebackupdisk case the image is
>>> exported usign qemu-nbd
>>> as a block device over the network... and hence its not a regular
>>> vdsm-type disk, hence no UUID, Agree ?
>>>
>>> 2) In "attach disk to VM" REST API user will pass the drive dict
>>> which he/she got as part of preparebackupdisk api.. as-is
>>> and VDSM will need to add support for accepting NBD disk as a
>>> valid disktype in VM.hotplugDisk() code of VDSM.
>>>>> The ability to add a network disk is present in libvirtvm.py...
>>>>> as part of my GlusterSD work, sicne gluster is represented as a
>>>>> NBD to QEMU
>>>>> but it doesn't work at the API.py level.. its only from
>>>>> prepareImage onwards... hence the need to modify API.py to
>>>>> accept NBD disk type and connect
>>>>> to the libvirtvm.py appropriately
>>>>>
>>>>> Is this acceptable.. otherwise there is no good way to pass the
>>>>> NBD drive's info back to VDSM as part of existing "attach disk
>>>>> to VM" API
>>>>> Also does the existing "attach disk to VM" API work if a
>>>>> pre-loaded drive dict/hashmap is provided by the user. This will
>>>>> have drive->type = network
>>>>> and not file/blcok as is currently supported
>>> Mike,
>>> Could you provide your views on this pls ? How do we represent
>>> the NBD disk and pass it back to VDSM as part of 'hotplugDisk' API
>>> Currently hotplugDisk doesn't support drive of type = network!
>
>
> What do you think of the above ? I am guessing your overlooked this
> in the prev mail ?
> I believe my Q above is still relevant irrespective of 1 API or multiple API.
>
> _______________________________________________
> Arch mailing list
> Arch at ovirt.org
> http://lists.ovirt.org/mailman/listinfo/arch
More information about the Arch
mailing list