On Tue, 21 Aug 2012 12:02:11 -0300 Lucas Meneghel Rodrigues <lmr@xxxxxxxxxx> wrote: > When using QMP monitor as the sole monitor on KVM autotest > (something that we sadly did not exercise on our test farms), > starting qemu with -S and then issuing 'cont' will cause > errors, since the error treatment with QMP monitors is more > strict [1]. Take advantage of the fact that error treatment > with the QMP json structures is much easier, and handle > failures during migration accordingly. > > With this patch, migration works properly using only QMP > monitors. > > [1] This means we probably should be more rigorous treating > Human Monitor errors, but that's going to be handled later. > > CC: Qingtang Zhou <qzhou@xxxxxxxxxx> > CC: Gerd Hoffmann <kraxel@xxxxxxxxxx> > Signed-off-by: Lucas Meneghel Rodrigues <lmr@xxxxxxxxxx> > --- > client/virt/kvm_monitor.py | 8 +++++++- > client/virt/kvm_vm.py | 10 +++++++++- > 2 files changed, 16 insertions(+), 2 deletions(-) > > diff --git a/client/virt/kvm_monitor.py b/client/virt/kvm_monitor.py > index 8b5e251..9d8ed87 100644 > --- a/client/virt/kvm_monitor.py > +++ b/client/virt/kvm_monitor.py > @@ -1152,7 +1152,13 @@ class QMPMonitor(Monitor): > args = {"uri": uri, > "blk": full_copy, > "inc": incremental_copy} > - return self.cmd("migrate", args) > + try: > + return self.cmd("migrate", args) > + except QMPCmdError, e: > + if e.data['class'] == 'SockConnectInprogress': We've refactored our errors in QMP and most errors are going away (the one above included). The only errors that are staying for compatibility are: CommandNotFound, DeviceEncrypted, DeviceNotActive, DeviceNotFound, KVMMissingCap, MigrationExpected. All other errors are going to be simply GenericError. > + logging.debug("Migrate socket connection still initializing...") > + else: > + raise e > > > def migrate_set_speed(self, value): > diff --git a/client/virt/kvm_vm.py b/client/virt/kvm_vm.py > index 871b824..19d018d 100644 > --- a/client/virt/kvm_vm.py > +++ b/client/virt/kvm_vm.py > @@ -1743,7 +1743,15 @@ class VM(virt_vm.BaseVM): > output_params=(outfile,)) > > # start guest > - self.monitor.cmd("cont") > + if self.monitor.verify_status("paused"): > + try: > + self.monitor.cmd("cont") > + except kvm_monitor.QMPCmdError, e: > + if ((e.data['class'] == "MigrationExpected") and > + (migration_mode is not None)): > + logging.debug("Migration did not start yet...") > + else: > + raise e > > finally: > fcntl.lockf(lockfile, fcntl.LOCK_UN) -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html