[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