
On Mon, Jul 16, 2007 at 03:43:48PM +0100, Richard W.M. Jones wrote:
Dan Smith wrote:
RJ> * Params is a linked list of hypervisor-specific parameters. Each RJ> * element is a virMigrateParamPtr containing the following fields: RJ> * name Parameter name being set. RJ> * value A union expressing the value. RJ> * value.strv A string value. RJ> * value.longv A long value. RJ> * next Next in linked list (or NULL for end of list).
This should allow us to pass URIs to qemu, as well. I like it :)
Can you give us some idea of how QEMU migration works?
KVM added a "migrate" function to the qemu console ("migrate <URI>"). For example: "migrate tcp://hostname:4444" and "migrate ssh://hostname". I'm not sure if that is in qemu upstream, or whether qemu upstream is doing something else.
I think that we shouldn't pass URIs, but instead we should construct the URI from the hostname and port number, and something like an optional "VIR_KVM_TRANSPORT" virMigrateParamPtr.
(This implies that port number, like hostname, becomes a main argument to virDomainMigrate).
Incidentally, KVM also supports cancelling migrations (this interface doesn't), getting the status of migrations (this interface assumes the migration is synchronous and is supposed to only return when the migration is done), and setting resource limits. The latter implies that resource limits should be a non-Xen-specific parameter.
This is an interesting point. This gets onto the more general question of being able to provide incremental feedback / async notifications / querying progress of ongoing ops. One could make use of the flags param by allowing the app to specify 'VIR_MIGRATE_ASYNC' so it returned immediately. Apps would then either need to poll to find out when an operation had completed or failed, or register a callback to be invoked upon completion / failure. The latter would obviously entail adding making the event loop stuff public instead of driver internal. One can say the same of the existing save / restore methods too - it would be desriable to be able to run those in backend, and/or cancel them. The way virt-manager deals with now is to just spawn a thread to let us run them in the BG without blocking the UI. This doesn't deal with cancellation though. Dan. -- |=- Red Hat, Engineering, Emerging Technologies, Boston. +1 978 392 2496 -=| |=- Perl modules: http://search.cpan.org/~danberr/ -=| |=- Projects: http://freshmeat.net/~danielpb/ -=| |=- GnuPG: 7D3B9505 F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 -=|