Hi Lucas,
thank you for patch. I've copied the code into my branch and I've tried
to run rv_connect, migration and rv_disconnect tests.
This test fails during migration where clone.create(....) is called and
it is before your patch . That's because spice port is the same.
Problem is that spice port has to be changed during migration (on single
host). Someone told me that this is not real life. But in our single
host environment is.
Without this single host migration will fail.
Vaclav
On 08/13/2012 09:53 PM, Lucas Meneghel Rodrigues wrote:
A spice client can be informed of a migration, so it
connects to the new vm automatically, keeping the
client connection alive during any number of migrations,
through a monitor command.
This patch implements calling the appropriate command
(there are 3 different valid commands for RHEL userspace,
older upstream and current upstream qemu), for both
human monitor and qmp. This way it'll be possible to
create a test for spice seamless migration test (issue #158).
Spice team, please take a look at this and provide feedback.
Signed-off-by: Lucas Meneghel Rodrigues<[email protected]>
---
client/virt/kvm_vm.py | 43 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 43 insertions(+)
diff --git a/client/virt/kvm_vm.py b/client/virt/kvm_vm.py
index 90f26fd..c1e5e74 100644
--- a/client/virt/kvm_vm.py
+++ b/client/virt/kvm_vm.py
@@ -2329,6 +2329,49 @@ class VM(virt_vm.BaseVM):
error.context()
try:
+ if self.params["display"] == "spice":
+ dest_port = clone.spice_options['spice_port']
+ logging.debug("Informing migration to spice client")
+ commands = ["__com.redhat_spice_migrate_info",
+ "spice_migrate_info",
+ "client_migrate_info"]
+
+ if self.monitor.protocol == "human":
+ out = self.monitor.cmd("help", debug=False)
+ for command in commands:
+ if "\n%s" % command in out:
+ # spice_migrate_info requires dest_host, dest_port
+ if command in commands[:2]:
+ command = "%s %s %s" % (command, dest_host,
+ dest_port)
+ # client_migrate_info also requires protocol
+ else:
+ command = "%s %s %s %s" % (command,
+
self.params['display'],
+ dest_host, dest_port)
+ break
+ self.monitor.cmd(command)
+
+ elif self.monitor.protocol == "qmp":
+ out = self.monitor.cmd_obj({"execute": "query-commands"})
+ for command in commands:
+ if {'name': command} in out['return']:
+ # spice_migrate_info requires dest_host, dest_port
+ if command in commands[:2]:
+ command_dict = {"execute": command,
+ "arguments":
+ {"hostname": dest_host,
+ "port": dest_port}}
+ # client_migrate_info also requires protocol
+ else:
+ command_dict = {"execute": command,
+ "arguments":
+ {"protocol":
self.params['display'],
+ "hostname": dest_host,
+ "port": dest_port}}
+ break
+ self.monitor.cmd_obj(command_dict)
+
if protocol == "tcp":
if local:
uri = "tcp:0:%d" % clone.migration_port
_______________________________________________
Autotest-kernel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/autotest-kernel