From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lucas Meneghel Rodrigues Subject: Re: [KVM-AUTOTEST PATCH] kvm_runtest_2.py: use pickle instead of shelve when loading/saving env Date: Thu, 28 May 2009 10:26:02 -0300 Message-ID: <1243517162.2976.1050.camel@localhost.localdomain> References: <8e37a36c044c20259dcd8a34d72a651e85b37d5f.1243179847.git.mgoldish@redhat.com> <838bcae1b49be011e2cde1294a391a296059464a.1243179847.git.mgoldish@redhat.com> <6a70cb56a775fdb688da0231073abb0ce4baa7b1.1243179847.git.mgoldish@redhat.com> <63bacaa214ccd95c18fb644056855acd72757ac4.1243179847.git.mgoldish@redhat.com> <43f85767b32b927ca5e32abc5ded281915343656.1243179847.git.mgoldish@redhat.com> <626078156e56b4fd573de078b2f1424e47e8f637.1243179847.git.mgoldish@redhat.com> Mime-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org To: Michael Goldish Return-path: Received: from mx2.redhat.com ([66.187.237.31]:37694 "EHLO mx2.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754636AbZE1N0E (ORCPT ); Thu, 28 May 2009 09:26:04 -0400 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n4SDQ68G024619 for ; Thu, 28 May 2009 09:26:06 -0400 In-Reply-To: Sender: kvm-owner@vger.kernel.org List-ID: On Sun, 2009-05-24 at 18:46 +0300, Michael Goldish 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). Looks good to me. > Signed-off-by: Michael Goldish > --- > client/tests/kvm_runtest_2/kvm_runtest_2.py | 29 ++++++++++++++++++++------ > 1 files changed, 22 insertions(+), 7 deletions(-) > > diff --git a/client/tests/kvm_runtest_2/kvm_runtest_2.py b/client/tests/kvm_runtest_2/kvm_runtest_2.py > index a69951b..5f7f6ad 100644 > --- a/client/tests/kvm_runtest_2/kvm_runtest_2.py > +++ b/client/tests/kvm_runtest_2/kvm_runtest_2.py > @@ -3,9 +3,9 @@ > import sys > import os > import time > -import shelve > import random > import resource > +import cPickle > > from autotest_lib.client.bin import test > from autotest_lib.client.common_lib import error > @@ -18,6 +18,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_runtest_2(test.test): > version = 1 > > @@ -65,7 +81,7 @@ class kvm_runtest_2(test.test): > > # Open the environment file > env_filename = os.path.join(self.bindir, params.get("env", "env")) > - env = shelve.open(env_filename, writeback=True) > + env = load_env(env_filename, {}) > kvm_log.debug("Contents of environment: %s" % str(env)) > > try: > @@ -87,24 +103,23 @@ class kvm_runtest_2(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: > kvm_log.error("Test failed: %s" % e) > kvm_log.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) > kvm_log.debug("Contents of environment: %s" % str(env)) > - env.sync() > - env.close() > + dump_env(env, env_filename) > > def postprocess(self): > pass -- Lucas Meneghel Rodrigues Software Engineer (QE) Red Hat - Emerging Technologies