provide index rebuild causes where it's possible to distinguish events caused by index related errors and explicit rebuilds caused by plugin functionality IDEA-331941

GitOrigin-RevId: 3c16c110f75aad687067bdc94f1453e456980810
This commit is contained in:
Dmitry Batkovich
2023-10-30 13:30:17 +04:00
committed by intellij-monorepo-bot
parent 5b362038a8
commit c545f5fe4e
5 changed files with 34 additions and 7 deletions

View File

@@ -2,8 +2,10 @@
package com.intellij.util.indexing;
import com.intellij.diagnostic.PluginException;
import com.intellij.ide.plugins.PluginUtil;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ReadAction;
import com.intellij.openapi.extensions.PluginId;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.project.Project;
@@ -95,7 +97,7 @@ public abstract class FileBasedIndex {
public abstract VirtualFile findFileById(Project project, int id);
public void requestRebuild(@NotNull ID<?, ?> indexId) {
requestRebuild(indexId, new RebuildRequestedByUserAction());
requestRebuild(indexId, new RebuildRequestedByUserAction(PluginUtil.getInstance().findPluginId(new Throwable())));
}
@NotNull
@@ -387,6 +389,14 @@ public abstract class FileBasedIndex {
public void loadIndexes() {
}
private static class RebuildRequestedByUserAction extends Throwable {
@ApiStatus.Internal
public static class RebuildRequestedByUserAction extends Throwable {
private final @Nullable PluginId myRequestorPluginId;
private RebuildRequestedByUserAction(@Nullable PluginId requestorPluginId) { myRequestorPluginId = requestorPluginId; }
public @Nullable PluginId getRequestorPluginId() {
return myRequestorPluginId;
}
}
}

View File

@@ -1,18 +1,21 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.util.indexing.diagnostic
import com.intellij.internal.statistic.collectors.fus.PluginIdRuleValidator
import com.intellij.internal.statistic.eventLog.EventLogGroup
import com.intellij.internal.statistic.eventLog.events.EventFields
import com.intellij.internal.statistic.service.fus.collectors.CounterUsagesCollector
import com.intellij.internal.statistic.utils.StatisticsUtil
import com.intellij.openapi.extensions.PluginId
import com.intellij.openapi.project.Project
import com.intellij.util.indexing.FileBasedIndex.RebuildRequestedByUserAction
import com.intellij.util.indexing.ID
import org.jetbrains.annotations.ApiStatus.Internal
import java.util.*
@Internal
object IndexStatisticGroup {
val GROUP = EventLogGroup("indexing.statistics", 10)
val GROUP = EventLogGroup("indexing.statistics", 11)
private val stubIndexInconsistencyRegistered = GROUP.registerEvent("stub.index.inconsistency")
@@ -25,6 +28,10 @@ object IndexStatisticGroup {
EventFields.StringValidatedByCustomRule("index_id", IndexIdRuleValidator::class.java)
private val rebuildCauseField =
EventFields.Class("rebuild_cause")
private val requestorPluginId = EventFields.StringValidatedByCustomRule(
"requestor_plugin_id",
PluginIdRuleValidator::class.java,
)
private val insideIndexInitialization =
EventFields.Boolean("inside_index_initialization")
@@ -32,6 +39,7 @@ object IndexStatisticGroup {
"index_rebuild",
indexIdField,
rebuildCauseField,
requestorPluginId,
insideIndexInitialization,
)
@@ -39,8 +47,17 @@ object IndexStatisticGroup {
fun reportIndexRebuild(indexId: ID<*, *>,
cause: Throwable,
isInsideIndexInitialization: Boolean) {
val realCause = (if (cause.javaClass == Throwable::class.java) cause.cause else cause) ?: cause
val causeClass = realCause.javaClass
var requestorPluginID: PluginId? = null
if (realCause is RebuildRequestedByUserAction) {
requestorPluginID = realCause.requestorPluginId
}
indexRebuildEvent.log(indexIdField with indexId.name,
rebuildCauseField with cause.javaClass,
rebuildCauseField with causeClass,
requestorPluginId with requestorPluginID?.idString,
insideIndexInitialization with isInsideIndexInitialization)
}

View File

@@ -171,7 +171,7 @@ final class FileBasedIndexDataInitialization extends IndexDataInitializer<IndexC
RebuildStatus.clearIndexIfNecessary(indexId, () -> myFileBasedIndex.clearIndex(indexId));
}
catch (StorageException e) {
myFileBasedIndex.requestRebuild(indexId);
myFileBasedIndex.requestRebuild(indexId, e);
FileBasedIndexImpl.LOG.error(e);
}
}

View File

@@ -891,7 +891,7 @@ public final class FileBasedIndexImpl extends FileBasedIndexEx {
}
catch (StorageException e) {
LOG.error(e);
requestRebuild(indexId);
requestRebuild(indexId, e);
}
}
}

View File

@@ -326,7 +326,7 @@ final class UnindexedFilesFinder {
final Throwable cause = e.getCause();
if (cause instanceof IOException || cause instanceof StorageException) {
LOG.info(e);
myFileBasedIndex.requestRebuild(indexId);
myFileBasedIndex.requestRebuild(indexId, cause);
}
else {
throw e;