[csw-devel] SF.net SVN: gar:[12127] csw/mgar/gar/v2/lib/python

wahwah at users.sourceforge.net wahwah at users.sourceforge.net
Thu Dec 30 03:47:56 CET 2010


Revision: 12127
          http://gar.svn.sourceforge.net/gar/?rev=12127&view=rev
Author:   wahwah
Date:     2010-12-30 02:47:56 +0000 (Thu, 30 Dec 2010)

Log Message:
-----------
checkpkg: Raise errors when data object is missing

Srv4 objects use a separate tables with pickled data structures.  It is
possible, if the database becomes inconsistent, that a srv4 object is missing
the corresponding data object.  Detect that early and throw a meaningful error
message.

Modified Paths:
--------------
    csw/mgar/gar/v2/lib/python/checkpkg_lib.py
    csw/mgar/gar/v2/lib/python/package_stats.py

Modified: csw/mgar/gar/v2/lib/python/checkpkg_lib.py
===================================================================
--- csw/mgar/gar/v2/lib/python/checkpkg_lib.py	2010-12-29 20:10:15 UTC (rev 12126)
+++ csw/mgar/gar/v2/lib/python/checkpkg_lib.py	2010-12-30 02:47:56 UTC (rev 12127)
@@ -202,7 +202,12 @@
       # Python strings are already implementing the flyweight pattern. What's
       # left is lists and dictionaries.
       i = counter.next()
-      raw_pkg_data = cPickle.loads(stats_obj.data_obj.pickle)
+      if stats_obj.data_obj:
+        raw_pkg_data = cPickle.loads(stats_obj.data_obj.pickle)
+      else:
+        raise CatalogDatabaseError(
+            "%s (%s) is missing the data object."
+            % (stats_obj.basename, stats_obj.md5_sum))
       pkg_data = raw_pkg_data
       pkgs_data.append(pkg_data)
       pbar.update(i)

Modified: csw/mgar/gar/v2/lib/python/package_stats.py
===================================================================
--- csw/mgar/gar/v2/lib/python/package_stats.py	2010-12-29 20:10:15 UTC (rev 12126)
+++ csw/mgar/gar/v2/lib/python/package_stats.py	2010-12-30 02:47:56 UTC (rev 12127)
@@ -39,6 +39,10 @@
   pass
 
 
+class DatabaseError(Error):
+  pass
+
+
 class StdoutSyntaxError(Error):
   pass
 
@@ -386,7 +390,11 @@
     if not self.all_stats:
       md5_sum = self.GetMd5sum()
       res = m.Srv4FileStats.select(m.Srv4FileStats.q.md5_sum==md5_sum)
-      self.all_stats = cPickle.loads(str(res.getOne().data_obj.pickle))
+      srv4 = res.getOne()
+      if not srv4.data_obj:
+        raise DatabaseError("Could not find the data object for %s (%s)"
+                            % (srv4.basename, md5_sum))
+      self.all_stats = cPickle.loads(str(srv4.data_obj.pickle))
     return self.all_stats
 
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.


More information about the devel mailing list