On 01/11/2011 07:22 AM, Lucas Meneghel Rodrigues wrote: > From: Jason Wang <jasowang@xxxxxxxxxx> > > Run some workload in the background and do the migration would be helpful to > verfiy the correctness, so this patch use the Thread class to wait for the > completion of autotest cmd -- "bin/autotest control" and do the migration in > parallel. > > Changes from v1: > - Use the new super cool vm.migrate() method > > Signed-off-by: Jason Wang <jasowang@xxxxxxxxxx> > --- > client/tests/kvm/kvm_test_utils.py | 33 +++++++++++++++++++++++++++++-- > client/tests/kvm/tests/autotest.py | 5 +++- > client/tests/kvm/tests_base.cfg.sample | 11 ++++++++++ > 3 files changed, 45 insertions(+), 4 deletions(-) > > diff --git a/client/tests/kvm/kvm_test_utils.py b/client/tests/kvm/kvm_test_utils.py > index c1bff29..c9a9b42 100644 > --- a/client/tests/kvm/kvm_test_utils.py > +++ b/client/tests/kvm/kvm_test_utils.py > @@ -429,7 +429,7 @@ def get_memory_info(lvms): > return meminfo > > > -def run_autotest(vm, session, control_path, timeout, outputdir): > +def run_autotest(vm, session, control_path, timeout, outputdir, params): > """ > Run an autotest control file inside a guest (linux only utility). > > @@ -439,6 +439,9 @@ def run_autotest(vm, session, control_path, timeout, outputdir): > @param timeout: Timeout under which the autotest control file must complete. > @param outputdir: Path on host where we should copy the guest autotest > results to. > + > + The following params is used by the migration > + @param params: Test params used in the migration test > """ > def copy_if_hash_differs(vm, local_path, remote_path): > """ > @@ -515,6 +518,11 @@ def run_autotest(vm, session, control_path, timeout, outputdir): > raise error.TestError("Invalid path to autotest control file: %s" % > control_path) > > + migrate_background = params.get("migrate_background") == "yes" > + if migrate_background: > + mig_timeout = float(params.get("mig_timeout", "3600")) > + mig_protocol = params.get("migration_protocol", "tcp") Don't you think it's a cleaner to extract these parameters from params outside this function (in the autotest wrapper test) and pass them to this function instead of the params dict? We only need mig_protocol and mig_timeout. Migration will take place if mig_protocol is a nonempty string. Alternatively, we can move the contents of this function back to the test itself, because there's only 1 test using this function, and then we can look at params directly like all tests do. > compressed_autotest_path = "/tmp/autotest.tar.bz2" > > # To avoid problems, let's make the test use the current AUTODIR > @@ -551,12 +559,31 @@ def run_autotest(vm, session, control_path, timeout, outputdir): > except kvm_subprocess.ShellError: > pass > try: > + bg = None > try: > logging.info("---------------- Test output ----------------") > - session.cmd_output("bin/autotest control", timeout=timeout, > - print_func=logging.info) > + if migrate_background: > + mig_timeout = float(params.get("mig_timeout", "3600")) > + mig_protocol = params.get("migration_protocol", "tcp") > + > + bg = kvm_utils.Thread(session.cmd_output, > + kwargs={'cmd': "bin/autotest control", > + 'timeout': timeout, > + 'print_func': logging.info}) > + > + bg.start() > + > + while bg.is_alive(): > + logging.info("Tests is not ended, start a round of" > + "migration ...") > + vm.migrate(timeout=mig_timeout, protocol=mig_protocol) > + else: > + session.cmd_output("bin/autotest control", timeout=timeout, > + print_func=logging.info) > finally: > logging.info("------------- End of test output ------------") > + if migrate_background and bg: > + bg.join() > except kvm_subprocess.ShellTimeoutError: > if vm.is_alive(): > get_results() > diff --git a/client/tests/kvm/tests/autotest.py b/client/tests/kvm/tests/autotest.py > index 0b97b03..37e1b00 100644 > --- a/client/tests/kvm/tests/autotest.py > +++ b/client/tests/kvm/tests/autotest.py > @@ -19,8 +19,11 @@ def run_autotest(test, params, env): > > # Collect test parameters > timeout = int(params.get("test_timeout", 300)) > + migrate = params.get("migrate" , "no") == "yes" > control_path = os.path.join(test.bindir, "autotest_control", > params.get("test_control_file")) > outputdir = test.outputdir > > - kvm_test_utils.run_autotest(vm, session, control_path, timeout, outputdir) > + kvm_test_utils.run_autotest(vm, session, control_path, timeout, outputdir, > + params) > + > diff --git a/client/tests/kvm/tests_base.cfg.sample b/client/tests/kvm/tests_base.cfg.sample > index 047b0f3..c5d9ca3 100644 > --- a/client/tests/kvm/tests_base.cfg.sample > +++ b/client/tests/kvm/tests_base.cfg.sample > @@ -170,6 +170,17 @@ variants: > - with_file_transfer: > iterations = 1 > type = migration_with_file_transfer > + - with_autotest: > + type = autotest > + migrate_background = yes > + test_timeout = 1800 > + variants: > + - dbench: > + test_control_file = dbench.control > + - stress: > + test_control_file = stress.control > + - monotonic_time: > + test_control_file = monotonic_time.control > > - migrate_multi_host: install setup unattended_install.cdrom > type = migration_multi_host -- 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