[maven] IDEA-340498 trace maven server project resolution

GitOrigin-RevId: 76d3eab820d8b7a71e1db01ea26d82ff70b2789b
This commit is contained in:
Dmitry Kichinsky
2024-02-05 15:37:20 +01:00
committed by intellij-monorepo-bot
parent 01bae0a09f
commit f37bc6f323
4 changed files with 66 additions and 43 deletions

View File

@@ -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,

View File

@@ -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<MavenServerExecutionResult> resolveProjects() {
try {
Collection<Maven3ExecutionResult> results = doResolveProject();
Collection<Maven3ExecutionResult> results = myTelemetry.callWithSpan("doResolveProject", () -> doResolveProject());
ArrayList<MavenServerExecutionResult> 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<ProjectBuildingResult> buildingResults = getProjectBuildingResults(request, files);
List<ProjectBuildingResult> buildingResults = myTelemetry.callWithSpan("getProjectBuildingResults", () ->
getProjectBuildingResults(request, files));
fillSessionCache(mavenSession, repositorySession, buildingResults);
@@ -148,16 +153,17 @@ public class Maven3XProjectResolver {
boolean runInParallel = myResolveInParallel;
Map<File, String> 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<Maven3ExecutionResult> 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);
}

View File

@@ -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,

View File

@@ -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<MavenServerExecutionResult> resolveProjects() {
try {
Collection<Maven40ExecutionResult> results = doResolveProject();
Collection<Maven40ExecutionResult> results = myTelemetry.callWithSpan("doResolveProject", () -> doResolveProject());
ArrayList<MavenServerExecutionResult> 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<ProjectBuildingResult> buildingResults = getProjectBuildingResults(request, files);
List<ProjectBuildingResult> buildingResults = myTelemetry.callWithSpan("getProjectBuildingResults", () ->
getProjectBuildingResults(request, files));
fillSessionCache(mavenSession, repositorySession, buildingResults);
boolean runInParallel = myResolveInParallel;
Map<File, String> 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<Maven40ExecutionResult> 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);
}