Skip to content

[MNG-5729] Measure (build time) durations with System.nanoTime only #6563

@jira-importer

Description

@jira-importer

Michael Osipov opened MNG-5729 and commented

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:

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(); 

and all other code spots where Date or long is used.


Affects: 3.2.3

Issue Links:

  • MRESOLVER-14 Statistics should be calculated using System.nanoTime() instead of System.currentTimeMillis()
    ("is blocked by")
  • MRESOLVER-635 Use Instant instead of untyped millis for TransferResource startTime
    ("requires")
  • MNG-5626 Avoid negative durations or handle them correctly
    ("is depended upon by")

Remote Links:

Backported to: 4.0.0-rc-2

1 votes, 5 watchers

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions