def main(self): librariangc.log = self.logger if self.options.loglevel <= logging.DEBUG: librariangc.debug = True # XXX wgrant 2011-09-18 bug=853066: Using Storm's raw connection # here is wrong. We should either create our own or use # Store.execute or cursor() and the transaction module. conn = IStore(LibraryFileAlias)._connection._raw_connection # Refuse to run if we have significant clock skew between the # librarian and the database. librariangc.confirm_no_clock_skew(conn) # Note that each of these next steps will issue commit commands # as appropriate to make this script transaction friendly if not self.options.skip_expiry: librariangc.expire_aliases(conn) if not self.options.skip_content: # First sweep. librariangc.delete_unreferenced_content(conn) if not self.options.skip_blobs: librariangc.delete_expired_blobs(conn) if not self.options.skip_duplicates: librariangc.merge_duplicates(conn) if not self.options.skip_aliases: librariangc.delete_unreferenced_aliases(conn) if not self.options.skip_content: # Second sweep. librariangc.delete_unreferenced_content(conn) if not self.options.skip_files: librariangc.delete_unwanted_files(conn)
def test_deleteWellExpiredAliases(self): # LibraryFileAlias records that are expired are unlinked from their # content. # Flag one of our LibraryFileAliases with an expiry date in the past self.ztm.begin() f1 = LibraryFileAlias.get(self.f1_id) f1.expires = self.ancient_past del f1 self.ztm.commit() # Unlink expired LibraryFileAliases. librariangc.expire_aliases(self.con) self.ztm.begin() # Make sure the well expired f1 is still there, but has no content. f1 = LibraryFileAlias.get(self.f1_id) self.assert_(f1.content is None) # f2 should still have content, as it isn't flagged for expiry. f2 = LibraryFileAlias.get(self.f2_id) self.assert_(f2.content is not None)
def test_ignoreRecentlyExpiredAliases(self): # LibraryFileAlias records that have expired recently are not # garbage collected. # Flag one of our LibraryFileAliases with an expiry date in the # recent past. self.ztm.begin() f1 = LibraryFileAlias.get(self.f1_id) f1.expires = self.recent_past # Within stay of execution. del f1 self.ztm.commit() # Unlink expired LibraryFileAliases. librariangc.expire_aliases(self.con) self.ztm.begin() # Make sure f1 is still there and has content. This ensures that # our stay of execution is still working. f1 = LibraryFileAlias.get(self.f1_id) self.assert_(f1.content is not None) # f2 should still have content, as it isn't flagged for expiry. f2 = LibraryFileAlias.get(self.f2_id) self.assert_(f2.content is not None)