* [PATCH 1/2] KVM test: Add the ability to test migration during guest installation @ 2011-01-11 5:22 Lucas Meneghel Rodrigues 2011-01-11 5:22 ` [PATCH 2/2] KVM test: Run client tests of autotest in parallel with migration Lucas Meneghel Rodrigues 0 siblings, 1 reply; 3+ messages in thread From: Lucas Meneghel Rodrigues @ 2011-01-11 5:22 UTC (permalink / raw) To: autotest; +Cc: kvm From: Jason Wang <jasowang@redhat.com> It's helpful to test the installation during migration. So patch just reuse the unattended installation tests and migrate the vm during the wait loop. The params of "-initrd", "-kernel" and "-append" were also dropped as they may break the migration. Changes from v1: - Use the new super cool vm.migrate() method Signed-off-by: Jason Wang <jasowang@redhat.com> --- client/tests/kvm/tests/unattended_install.py | 22 ++++++++++++++++++++-- client/tests/kvm/tests_base.cfg.sample | 3 +++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/client/tests/kvm/tests/unattended_install.py b/client/tests/kvm/tests/unattended_install.py index 9617603..fdb020a 100644 --- a/client/tests/kvm/tests/unattended_install.py +++ b/client/tests/kvm/tests/unattended_install.py @@ -1,4 +1,4 @@ -import logging, time, socket +import logging, time, socket, re from autotest_lib.client.common_lib import error import kvm_utils, kvm_test_utils @@ -24,6 +24,11 @@ def run_unattended_install(test, params, env): post_install_delay = 0 install_timeout = float(params.get("timeout", 3000)) + 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") + logging.info("Starting unattended install watch process. " "Timeout set to %ds (%d min)", install_timeout, install_timeout/60) @@ -46,7 +51,20 @@ def run_unattended_install(test, params, env): break except socket.error: pass - time.sleep(1) + + if migrate_background: + # Drop the params which may break the migration + # Better method is to used dnsmasq to do the unattended installation + if vm.params.get("initrd"): + vm.params["initrd"] = None + if vm.params.get("kernel"): + vm.params["kernel"] = None + if vm.params.get("extra_params"): + vm.params["extra_params"] = re.sub("--append '.*'", "", + vm.params["extra_params"]) + vm.migrate(timeout=mig_timeout, protocol=mig_protocol) + else: + time.sleep(1) client.close() end_time = time.time() time_elapsed = int(end_time - start_time) diff --git a/client/tests/kvm/tests_base.cfg.sample b/client/tests/kvm/tests_base.cfg.sample index 6374923..047b0f3 100644 --- a/client/tests/kvm/tests_base.cfg.sample +++ b/client/tests/kvm/tests_base.cfg.sample @@ -103,6 +103,9 @@ variants: kernel = vmlinuz initrd = initrd.img nic_mode = tap + # uncomment the following line to test the migration in parallel + # migrate_with_background = yes + variants: # Install guest from cdrom - cdrom: -- 1.7.3.4 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH 2/2] KVM test: Run client tests of autotest in parallel with migration 2011-01-11 5:22 [PATCH 1/2] KVM test: Add the ability to test migration during guest installation Lucas Meneghel Rodrigues @ 2011-01-11 5:22 ` Lucas Meneghel Rodrigues 2011-01-11 10:39 ` Michael Goldish 0 siblings, 1 reply; 3+ messages in thread From: Lucas Meneghel Rodrigues @ 2011-01-11 5:22 UTC (permalink / raw) To: autotest; +Cc: kvm From: Jason Wang <jasowang@redhat.com> 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@redhat.com> --- 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") + 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 -- 1.7.3.4 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH 2/2] KVM test: Run client tests of autotest in parallel with migration 2011-01-11 5:22 ` [PATCH 2/2] KVM test: Run client tests of autotest in parallel with migration Lucas Meneghel Rodrigues @ 2011-01-11 10:39 ` Michael Goldish 0 siblings, 0 replies; 3+ messages in thread From: Michael Goldish @ 2011-01-11 10:39 UTC (permalink / raw) To: Lucas Meneghel Rodrigues; +Cc: autotest, kvm, Jason Wang On 01/11/2011 07:22 AM, Lucas Meneghel Rodrigues wrote: > From: Jason Wang <jasowang@redhat.com> > > 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@redhat.com> > --- > 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 ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2011-01-11 10:38 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-01-11 5:22 [PATCH 1/2] KVM test: Add the ability to test migration during guest installation Lucas Meneghel Rodrigues 2011-01-11 5:22 ` [PATCH 2/2] KVM test: Run client tests of autotest in parallel with migration Lucas Meneghel Rodrigues 2011-01-11 10:39 ` Michael Goldish
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox