From 101e4e41f33a0ff4a8f34bce29bc033b5e9f86d0 Mon Sep 17 00:00:00 2001 From: "Maxim.Mossienko" Date: Wed, 27 Mar 2013 16:22:21 +0100 Subject: [PATCH] - better handling of index corruption: do clearIndex at checkRebuild request anyway. Previously we did it in invokeLater and that fails if corruption was detected at shutdown, e.g. IDEA-103038 - avoid multiple logging of corrupted index --- .../util/indexing/FileBasedIndexImpl.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java index b2ded8afaaea..0f4370789c3f 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java @@ -1247,7 +1247,6 @@ public class FileBasedIndexImpl extends FileBasedIndex { @Override public void scheduleRebuild(@NotNull final ID indexId, @NotNull final Throwable e) { - LOG.info(e); requestRebuild(indexId, new Throwable(e)); try { checkRebuild(indexId, false); @@ -1264,19 +1263,20 @@ public class FileBasedIndexImpl extends FileBasedIndex { if (status.compareAndSet(REQUIRES_REBUILD, REBUILD_IN_PROGRESS)) { cleanupProcessedFlag(); + try { + clearIndex(indexId); + } catch (StorageException ex) { + requestRebuild(indexId, new Throwable(ex)); + } + final Runnable rebuildRunnable = new Runnable() { @Override public void run() { try { - clearIndex(indexId); if (!cleanupOnly) { scheduleIndexRebuild(false); } } - catch (StorageException e) { - requestRebuild(indexId); - LOG.info(e); - } finally { status.compareAndSet(REBUILD_IN_PROGRESS, OK); } @@ -1581,8 +1581,8 @@ public class FileBasedIndexImpl extends FileBasedIndex { @Override public void requestRebuild(ID indexId, Throwable throwable) { cleanupProcessedFlag(); - LOG.info("Rebuild requested for index " + indexId, throwable); - ourRebuildStatus.get(indexId).compareAndSet(OK, REQUIRES_REBUILD); + boolean requiresRebuildWasSet = ourRebuildStatus.get(indexId).compareAndSet(OK, REQUIRES_REBUILD); + if (requiresRebuildWasSet) LOG.info("Rebuild requested for index " + indexId, throwable); } private UpdatableIndex getIndex(ID indexId) {