[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC V8 2/3] libxl domain snapshot API design
>>> On 12/8/2014 at 07:12 PM, in message <20141208111214.GC17128@xxxxxxxxxxxxxxxxxxxxx>, Wei Liu <wei.liu2@xxxxxxxxxx> wrote: > On Mon, Dec 08, 2014 at 12:34:47AM -0700, Chun Yan Liu wrote: > > > > > > >>> On 12/6/2014 at 12:06 AM, in message > > <20141205160615.GA24938@xxxxxxxxxxxxxxxxxxxxx>, Wei Liu > > <wei.liu2@xxxxxxxxxx> > > wrote: > > > I have to admit I'm confused by the back and forth discussion. It's hard > > > to justify the design of new API without knowing what the constraints > > > and requirements are from your PoV. > > > > > > Here are my two cents, not about details, but about general constraints. > > > > > > There are two layers, one is user of libxl (clients -- xl, libvirt etc) > > > and libxl (the library itself). > > > > > > 1. it's better to *not* have storage management in libxl. > > > > > > It's likely that clients can have their own management functionality > > > already. I'm told that libvirt has that as well as XAPI. Having this > > > functionality in libxl is a bit redundant and requires lots of work > > > (enlighten libxl on what a disk looks like and call out to various > > > utilities). > > > > Thanks Wei and Ian for your reply. We did have much discussion around > > can/cannot (e.g. xl can finish disk snapshot?) and should/shouldnot > > (e.g. disk snapshot process should not in xl? domain_snapshot_delete > > should not in libxl?), and confusing because have different ideas. So, > > settling it down is helpful. > > > > Talking about libvirt, it does provide storage management but through > > storage pools and volumes. But usually, we don't use storage pool/vol > > but directly use backend files, then libvirt storage driver can not > > manage them. And for libvirt vol, functionality in storage driver is > > limited, at least 'snapshot' cannot be done. So, libvirt side also > > needs to add codes to handle disk snapshot, quite like xl does. > > > > OK, so I take it that libvirt can be completely out the picture? I mean, > it's not a requirement for you to integrate with libvirt? > > I was thinking a stack like this when I replied: > > libvirt: manages snapshot (including storage snapshot) > libxl > [other lower level stuffs] > > While I read from your reply, libvirt doesn't have that functionality > (or very limited), so you would like to do things like: > > libvirt (or your homebrew toolstack) > xl (xl or libxl manages domain snapshots) > libxl > [other lower level stuffs] > > That's why you spent loads of time discussing with Ian what should be > done where, right? Partly. At least for domain disk snapshot create/delete, I prefer using qmp commands instead of calling qemu-img one by one. Using qmp commands, libvirt will need libxl's help. Of course, if libxl doesn't supply that, libvirt can call qemu-img to each disk one by one, not preferred but can do. > > > Following the constraint that it's better NOT to supply disk snapshot > > functions in libxl, then we let xl and libvirt do that by themselve > > separately, that's OK. > > > > Then I think NO new API needs to be exported in libxl, since: > > * saving/restoring memory, there are already APIs. > > The principle is that if existing API doesn't work good enough for you > we will consider adding a new one. > > We probably need a new API. If you want to do a live snapshot, we would > need to notify xl that we are in the middle of pausing and resuming a > domain. This is where we discussed a lot. Do we really need libxl_domain_snapshot_create API? or does xl can do the work? Even for live snapshot, after calling libxl_domain_suspend with LIVE flags, memory is saved and domain is paused. xl then can call disk snapshot functions to finish disk snapshots, after all of that, call libxl_domain_unpause to unpause the domain. So I don't think xl has any trouble to do that. In case there is some misunderstanding, please point out. > > > * disk snapshot work is xl internal, can be put in xl (or xlu). > > * handle JSON files is xl internal, can be put in xl. > > Yes. > > > (these are the main work vm snapshot handles). > > > > Right? > > > > This is quite different from previous document, so better to confirm. > > > > > > > > 2. it's *not* a requirement for xl to have the capability to manage > > > snapshots. > > > > > > It's the same arguement that xl has no idea on how to manage snapshots > > > created by "xl save". This should ease your concern on having to > > > duplicate code for libvirt and xl. IMHO the xl only needs to have the > > > capability to create a snapshot and create a domain from a snapshot. > > > > This way it's much easier since we don't need to maintain the snapshot > > info in file and don't need to take care of snapshot chain. But I doubt if > > that's good? > > 1. from user's side, it's a very common request to list all snapshots. > > 2. now for kvm, virsh supplies snapshot-create/delete/list/revert, > > Is it good the xl only supply snapshot-create/revert? After all, > > it's more complicated for user to take care of memory saving file > > and disk snapshot info then 'xl save' (user only needs to take > > care of memory state file). > > > > However the current architecture for libvirt to use libxl is like > > libvirt > libxl > [other lower level stuffs] > > So implementing snapshot management in xl cannot work for you either. > It's not part of the current architecture. You are right. I understand you are trying to suggest a way to ease the job. Here just to make clear this way is really better and finally acceptable? :-) Just IMO, I think xl snapshot-list is wanted, that means managing snapshots in xl is needed. > > Not that I'm against the idea of managing domain snapshot in xl, I'm > trying to reduce workload here. > > > > The > > > downside is that now xl and libvirt are disconnected, but I think it's > > > fine. > > > > Two things here: > > 1. connect xl and libvirt, then will need to manage snapshot info in libxl > (or > > libxlu) That's not preferred since the initial design. This is not the > point > > we discuss here. > > 2. for xl only, list snapshots and delete snapshots, also need to manage > > snapshot info (in xl) > > > > Considering manage snapshot info in xl, only question is about idl and > > gentypes.py, expected structure is as following and expected to be saved > > into json file, but it contains xl namespace and libxl namespace things, > > gentypes.py will have problem. Better ideas? > > > > typedef struct xl_domain_snapshot { > > char * name; > > char * description; > > uint64_t creation_time; > > char * memory_path; > > int num_disks; > > libxl_disk_snapshot *disks; > > char *parent; > > bool *current; > > } xl_domain_snapshot; > > > > The libxl_disk_snapshot suggests that you still want storage management > inside libxl, which should probably be in libxlu? Yeah. I may put it in libxlu. Question is the same, cross two name spaces. But now I think we can turn a way to do it. In xl_domain_snapshot, define xl_disk_snapshot, then before calling libxlu API, turning it into libxlu_disk_snapshot. Thanks for your concern and suggestions. Appreciate it a lot! - Chunyan > > libvirt > libxl libxlu > [other lower level stuffs] > > Wei. > > > Thanks a lot! > > Chunyan > > > > > The arguement is that you're not allowed to run two toolstack on > > > the same host (think about xl and xend in previous releases). > > > > > > Do these two constraints make your work easier (or harder)? > > > > > > Regarding JSON API, as Ian said, feel free to hook it up to libxlu. > > > > > > Wei. > > > > > > > > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |