Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Green2013-10-26 01:49:40 +0000
committerGerrit Code Review @ Eclipse.org2014-02-07 21:50:08 +0000
commit4ef9f9a67d1156d86b3c82cbc26b4e3473319512 (patch)
tree75fe486ffd1ce13d38626f78c08464222ead9dc8 /org.eclipse.mylyn.tasks.index.core
parentaeac2f595cdaa29118c9157783c0bdb86e3a9e99 (diff)
downloadorg.eclipse.mylyn.tasks-4ef9f9a67d1156d86b3c82cbc26b4e3473319512.tar.gz
org.eclipse.mylyn.tasks-4ef9f9a67d1156d86b3c82cbc26b4e3473319512.tar.xz
org.eclipse.mylyn.tasks-4ef9f9a67d1156d86b3c82cbc26b4e3473319512.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..119ab2de6 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,16 @@ public class TaskListIndex implements ITaskDataManagerListener, ITaskListChangeL
}
if (writer == null) {
- writer = new IndexWriter(directory, TaskAnalyzer.instance(), false,
- IndexWriter.MaxFieldLength.UNLIMITED);
+ try {
+ writer = createIndexWriter(false);
+ } catch (CorruptIndexException e) {
+ rebuildIndex = true;
+ synchronized (reindexQueue) {
+ reindexQueue.clear();
+ }
+ rebuildIndexCompletely(monitor);
+ return;
+ }
}
monitor.setWorkRemaining(workingQueue.size());
@@ -1202,8 +1211,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(true);
+ } catch (CorruptIndexException e) {
+ if (directory instanceof FSDirectory) {
+ cleanDirectory(((FSDirectory) directory).getFile());
+ writer = createIndexWriter(true);
+ } else {
+ throw e;
+ }
+ }
try {
for (ITask task : taskListState.indexableTasks) {
@@ -1230,6 +1248,25 @@ 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(boolean create) throws CorruptIndexException, LockObtainFailedException,
+ IOException {
+ return new IndexWriter(directory, TaskAnalyzer.instance(), create, IndexWriter.MaxFieldLength.UNLIMITED);
+ }
+
/**
* @param writer
* @param task

Back to the top