root@prasad-autotest-2:/usr/local/autotest/client# cat
0001-Do-not-pickle-SoftwareManager.patch
>From 72fd2c3a81bf60dffd71bcffbc31e8fcaa205dd1 Mon Sep 17 00:00:00 2001
From: Prasad Joshi <[email protected]>
Date: Sat, 21 Jul 2012 01:59:19 +0530
Subject: [PATCH] Do not pickle SoftwareManager

The sleeptest on remote CentOS machine resulted in following traceback

15:45:31 ERROR| JOB ERROR: Unhandled TypeError: can't pickle file objects
Traceback (most recent call last):
  File "/tmp/sysinfo/autoserv-KCmM2V/job.py", line 1165, in step_engine
    execfile(self.control, global_control_vars, global_control_vars)
  File "/tmp/sysinfo/autoserv-KCmM2V/control.autoserv", line 13, in <module>
    pickle.dump(job.sysinfo, open(sysinfo_pickle, 'w'))
  File "/usr/lib64/python2.6/pickle.py", line 1362, in dump
    Pickler(file, protocol).dump(obj)
  File "/usr/lib64/python2.6/pickle.py", line 224, in dump
    self.save(obj)
  File "/usr/lib64/python2.6/pickle.py", line 331, in save
    self.save_reduce(obj=obj, *rv)
  File "/usr/lib64/python2.6/pickle.py", line 419, in save_reduce
  ...
  ...
  ...
  ...
  File "/usr/lib64/python2.6/pickle.py", line 306, in save
    rv = reduce(self.proto)
  File "/usr/lib64/python2.6/copy_reg.py", line 70, in _reduce_ex
    raise TypeError, "can't pickle %s objects" % base.__name__
  TypeError: can't pickle file objects

Marking SoftwareManager as not to pickle solve the problem.

Signed-off-by: Abhay Chavan <[email protected]>
Signed-off-by: Rajshree Thorat <[email protected]>
Signed-off-by: Prasad Joshi <[email protected]>
---
 client/base_sysinfo.py |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/client/base_sysinfo.py b/client/base_sysinfo.py
index 8aef38a..9029c77 100644
--- a/client/base_sysinfo.py
+++ b/client/base_sysinfo.py
@@ -192,6 +192,10 @@ class base_sysinfo(object):
                                              log_in_keyval=True))
         self.sm = software_manager.SoftwareManager()

+    def __getstate__(self):
+        ret = dict(self.__dict__)
+        ret["sm"] = None
+        return ret

     def serialize(self):
         return {"boot": self.boot_loggables, "test": self.test_loggables}
-- 
1.7.5.4

Attachment: 0001-Do-not-pickle-SoftwareManager.patch
Description: Binary data

_______________________________________________
Autotest mailing list
[email protected]
http://test.kernel.org/cgi-bin/mailman/listinfo/autotest

Reply via email to