Skip to content

Commit 4cdcd84

Browse files
committed
Implement traces (wip)
1 parent 4a22ca4 commit 4cdcd84

File tree

13 files changed

+105
-15
lines changed

13 files changed

+105
-15
lines changed

api/maven-api-core/src/main/java/org/apache/maven/api/Session.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.apache.maven.api.model.Repository;
3333
import org.apache.maven.api.services.ArtifactCoordinatesFactory;
3434
import org.apache.maven.api.services.DependencyCoordinatesFactory;
35+
import org.apache.maven.api.services.RequestTrace;
3536
import org.apache.maven.api.services.VersionResolverException;
3637
import org.apache.maven.api.settings.Settings;
3738

@@ -843,4 +844,8 @@ Optional<Version> resolveHighestVersion(@Nonnull ArtifactCoordinates artifact, L
843844
*/
844845
@Nonnull
845846
PathScope requirePathScope(@Nonnull String id);
847+
848+
void setCurrentTrace(@Nonnull RequestTrace trace);
849+
850+
RequestTrace getCurrentTrace();
846851
}

api/maven-api-core/src/main/java/org/apache/maven/api/services/BaseRequest.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,12 @@ abstract class BaseRequest<S extends ProtoSession> implements Request<S> {
3636
private final RequestTrace trace;
3737

3838
protected BaseRequest(@Nonnull S session) {
39+
this(session, null);
40+
}
41+
42+
protected BaseRequest(@Nonnull S session, RequestTrace trace) {
3943
this.session = requireNonNull(session, "session cannot be null");
40-
this.trace = null;
44+
this.trace = trace;
4145
}
4246

4347
@Nonnull

api/maven-api-core/src/main/java/org/apache/maven/api/services/ModelBuilderRequest.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ static ModelBuilderRequestBuilder builder(ModelBuilderRequest request) {
174174
@NotThreadSafe
175175
class ModelBuilderRequestBuilder {
176176
Session session;
177+
RequestTrace trace;
177178
RequestType requestType;
178179
boolean locationTracking;
179180
boolean recursive;
@@ -191,6 +192,7 @@ class ModelBuilderRequestBuilder {
191192

192193
ModelBuilderRequestBuilder(ModelBuilderRequest request) {
193194
this.session = request.getSession();
195+
this.trace = request.getTrace();
194196
this.requestType = request.getRequestType();
195197
this.locationTracking = request.isLocationTracking();
196198
this.recursive = request.isRecursive();
@@ -210,6 +212,11 @@ public ModelBuilderRequestBuilder session(Session session) {
210212
return this;
211213
}
212214

215+
public ModelBuilderRequestBuilder trace(RequestTrace trace) {
216+
this.trace = trace;
217+
return this;
218+
}
219+
213220
public ModelBuilderRequestBuilder requestType(RequestType requestType) {
214221
this.requestType = requestType;
215222
return this;
@@ -273,6 +280,7 @@ public ModelBuilderRequestBuilder lifecycleBindingsInjector(ModelTransformer lif
273280
public ModelBuilderRequest build() {
274281
return new DefaultModelBuilderRequest(
275282
session,
283+
trace,
276284
requestType,
277285
locationTracking,
278286
recursive,
@@ -304,6 +312,7 @@ private static class DefaultModelBuilderRequest extends BaseRequest<Session> imp
304312
@SuppressWarnings("checkstyle:ParameterNumber")
305313
DefaultModelBuilderRequest(
306314
@Nonnull Session session,
315+
@Nullable RequestTrace trace,
307316
@Nonnull RequestType requestType,
308317
boolean locationTracking,
309318
boolean recursive,
@@ -316,7 +325,7 @@ private static class DefaultModelBuilderRequest extends BaseRequest<Session> imp
316325
RepositoryMerging repositoryMerging,
317326
List<RemoteRepository> repositories,
318327
ModelTransformer lifecycleBindingsInjector) {
319-
super(session);
328+
super(session, trace);
320329
this.requestType = requireNonNull(requestType, "requestType cannot be null");
321330
this.locationTracking = locationTracking;
322331
this.recursive = recursive;

api/maven-api-core/src/main/java/org/apache/maven/api/services/RequestTrace.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,13 @@
5050
* object being processed or any application-specific state information. May be null if no
5151
* additional data is needed.
5252
*/
53-
public record RequestTrace(@Nullable String context, @Nullable RequestTrace parent, @Nullable Object data) {}
53+
public record RequestTrace(@Nullable String context, @Nullable RequestTrace parent, @Nullable Object data) {
54+
55+
public static final String CONTEXT_PLUGIN = "plugin";
56+
public static final String CONTEXT_PROJECT = "project";
57+
public static final String CONTEXT_BOOTSTRAP = "bootstrap";
58+
59+
public RequestTrace(RequestTrace parent, Object data) {
60+
this(parent != null ? parent.context() : null, parent, data);
61+
}
62+
}

impl/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultProjectBuilder.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import org.apache.maven.api.services.ProjectBuilderResult;
4242
import org.apache.maven.api.services.Source;
4343
import org.apache.maven.artifact.repository.ArtifactRepository;
44+
import org.apache.maven.internal.impl.resolver.RequestTraceHelper;
4445
import org.apache.maven.model.building.ModelProblem;
4546
import org.apache.maven.model.building.ModelSource2;
4647
import org.apache.maven.project.DefaultProjectBuildingRequest;
@@ -65,6 +66,7 @@ public DefaultProjectBuilder(org.apache.maven.project.ProjectBuilder builder) {
6566
public ProjectBuilderResult build(ProjectBuilderRequest request)
6667
throws ProjectBuilderException, IllegalArgumentException {
6768
InternalMavenSession session = InternalMavenSession.from(request.getSession());
69+
RequestTraceHelper.enter(request.getSession(), request);
6870
try {
6971
List<ArtifactRepository> repositories = session.toArtifactRepositories(
7072
request.getRepositories() != null ? request.getRepositories() : session.getRemoteRepositories());

impl/maven-impl/src/main/java/org/apache/maven/internal/impl/AbstractSession.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@
8484
import org.apache.maven.api.services.PathScopeRegistry;
8585
import org.apache.maven.api.services.ProjectScopeRegistry;
8686
import org.apache.maven.api.services.RepositoryFactory;
87+
import org.apache.maven.api.services.RequestTrace;
8788
import org.apache.maven.api.services.TypeRegistry;
8889
import org.apache.maven.api.services.VersionParser;
8990
import org.apache.maven.api.services.VersionRangeResolver;
@@ -900,4 +901,20 @@ public DependencyScope requireDependencyScope(String id) {
900901
public PathScope requirePathScope(String id) {
901902
return getService(PathScopeRegistry.class).require(id);
902903
}
904+
905+
@Override
906+
public void setCurrentTrace(RequestTrace trace) {
907+
getTraceHolder().set(trace);
908+
}
909+
910+
@Override
911+
public RequestTrace getCurrentTrace() {
912+
return getTraceHolder().get();
913+
}
914+
915+
@SuppressWarnings("unchecked")
916+
private ThreadLocal<RequestTrace> getTraceHolder() {
917+
org.eclipse.aether.SessionData data = session.getData();
918+
return (ThreadLocal<RequestTrace>) data.computeIfAbsent(RequestTrace.class, ThreadLocal::new);
919+
}
903920
}

impl/maven-impl/src/main/java/org/apache/maven/internal/impl/DefaultArtifactResolver.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.apache.maven.api.services.ArtifactResolverException;
3636
import org.apache.maven.api.services.ArtifactResolverRequest;
3737
import org.apache.maven.api.services.ArtifactResolverResult;
38+
import org.apache.maven.internal.impl.resolver.RequestTraceHelper;
3839
import org.eclipse.aether.repository.RemoteRepository;
3940
import org.eclipse.aether.resolution.ArtifactRequest;
4041
import org.eclipse.aether.resolution.ArtifactResolutionException;
@@ -52,6 +53,7 @@ public ArtifactResolverResult resolve(ArtifactResolverRequest request)
5253
nonNull(request, "request");
5354
InternalSession session = InternalSession.from(request.getSession());
5455
try {
56+
RequestTraceHelper.ResolverTrace trace = RequestTraceHelper.enter(session, request);
5557
Map<DownloadedArtifact, Path> paths = new HashMap<>();
5658
ArtifactManager artifactManager = session.getService(ArtifactManager.class);
5759
List<RemoteRepository> repositories = session.toRepositories(
@@ -68,7 +70,8 @@ public ArtifactResolverResult resolve(ArtifactResolverRequest request)
6870
DownloadedArtifact resolved = session.getArtifact(DownloadedArtifact.class, aetherArtifact);
6971
paths.put(resolved, path);
7072
} else {
71-
requests.add(new ArtifactRequest(aetherArtifact, repositories, null));
73+
requests.add(
74+
new ArtifactRequest(aetherArtifact, repositories, trace.context()).setTrace(trace.trace()));
7275
}
7376
}
7477
if (!requests.isEmpty()) {

impl/maven-impl/src/main/java/org/apache/maven/internal/impl/DefaultDependencyResolver.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import org.apache.maven.api.services.DependencyResolverRequest;
5151
import org.apache.maven.api.services.DependencyResolverResult;
5252
import org.apache.maven.api.services.ProjectManager;
53+
import org.apache.maven.internal.impl.resolver.RequestTraceHelper;
5354
import org.eclipse.aether.DefaultRepositorySystemSession;
5455
import org.eclipse.aether.RepositorySystemSession;
5556
import org.eclipse.aether.collection.CollectRequest;
@@ -75,6 +76,7 @@ public DependencyResolverResult collect(@Nonnull DependencyResolverRequest reque
7576
throws DependencyResolverException, IllegalArgumentException {
7677
nonNull(request, "request");
7778
InternalSession session = InternalSession.from(request.getSession());
79+
RequestTraceHelper.ResolverTrace trace = RequestTraceHelper.enter(session, request);
7880

7981
Artifact rootArtifact;
8082
DependencyCoordinates root;
@@ -110,7 +112,9 @@ public DependencyResolverResult collect(@Nonnull DependencyResolverRequest reque
110112
.setRoot(root != null ? session.toDependency(root, false) : null)
111113
.setDependencies(session.toDependencies(dependencies, false))
112114
.setManagedDependencies(session.toDependencies(managedDependencies, true))
113-
.setRepositories(session.toRepositories(remoteRepositories));
115+
.setRepositories(session.toRepositories(remoteRepositories))
116+
.setRequestContext(trace.context())
117+
.setTrace(trace.trace());
114118
collectRequest.setResolutionScope(resolutionScope);
115119

116120
RepositorySystemSession systemSession = session.getSession();
@@ -165,6 +169,7 @@ public DependencyResolverResult resolve(DependencyResolverRequest request)
165169
throws DependencyResolverException, DependencyResolverException, ArtifactResolverException {
166170
InternalSession session =
167171
InternalSession.from(nonNull(request, "request").getSession());
172+
RequestTraceHelper.enter(session, request);
168173
DependencyResolverResult result;
169174
DependencyResolverResult collectorResult = collect(request);
170175
List<RemoteRepository> repositories = request.getRepositories() != null

impl/maven-impl/src/main/java/org/apache/maven/internal/impl/DefaultVersionRangeResolver.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.apache.maven.api.services.VersionRangeResolverException;
3333
import org.apache.maven.api.services.VersionRangeResolverRequest;
3434
import org.apache.maven.api.services.VersionRangeResolverResult;
35+
import org.apache.maven.internal.impl.resolver.RequestTraceHelper;
3536
import org.eclipse.aether.RepositorySystem;
3637
import org.eclipse.aether.repository.ArtifactRepository;
3738
import org.eclipse.aether.resolution.VersionRangeRequest;
@@ -59,15 +60,17 @@ public VersionRangeResolverResult resolve(VersionRangeResolverRequest request)
5960
InternalSession session = InternalSession.from(request.getSession());
6061

6162
try {
63+
RequestTraceHelper.ResolverTrace trace = RequestTraceHelper.enter(session, request);
6264
VersionRangeResult res = repositorySystem.resolveVersionRange(
6365
session.getSession(),
6466
new VersionRangeRequest(
65-
session.toArtifact(request.getArtifactCoordinates()),
66-
session.toRepositories(
67-
request.getRepositories() != null
68-
? request.getRepositories()
69-
: session.getRemoteRepositories()),
70-
null));
67+
session.toArtifact(request.getArtifactCoordinates()),
68+
session.toRepositories(
69+
request.getRepositories() != null
70+
? request.getRepositories()
71+
: session.getRemoteRepositories()),
72+
trace.context())
73+
.setTrace(trace.trace()));
7174

7275
Map<String, ArtifactRepository> repos = res.getVersions().stream()
7376
.filter(v -> res.getRepository(v) != null)

impl/maven-impl/src/main/java/org/apache/maven/internal/impl/DefaultVersionResolver.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.apache.maven.api.services.VersionResolverException;
3131
import org.apache.maven.api.services.VersionResolverRequest;
3232
import org.apache.maven.api.services.VersionResolverResult;
33+
import org.apache.maven.internal.impl.resolver.RequestTraceHelper;
3334
import org.eclipse.aether.RepositorySystem;
3435
import org.eclipse.aether.resolution.VersionRequest;
3536
import org.eclipse.aether.resolution.VersionResolutionException;
@@ -54,15 +55,16 @@ public VersionResolverResult resolve(VersionResolverRequest request) throws Vers
5455
InternalSession session = InternalSession.from(request.getSession());
5556

5657
try {
57-
VersionResult res = repositorySystem.resolveVersion(
58-
session.getSession(),
59-
new VersionRequest(
58+
RequestTraceHelper.ResolverTrace trace = RequestTraceHelper.enter(session, request);
59+
VersionRequest req = new VersionRequest(
6060
session.toArtifact(request.getArtifactCoordinates()),
6161
session.toRepositories(
6262
request.getRepositories() != null
6363
? request.getRepositories()
6464
: session.getRemoteRepositories()),
65-
null));
65+
trace.context())
66+
.setTrace(trace.trace());
67+
VersionResult res = repositorySystem.resolveVersion(session.getSession(), req);
6668

6769
return new VersionResolverResult() {
6870
@Override

0 commit comments

Comments
 (0)