From f37bc6f32324231cc9d8da8c850098cfb85d65c5 Mon Sep 17 00:00:00 2001 From: Dmitry Kichinsky Date: Mon, 5 Feb 2024 15:37:20 +0100 Subject: [PATCH] [maven] IDEA-340498 trace maven server project resolution GitOrigin-RevId: 76d3eab820d8b7a71e1db01ea26d82ff70b2789b --- .../maven/server/Maven3XServerEmbedder.java | 1 + .../server/utils/Maven3XProjectResolver.java | 51 ++++++++++------- .../server/m40/Maven40ServerEmbedderImpl.java | 1 + .../m40/utils/Maven40ProjectResolver.java | 56 +++++++++++-------- 4 files changed, 66 insertions(+), 43 deletions(-) diff --git a/plugins/maven/maven3-server-impl/src/org/jetbrains/idea/maven/server/Maven3XServerEmbedder.java b/plugins/maven/maven3-server-impl/src/org/jetbrains/idea/maven/server/Maven3XServerEmbedder.java index 07f10d07d3a7..ffe1c10b1867 100644 --- a/plugins/maven/maven3-server-impl/src/org/jetbrains/idea/maven/server/Maven3XServerEmbedder.java +++ b/plugins/maven/maven3-server-impl/src/org/jetbrains/idea/maven/server/Maven3XServerEmbedder.java @@ -511,6 +511,7 @@ public abstract class Maven3XServerEmbedder extends Maven3ServerEmbedder { try (LongRunningTask task = newLongRunningTask(longRunningTaskId, pomHashMap.size(), myConsoleWrapper)) { Maven3XProjectResolver projectResolver = new Maven3XProjectResolver( this, + telemetry, updateSnapshots, myImporterSpy, task, diff --git a/plugins/maven/maven3-server-impl/src/org/jetbrains/idea/maven/server/utils/Maven3XProjectResolver.java b/plugins/maven/maven3-server-impl/src/org/jetbrains/idea/maven/server/utils/Maven3XProjectResolver.java index 652e4294ed97..6966eba375dd 100644 --- a/plugins/maven/maven3-server-impl/src/org/jetbrains/idea/maven/server/utils/Maven3XProjectResolver.java +++ b/plugins/maven/maven3-server-impl/src/org/jetbrains/idea/maven/server/utils/Maven3XProjectResolver.java @@ -1,6 +1,7 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.idea.maven.server.utils; +import com.intellij.maven.server.telemetry.MavenServerOpenTelemetry; import com.intellij.util.text.VersionComparatorUtil; import org.apache.maven.AbstractMavenLifecycleParticipant; import org.apache.maven.DefaultMaven; @@ -44,6 +45,7 @@ import static org.jetbrains.idea.maven.server.MavenServerEmbedder.MAVEN_EMBEDDER public class Maven3XProjectResolver { @NotNull private final Maven3XServerEmbedder myEmbedder; + @NotNull private final MavenServerOpenTelemetry myTelemetry; private final boolean myUpdateSnapshots; @NotNull private final Maven3ImporterSpy myImporterSpy; private final LongRunningTask myLongRunningTask; @@ -55,6 +57,7 @@ public class Maven3XProjectResolver { private final boolean myResolveInParallel; public Maven3XProjectResolver(@NotNull Maven3XServerEmbedder embedder, + @NotNull MavenServerOpenTelemetry telemetry, boolean updateSnapshots, @NotNull Maven3ImporterSpy importerSpy, @NotNull LongRunningTask longRunningTask, @@ -65,6 +68,7 @@ public class Maven3XProjectResolver { @NotNull Properties userProperties, boolean resolveInParallel) { myEmbedder = embedder; + myTelemetry = telemetry; myUpdateSnapshots = updateSnapshots; myImporterSpy = importerSpy; myLongRunningTask = longRunningTask; @@ -79,7 +83,7 @@ public class Maven3XProjectResolver { @NotNull public ArrayList resolveProjects() { try { - Collection results = doResolveProject(); + Collection results = myTelemetry.callWithSpan("doResolveProject", () -> doResolveProject()); ArrayList list = new ArrayList<>(); results.stream().map(result -> createExecutionResult(result.getPomFile(), result)).forEachOrdered(list::add); @@ -140,7 +144,8 @@ public class Maven3XProjectResolver { session.setConfigProperty(DependencyManagerUtils.CONFIG_PROP_VERBOSE, true); } - List buildingResults = getProjectBuildingResults(request, files); + List buildingResults = myTelemetry.callWithSpan("getProjectBuildingResults", () -> + getProjectBuildingResults(request, files)); fillSessionCache(mavenSession, repositorySession, buildingResults); @@ -148,16 +153,17 @@ public class Maven3XProjectResolver { boolean runInParallel = myResolveInParallel; Map fileToNewDependencyHash = new ConcurrentHashMap<>(); - ParallelRunnerForServer.execute( - runInParallel, - buildingResults, br -> { - String newDependencyHash = Maven3EffectivePomDumper.dependencyHash(br.getProject()); - if (null != newDependencyHash) { - fileToNewDependencyHash.put(br.getPomFile(), newDependencyHash); + myTelemetry.callWithSpan("dependencyHashes", () -> + myTelemetry.execute( + runInParallel, + buildingResults, br -> { + String newDependencyHash = Maven3EffectivePomDumper.dependencyHash(br.getProject()); + if (null != newDependencyHash) { + fileToNewDependencyHash.put(br.getPomFile(), newDependencyHash); + } + return br; } - return br; - } - ); + )); for (ProjectBuildingResult buildingResult : buildingResults) { MavenProject project = buildingResult.getProject(); @@ -189,16 +195,19 @@ public class Maven3XProjectResolver { myLongRunningTask.updateTotalRequests(buildingResultInfos.size()); Collection execResults = - ParallelRunnerForServer.execute( - runInParallel, - buildingResultInfos, br -> { - if (myLongRunningTask.isCanceled()) return new Maven3ExecutionResult(Collections.emptyList()); - Maven3ExecutionResult result = resolveBuildingResult(repositorySession, addUnresolved, br.buildingResult, br.exceptions); - result.setDependencyHash(br.dependencyHash); - myLongRunningTask.incrementFinishedRequests(); - return result; - } - ); + myTelemetry.callWithSpan("resolveBuildingResults", () -> + myTelemetry.execute( + runInParallel, + buildingResultInfos, br -> { + if (myLongRunningTask.isCanceled()) return new Maven3ExecutionResult(Collections.emptyList()); + Maven3ExecutionResult result = myTelemetry.callWithSpan( + "resolveBuildingResult " + br.buildingResult.getProjectId(), () -> + resolveBuildingResult(repositorySession, addUnresolved, br.buildingResult, br.exceptions)); + result.setDependencyHash(br.dependencyHash); + myLongRunningTask.incrementFinishedRequests(); + return result; + } + )); executionResults.addAll(execResults); } diff --git a/plugins/maven/maven40-server-impl/src/com/intellij/maven/server/m40/Maven40ServerEmbedderImpl.java b/plugins/maven/maven40-server-impl/src/com/intellij/maven/server/m40/Maven40ServerEmbedderImpl.java index f3d9b5c3b19f..f57f2005df13 100644 --- a/plugins/maven/maven40-server-impl/src/com/intellij/maven/server/m40/Maven40ServerEmbedderImpl.java +++ b/plugins/maven/maven40-server-impl/src/com/intellij/maven/server/m40/Maven40ServerEmbedderImpl.java @@ -266,6 +266,7 @@ public class Maven40ServerEmbedderImpl extends MavenServerEmbeddedBase { try (LongRunningTask task = newLongRunningTask(longRunningTaskId, pomHashMap.size(), myConsoleWrapper)) { Maven40ProjectResolver projectResolver = new Maven40ProjectResolver( this, + telemetry, updateSnapshots, myImporterSpy, task, diff --git a/plugins/maven/maven40-server-impl/src/com/intellij/maven/server/m40/utils/Maven40ProjectResolver.java b/plugins/maven/maven40-server-impl/src/com/intellij/maven/server/m40/utils/Maven40ProjectResolver.java index 41d3dbbeca41..fd6056d21000 100644 --- a/plugins/maven/maven40-server-impl/src/com/intellij/maven/server/m40/utils/Maven40ProjectResolver.java +++ b/plugins/maven/maven40-server-impl/src/com/intellij/maven/server/m40/utils/Maven40ProjectResolver.java @@ -2,6 +2,7 @@ package com.intellij.maven.server.m40.utils; import com.intellij.maven.server.m40.Maven40ServerEmbedderImpl; +import com.intellij.maven.server.telemetry.MavenServerOpenTelemetry; import org.apache.maven.AbstractMavenLifecycleParticipant; import org.apache.maven.DefaultMaven; import org.apache.maven.RepositoryUtils; @@ -26,7 +27,10 @@ import org.eclipse.aether.util.graph.visitor.TreeDependencyVisitor; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.idea.maven.model.*; -import org.jetbrains.idea.maven.server.*; +import org.jetbrains.idea.maven.server.LongRunningTask; +import org.jetbrains.idea.maven.server.MavenServerConsoleIndicatorImpl; +import org.jetbrains.idea.maven.server.MavenServerExecutionResult; +import org.jetbrains.idea.maven.server.PomHashMap; import java.io.File; import java.rmi.RemoteException; @@ -36,6 +40,7 @@ import java.util.concurrent.ConcurrentHashMap; public class Maven40ProjectResolver { @NotNull private final Maven40ServerEmbedderImpl myEmbedder; + @NotNull private final MavenServerOpenTelemetry myTelemetry; private final boolean myUpdateSnapshots; @NotNull private final Maven40ImporterSpy myImporterSpy; private final LongRunningTask myLongRunningTask; @@ -48,6 +53,7 @@ public class Maven40ProjectResolver { private final boolean myResolveInParallel; public Maven40ProjectResolver(@NotNull Maven40ServerEmbedderImpl embedder, + @NotNull MavenServerOpenTelemetry telemetry, boolean updateSnapshots, @NotNull Maven40ImporterSpy importerSpy, @NotNull LongRunningTask longRunningTask, @@ -59,6 +65,7 @@ public class Maven40ProjectResolver { @NotNull Properties userProperties, boolean resolveInParallel) { myEmbedder = embedder; + myTelemetry = telemetry; myUpdateSnapshots = updateSnapshots; myImporterSpy = importerSpy; myLongRunningTask = longRunningTask; @@ -74,7 +81,7 @@ public class Maven40ProjectResolver { @NotNull public ArrayList resolveProjects() { try { - Collection results = doResolveProject(); + Collection results = myTelemetry.callWithSpan("doResolveProject", () -> doResolveProject()); ArrayList list = new ArrayList<>(); results.stream().map(result -> createExecutionResult(result)).forEachOrdered(list::add); return list; @@ -133,22 +140,24 @@ public class Maven40ProjectResolver { session.setConfigProperty(DependencyManagerUtils.CONFIG_PROP_VERBOSE, true); } - List buildingResults = getProjectBuildingResults(request, files); + List buildingResults = myTelemetry.callWithSpan("getProjectBuildingResults", () -> + getProjectBuildingResults(request, files)); fillSessionCache(mavenSession, repositorySession, buildingResults); boolean runInParallel = myResolveInParallel; Map fileToNewDependencyHash = new ConcurrentHashMap<>(); - ParallelRunnerForServer.execute( - runInParallel, - buildingResults, br -> { - String newDependencyHash = Maven40EffectivePomDumper.dependencyHash(br.getProject()); - if (null != newDependencyHash) { - fileToNewDependencyHash.put(br.getPomFile(), newDependencyHash); + myTelemetry.callWithSpan("dependencyHashes", () -> + myTelemetry.execute( + runInParallel, + buildingResults, br -> { + String newDependencyHash = Maven40EffectivePomDumper.dependencyHash(br.getProject()); + if (null != newDependencyHash) { + fileToNewDependencyHash.put(br.getPomFile(), newDependencyHash); + } + return br; } - return br; - } - ); + )); for (ProjectBuildingResult buildingResult : buildingResults) { MavenProject project = buildingResult.getProject(); @@ -180,16 +189,19 @@ public class Maven40ProjectResolver { myLongRunningTask.updateTotalRequests(buildingResultInfos.size()); Collection execResults = - ParallelRunnerForServer.execute( - runInParallel, - buildingResultInfos, br -> { - if (myLongRunningTask.isCanceled()) return new Maven40ExecutionResult(Collections.emptyList()); - Maven40ExecutionResult result = resolveBuildingResult(repositorySession, br.buildingResult, br.exceptions); - result.setDependencyHash(br.dependencyHash); - myLongRunningTask.incrementFinishedRequests(); - return result; - } - ); + myTelemetry.callWithSpan("resolveBuildingResults", () -> + myTelemetry.execute( + runInParallel, + buildingResultInfos, br -> { + if (myLongRunningTask.isCanceled()) return new Maven40ExecutionResult(Collections.emptyList()); + Maven40ExecutionResult result = myTelemetry.callWithSpan( + "resolveBuildingResult " + br.buildingResult.getProjectId(), () -> + resolveBuildingResult(repositorySession, br.buildingResult, br.exceptions)); + result.setDependencyHash(br.dependencyHash); + myLongRunningTask.incrementFinishedRequests(); + return result; + } + )); executionResults.addAll(execResults); }