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 16:25:00 UTC

[jira] [Updated] (MBUILDCACHE-24) Cache cannot be processed in presence of forked executions

     [ https://issues.apache.org/jira/browse/MBUILDCACHE-24?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Alexander Ashitkin updated MBUILDCACHE-24:
------------------------------------------
    Description: 
Current implementation relies on lifecycle phases presence in 

`MojoExecution`. In case of forked execution `MojoExecution#getLifecyclePhase` could return null which result in IAEs in multiples places in cache:

 
{code:java}
java.lang.IllegalArgumentException: Unsupported phase: null
    at org.apache.maven.buildcache.LifecyclePhasesHelper.isLaterPhase (LifecyclePhasesHelper.java:121)
    at org.apache.maven.buildcache.LifecyclePhasesHelper.isLaterPhaseThanClean (LifecyclePhasesHelper.java:105)
    at org.apache.maven.buildcache.LifecyclePhasesHelper.getCleanSegment (LifecyclePhasesHelper.java:139)
    at org.apache.maven.buildcache.BuildCacheMojosExecutionStrategy.execute (BuildCacheMojosExecutionStrategy.java:101)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.executeForkedExecutions (MojoExecutor.java:366)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:211)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:167)
    at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:66)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:158)
    at org.apache.maven.buildcache.BuildCacheMojosExecutionStrategy.execute (BuildCacheMojosExecutionStrategy.java:127)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:196)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:186)
    at java.util.concurrent.FutureTask.run (FutureTask.java:266)
    at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:511)
    at java.util.concurrent.FutureTask.run (FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:624)
 
{code}
Proposed fix is to resolve `lifecyclePhase` from the originating mojo and use it as a lifecycle phase for forked mojos. 
Optionally, the issue probably could be resolved in maven-core by properly setting execution phase. 

  was:
Current implementation relies on lifecycle phases presence in 

`MojoExecution`. In case of forked execution `MojoExecution#getLifecyclePhase` could return null which result in IAEs in multiples places in cache.
Example:

```

java.lang.IllegalArgumentException: Unsupported phase: null
    at org.apache.maven.buildcache.LifecyclePhasesHelper.isLaterPhase (LifecyclePhasesHelper.java:121)
    at org.apache.maven.buildcache.LifecyclePhasesHelper.isLaterPhaseThanClean (LifecyclePhasesHelper.java:105)
    at org.apache.maven.buildcache.LifecyclePhasesHelper.getCleanSegment (LifecyclePhasesHelper.java:139)
    at org.apache.maven.buildcache.BuildCacheMojosExecutionStrategy.execute (BuildCacheMojosExecutionStrategy.java:101)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.executeForkedExecutions (MojoExecutor.java:366)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:211)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:167)
    at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:66)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:158)
    at org.apache.maven.buildcache.BuildCacheMojosExecutionStrategy.execute (BuildCacheMojosExecutionStrategy.java:127)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:196)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:186)
    at java.util.concurrent.FutureTask.run (FutureTask.java:266)
    at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:511)
    at java.util.concurrent.FutureTask.run (FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:624)

```

Proposed fix is to resolve `lifecyclePhase` from the originating mojo and use it as a lifecycle phase for forked mojos. 
Optionally, the issue probably could be resolved in maven-core by properly setting execution phase. 


> Cache cannot be processed in presence of forked executions
> ----------------------------------------------------------
>
>                 Key: MBUILDCACHE-24
>                 URL: https://issues.apache.org/jira/browse/MBUILDCACHE-24
>             Project: Maven Build Cache Extension
>          Issue Type: Bug
>            Reporter: Alexander Ashitkin
>            Priority: Major
>
> Current implementation relies on lifecycle phases presence in 
> `MojoExecution`. In case of forked execution `MojoExecution#getLifecyclePhase` could return null which result in IAEs in multiples places in cache:
>  
> {code:java}
> java.lang.IllegalArgumentException: Unsupported phase: null
>     at org.apache.maven.buildcache.LifecyclePhasesHelper.isLaterPhase (LifecyclePhasesHelper.java:121)
>     at org.apache.maven.buildcache.LifecyclePhasesHelper.isLaterPhaseThanClean (LifecyclePhasesHelper.java:105)
>     at org.apache.maven.buildcache.LifecyclePhasesHelper.getCleanSegment (LifecyclePhasesHelper.java:139)
>     at org.apache.maven.buildcache.BuildCacheMojosExecutionStrategy.execute (BuildCacheMojosExecutionStrategy.java:101)
>     at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:153)
>     at org.apache.maven.lifecycle.internal.MojoExecutor.executeForkedExecutions (MojoExecutor.java:366)
>     at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:211)
>     at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:167)
>     at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:66)
>     at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:158)
>     at org.apache.maven.buildcache.BuildCacheMojosExecutionStrategy.execute (BuildCacheMojosExecutionStrategy.java:127)
>     at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:153)
>     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
>     at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:196)
>     at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:186)
>     at java.util.concurrent.FutureTask.run (FutureTask.java:266)
>     at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:511)
>     at java.util.concurrent.FutureTask.run (FutureTask.java:266)
>     at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1149)
>     at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:624)
>  
> {code}
> Proposed fix is to resolve `lifecyclePhase` from the originating mojo and use it as a lifecycle phase for forked mojos. 
> Optionally, the issue probably could be resolved in maven-core by properly setting execution phase. 



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