Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu@tomeuvizoso.net>2007-09-12 17:40:55 (GMT)
committer Tomeu Vizoso <tomeu@tomeuvizoso.net>2007-09-12 17:40:55 (GMT)
commit7655f4d99aca6c07493bfbd0c79ee5355c631787 (patch)
tree380a77d53d16eb82d74a48762d742ef529c1b500
parentffb15bf4a59f958895052350a8f81e6f1cc2c8b3 (diff)
#3180: Recreate the index on mount failure.
-rw-r--r--NEWS1
-rw-r--r--src/olpc/datastore/backingstore.py22
2 files changed, 22 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index 48becf8..4512d30 100644
--- a/NEWS
+++ b/NEWS
@@ -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