mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 15:19:59 +07:00
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:
committed by
intellij-monorepo-bot
parent
5b362038a8
commit
c545f5fe4e
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -891,7 +891,7 @@ public final class FileBasedIndexImpl extends FileBasedIndexEx {
|
||||
}
|
||||
catch (StorageException e) {
|
||||
LOG.error(e);
|
||||
requestRebuild(indexId);
|
||||
requestRebuild(indexId, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user