|
@@ -3,6 +3,8 @@
|
|
Periodic Task Scheduler
|
|
Periodic Task Scheduler
|
|
|
|
|
|
"""
|
|
"""
|
|
|
|
+import errno
|
|
|
|
+import os
|
|
import time
|
|
import time
|
|
import shelve
|
|
import shelve
|
|
import sys
|
|
import sys
|
|
@@ -298,9 +300,27 @@ class PersistentScheduler(Scheduler):
|
|
self.schedule_filename = kwargs.get("schedule_filename")
|
|
self.schedule_filename = kwargs.get("schedule_filename")
|
|
Scheduler.__init__(self, *args, **kwargs)
|
|
Scheduler.__init__(self, *args, **kwargs)
|
|
|
|
|
|
|
|
+ def _remove_db(self):
|
|
|
|
+ for suffix in "", ".db", ".dat":
|
|
|
|
+ try:
|
|
|
|
+ os.remove(self.schedule_filename + suffix)
|
|
|
|
+ except OSError, exc:
|
|
|
|
+ if exc.errno != errno.ENOENT:
|
|
|
|
+ raise
|
|
|
|
+ else:
|
|
|
|
+ break
|
|
|
|
+
|
|
def setup_schedule(self):
|
|
def setup_schedule(self):
|
|
- self._store = self.persistence.open(self.schedule_filename,
|
|
|
|
- writeback=True)
|
|
|
|
|
|
+ try:
|
|
|
|
+ self._store = self.persistence.open(self.schedule_filename,
|
|
|
|
+ writeback=True)
|
|
|
|
+ except Exception, exc:
|
|
|
|
+ self.logger.error("Removing corrupted schedule file %r: %r" % (
|
|
|
|
+ self.schedule_filename, exc))
|
|
|
|
+ self._remove_db()
|
|
|
|
+ self._store = self.persistence.open(self.schedule_filename,
|
|
|
|
+ writeback=True)
|
|
|
|
+
|
|
if "__version__" not in self._store:
|
|
if "__version__" not in self._store:
|
|
self._store.clear() # remove schedule at 2.2.2 upgrade.
|
|
self._store.clear() # remove schedule at 2.2.2 upgrade.
|
|
entries = self._store.setdefault("entries", {})
|
|
entries = self._store.setdefault("entries", {})
|