Michael Osipov created MNG-5729:
-----------------------------------
Summary: Measure (build time) durations with System.nanoTime only
Key: MNG-5729
URL: https://jira.codehaus.org/browse/MNG-5729
Project: Maven
Issue Type: Improvement
Components: Embedding, General, Logging, Performance, Reactor and
workspace
Affects Versions: 3.2.3
Reporter: Michael Osipov
Currently, we solely rely on {{System.currentTimeMillis}} to track start/end
times as well as durations. This is error prone and not guaranteed to deliver a
monotic value with positive durations.
We should consider employing {{System.nanoTime}} throughout the core where the
above mentioned conditions are met. E.g., in some of:
{noformat}
maven-aether-provider/src/test/java/org/apache/maven/repository/internal/util/ConsoleTransferListener.java:
long duration = System.currentTimeMillis() - resource.getTransferStartTime();
maven-compat/src/main/java/org/apache/maven/repository/legacy/MavenArtifact.java:
this.transferStartTime = System.currentTimeMillis();
maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/BuilderCommon.java:
long buildEndTime = System.currentTimeMillis();
maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleModuleBuilder.java:
long buildStartTime = System.currentTimeMillis();
maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleModuleBuilder.java:
long buildEndTime = System.currentTimeMillis();
maven-embedder/src/main/java/org/apache/maven/cli/event/ExecutionEventLogger.java:
long finish = System.currentTimeMillis();
maven-embedder/src/main/java/org/apache/maven/cli/transfer/AbstractMavenTransferListener.java:
long duration = System.currentTimeMillis() - resource.getTransferStartTime();
maven-embedder/src/main/java/org/apache/maven/cli/transfer/Slf4jMavenTransferListener.java:
long duration = System.currentTimeMillis() - resource.getTransferStartTime();
DefaultMaven.java: request.setStartTime( new Date() );
DefaultMavenExecutionRequest.java: public Date getStartTime()
DefaultMavenExecutionRequest.java: projectBuildingRequest.setBuildStartTime(
getStartTime() );
MavenExecutionRequest.java: Date getStartTime();
MavenSession.java: public Date getStartTime()
MavenSession.java: return request.getStartTime();
ExecutionEventLogger.java: long time = finish -
session.getRequest().getStartTime().getTime();
{noformat}
and all other code spots where {{Date}} or {{long}} is used.
--
This message was sent by Atlassian JIRA
(v6.1.6#6162)