From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lucas Meneghel Rodrigues Subject: Re: [KVM-AUTOTEST PATCH 8/8] kvm_runtest_2.py: use pickle instead of shelve when loading/saving env Date: Mon, 08 Jun 2009 12:21:15 -0300 Message-ID: <1244474475.2849.65.camel@localhost.localdomain> References: <1244234794-7844-1-git-send-email-lmr@redhat.com> <1244234794-7844-2-git-send-email-lmr@redhat.com> <1244234794-7844-3-git-send-email-lmr@redhat.com> <1244234794-7844-4-git-send-email-lmr@redhat.com> <1244234794-7844-5-git-send-email-lmr@redhat.com> <1244234794-7844-6-git-send-email-lmr@redhat.com> <1244234794-7844-7-git-send-email-lmr@redhat.com> <1244234794-7844-8-git-send-email-lmr@redhat.com> <1244234794-7844-9-git-send-email-lmr@redhat.com> Mime-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org, Michael Goldish To: autotest@test.kernel.org Return-path: Received: from mx2.redhat.com ([66.187.237.31]:48721 "EHLO mx2.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755966AbZFHPVR (ORCPT ); Mon, 8 Jun 2009 11:21:17 -0400 In-Reply-To: <1244234794-7844-9-git-send-email-lmr@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: On Fri, 2009-06-05 at 17:46 -0300, Lucas Meneghel Rodrigues wrote: > pickle allows more control over the load/save process. Specifically, it > enables us to dump the contents of an object to disk without having to > unpickle it. > > shelve, which uses pickle, seems to pickle and unpickle every time sync() > is called. This is bad for classes that need to be unpickled only once > per test (such a class will be introduced in a future patch). Applied. > Signed-off-by: Michael Goldish > --- > client/tests/kvm/kvm.py | 35 +++++++++++++++++++++++++---------- > 1 files changed, 25 insertions(+), 10 deletions(-) > > diff --git a/client/tests/kvm/kvm.py b/client/tests/kvm/kvm.py > index 1b9013c..a658425 100644 > --- a/client/tests/kvm/kvm.py > +++ b/client/tests/kvm/kvm.py > @@ -1,4 +1,4 @@ > -import sys, os, time, shelve, random, resource, logging > +import sys, os, time, shelve, random, resource, logging, cPickle > from autotest_lib.client.bin import test > from autotest_lib.client.common_lib import error > > @@ -10,6 +10,22 @@ class test_routine: > self.routine = None > > > +def dump_env(obj, filename): > + file = open(filename, "w") > + cPickle.dump(obj, file) > + file.close() > + > + > +def load_env(filename, default=None): > + try: > + file = open(filename, "r") > + except: > + return default > + obj = cPickle.load(file) > + file.close() > + return obj > + > + > class kvm(test.test): > """ > Suite of KVM virtualization functional tests. > @@ -62,12 +78,12 @@ class kvm(test.test): > keys = params.keys() > keys.sort() > for key in keys: > - logging.debug(" %s = %s" % (key, params[key])) > + logging.debug(" %s = %s", key, params[key]) > self.write_test_keyval({key: params[key]}) > > # Open the environment file > env_filename = os.path.join(self.bindir, "env") > - env = shelve.open(env_filename, writeback=True) > + env = load_env(env_filename, {}) > logging.debug("Contents of environment: %s" % str(env)) > > try: > @@ -90,21 +106,20 @@ class kvm(test.test): > > # Preprocess > kvm_preprocessing.preprocess(self, params, env) > - env.sync() > + dump_env(env, env_filename) > # Run the test function > routine_obj.routine(self, params, env) > - env.sync() > + dump_env(env, env_filename) > > except Exception, e: > - logging.error("Test failed: %s" % e) > + logging.error("Test failed: %s", e) > logging.debug("Postprocessing on error...") > kvm_preprocessing.postprocess_on_error(self, params, env) > - env.sync() > + dump_env(env, env_filename) > raise > > finally: > # Postprocess > kvm_preprocessing.postprocess(self, params, env) > - logging.debug("Contents of environment: %s" % str(env)) > - env.sync() > - env.close() > + logging.debug("Contents of environment: %s", str(env)) > + dump_env(env, env_filename) -- Lucas Meneghel Rodrigues Software Engineer (QE) Red Hat - Emerging Technologies