diff options
author | Tomeu Vizoso <tomeu@tomeuvizoso.net> | 2007-09-12 17:40:55 (GMT) |
---|---|---|
committer | Tomeu Vizoso <tomeu@tomeuvizoso.net> | 2007-09-12 17:40:55 (GMT) |
commit | 7655f4d99aca6c07493bfbd0c79ee5355c631787 (patch) | |
tree | 380a77d53d16eb82d74a48762d742ef529c1b500 | |
parent | ffb15bf4a59f958895052350a8f81e6f1cc2c8b3 (diff) |
#3180: Recreate the index on mount failure.
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | src/olpc/datastore/backingstore.py | 22 |
2 files changed, 22 insertions, 1 deletions
@@ -1,3 +1,4 @@ +* #3180: Recreate the index on mount failure. (tomeu) * #3374: Don't create another entry during async update. (tomeu) * #3058: Disable content indexing for Trial-3. (tomeu) diff --git a/src/olpc/datastore/backingstore.py b/src/olpc/datastore/backingstore.py index d08750b..ffb1911 100644 --- a/src/olpc/datastore/backingstore.py +++ b/src/olpc/datastore/backingstore.py @@ -304,7 +304,27 @@ class FileBackingStore(BackingStore): # This will ensure the fulltext and so on are all assigned im.bind_to(self) - im.connect(index_name) + + try: + im.connect(index_name) + except Exception, e: + # TODO: Try to recover in a smarter way than deleting the base + # dir and reinitializing the index. + + logging.error('Error while trying to load mount point %s: %s. ' \ + 'Will try to renitialize and load again.' % (self.base, e)) + + # Delete the base dir and its contents + for root, dirs, files in os.walk(self.base, topdown=False): + for name in files: + os.remove(os.path.join(root, name)) + for name in dirs: + os.rmdir(os.path.join(root, name)) + os.rmdir(root) + + self.initialize() + self.load() + return self.indexmanager = im |