You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "Alexander Ashitkin (Jira)" <ji...@apache.org> on 2022/10/21 17:00:00 UTC

[jira] [Created] (MBUILDCACHE-25) Project checksum recalculated multiple time in presence of forked executions

Alexander Ashitkin created MBUILDCACHE-25:
---------------------------------------------

             Summary: Project checksum recalculated multiple time in presence of forked executions
                 Key: MBUILDCACHE-25
                 URL: https://issues.apache.org/jira/browse/MBUILDCACHE-25
             Project: Maven Build Cache Extension
          Issue Type: Bug
            Reporter: Alexander Ashitkin


In forked executions present in build, project checksum will be calculated multiple times, one time for project itself + 1 time for each forked execution (could be 5, 10 - any times)
The issue is manifested by multiple cache calculation log records for the same project:
{noformat}
LOGGER.info( "Going to calculate checksum for project [groupId=" + project.getGroupId()
        + ", artifactId=" + project.getArtifactId() + "]" );{noformat}
 
h3. Impact

No functional impact observed, just performance penalty on cache in case of initial calculation
h3. Cause 

For every forked execution MojoExecutor clones project per forked execution. Each forked project goes through full cache lifecycle:

 
{code:java}
// public List<MavenProject> executeForkedExecutions( MojoExecution mojoExecution, MavenSession session,
                                                   ProjectIndex projectIndex )
    throws LifecycleExecutionException
{
...
    Map<String, List<MojoExecution>> forkedExecutions = mojoExecution.getForkedExecutions();

    if ( !forkedExecutions.isEmpty() )
    {
        ...
        try
        {
            for ( Map.Entry<String, List<MojoExecution>> fork : forkedExecutions.entrySet() )
            {

                MavenProject executedProject = forkedProject.clone();

                forkedProject.setExecutionProject( executedProject );

                List<MojoExecution> mojoExecutions = fork.getValue();
                ...
                try
                {
                    ...
                    // here cloned project enters cache as a standalone project
                    execute( session, mojoExecutions, projectIndex );{code}

Additional notes: the cloning doesn't affect effective pome, so checksum is stable and the same in all calculations

Proposed solution: reuse calculated inputs from cache

 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)