Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Green2013-10-26 01:49:40 +0000
committerDavid Green2013-10-26 01:49:40 +0000
commitb7836ef3608f5e511420b0cb0e0958cc29cc6a6b (patch)
tree46e40bd07ec07ef148d5b2852763049df2f0fa12 /org.eclipse.mylyn.tasks.index.core
parent9c7ab4a6357cdacf9491a74f0d47772e2be63778 (diff)
downloadorg.eclipse.mylyn.tasks-b7836ef3608f5e511420b0cb0e0958cc29cc6a6b.tar.gz
org.eclipse.mylyn.tasks-b7836ef3608f5e511420b0cb0e0958cc29cc6a6b.tar.xz
org.eclipse.mylyn.tasks-b7836ef3608f5e511420b0cb0e0958cc29cc6a6b.zip
415140: CorruptIndexException in tasklist index
Change-Id: Ia0c6ac54f23f90e32d157f5deba34b3d322aa3c4 Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=415140
Diffstat (limited to 'org.eclipse.mylyn.tasks.index.core')
-rw-r--r--org.eclipse.mylyn.tasks.index.core/src/org/eclipse/mylyn/internal/tasks/index/core/TaskListIndex.java47
1 files changed, 42 insertions, 5 deletions
diff --git a/org.eclipse.mylyn.tasks.index.core/src/org/eclipse/mylyn/internal/tasks/index/core/TaskListIndex.java b/org.eclipse.mylyn.tasks.index.core/src/org/eclipse/mylyn/internal/tasks/index/core/TaskListIndex.java
index 153c5df9a..861ecc614 100644
--- a/org.eclipse.mylyn.tasks.index.core/src/org/eclipse/mylyn/internal/tasks/index/core/TaskListIndex.java
+++ b/org.eclipse.mylyn.tasks.index.core/src/org/eclipse/mylyn/internal/tasks/index/core/TaskListIndex.java
@@ -54,6 +54,7 @@ import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
+import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.store.NIOFSDirectory;
import org.apache.lucene.util.Version;
@@ -1118,7 +1119,7 @@ public class TaskListIndex implements ITaskDataManagerListener, ITaskListChangeL
}
private void indexQueuedTasks(SubMonitor monitor) throws CorruptIndexException, LockObtainFailedException,
- IOException {
+ IOException, CoreException {
synchronized (reindexQueue) {
if (reindexQueue.isEmpty()) {
@@ -1148,8 +1149,17 @@ public class TaskListIndex implements ITaskDataManagerListener, ITaskListChangeL
}
if (writer == null) {
- writer = new IndexWriter(directory, TaskAnalyzer.instance(), false,
- IndexWriter.MaxFieldLength.UNLIMITED);
+ try {
+ writer = new IndexWriter(directory, TaskAnalyzer.instance(), false,
+ IndexWriter.MaxFieldLength.UNLIMITED);
+ } catch (CorruptIndexException e) {
+ rebuildIndex = true;
+ synchronized (reindexQueue) {
+ reindexQueue.clear();
+ }
+ rebuildIndexCompletely(monitor);
+ return;
+ }
}
monitor.setWorkRemaining(workingQueue.size());
@@ -1202,8 +1212,17 @@ public class TaskListIndex implements ITaskDataManagerListener, ITaskListChangeL
monitor.beginTask(Messages.TaskListIndex_task_rebuilding_index, taskListState.indexableTasks.size());
try {
- final IndexWriter writer = new IndexWriter(directory, TaskAnalyzer.instance(), true,
- IndexWriter.MaxFieldLength.UNLIMITED);
+ IndexWriter writer;
+ try {
+ writer = createIndexWriter();
+ } catch (CorruptIndexException e) {
+ if (directory instanceof FSDirectory) {
+ cleanDirectory(((FSDirectory) directory).getDirectory());
+ writer = createIndexWriter();
+ } else {
+ throw e;
+ }
+ }
try {
for (ITask task : taskListState.indexableTasks) {
@@ -1230,6 +1249,24 @@ public class TaskListIndex implements ITaskDataManagerListener, ITaskListChangeL
return multiStatus;
}
+ private void cleanDirectory(File file) throws IOException {
+ if (file.exists()) {
+ File[] children = file.listFiles();
+ if (children != null) {
+ for (File child : children) {
+ if (child.isDirectory()) {
+ cleanDirectory(child);
+ }
+ child.delete();
+ }
+ }
+ }
+ }
+
+ protected IndexWriter createIndexWriter() throws CorruptIndexException, LockObtainFailedException, IOException {
+ return new IndexWriter(directory, TaskAnalyzer.instance(), true, IndexWriter.MaxFieldLength.UNLIMITED);
+ }
+
/**
* @param writer
* @param task

Back to the top