[ 
https://issues.apache.org/jira/browse/MBUILDCACHE-44?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17703546#comment-17703546
 ] 

ASF GitHub Bot commented on MBUILDCACHE-44:
-------------------------------------------

eltsovalex opened a new pull request, #52:
URL: https://github.com/apache/maven-build-cache-extension/pull/52

   Reproduced the issue with an integration test, applied a fix (via 
deduplication of info of executions) and created a test that proves issue is 
now gone.
   
   
   Following this checklist to help us incorporate your 
   contribution quickly and easily:
   
    - [ ] Make sure there is a [JIRA 
issue](https://issues.apache.org/jira/browse/MNG) filed 
          for the change (usually before you start working on it).  Trivial 
changes like typos do not 
          require a JIRA issue.  Your pull request should address just this 
issue, without 
          pulling in other changes.
    - [ ] Each commit in the pull request should have a meaningful subject line 
and body.
    - [ ] Format the pull request title like `[MNG-XXX] - Fixes bug in 
ApproximateQuantiles`,
          where you replace `MNG-XXX` with the appropriate JIRA issue. Best 
practice
          is to use the JIRA issue title in the pull request title and in the 
first line of the 
          commit message.
    - [ ] Write a pull request description that is detailed enough to 
understand what the pull request does, how, and why.
    - [ ] Run `mvn clean verify` to make sure basic checks pass. A more 
thorough check will 
          be performed on your pull request automatically.
    - [ ] You have run the [Core IT][core-its] successfully.
   
   If your pull request is about ~20 lines of code you don't need to sign an
   [Individual Contributor License 
Agreement](https://www.apache.org/licenses/icla.pdf) if you are unsure
   please ask on the developers list.
   
   To make clear that you license your contribution under 
   the [Apache License Version 2.0, January 
2004](http://www.apache.org/licenses/LICENSE-2.0)
   you have to acknowledge this by using the following check-box.
   
    - [ ] I hereby declare this contribution to be licenced under the [Apache 
License Version 2.0, January 2004](http://www.apache.org/licenses/LICENSE-2.0)
   
    - [ ] In any other case, please file an [Apache Individual Contributor 
License Agreement](https://www.apache.org/licenses/icla.pdf).
   
   [core-its]: https://maven.apache.org/core-its/core-it-suite/
   




> Running duplicate maven phase leads to IllegalStateException and cache miss
> ---------------------------------------------------------------------------
>
>                 Key: MBUILDCACHE-44
>                 URL: https://issues.apache.org/jira/browse/MBUILDCACHE-44
>             Project: Maven Build Cache Extension
>          Issue Type: Bug
>    Affects Versions: 1.0.0
>            Reporter: Miguel Ortega
>            Priority: Minor
>         Attachments: maven-cache.zip
>
>
> When running maven with a duplicate maven goal like below (i'm aware that 
> compile phase here is not necessary)
> {code:java}
> mvn compile test
> {code}
> the plugin seems to create a cache key that cause an error if i call.
> {code:java}
> mvn test
> {code}
> This will cause the following error:
> {code:java}
> [ERROR] Failed to restore project
> java.lang.IllegalStateException: Duplicate key 
> default-resources:resources:process-resources:maven-resources-plugin:org.apache.maven.plugins
>  (attempted merging values 
> org.apache.maven.buildcache.xml.build.CompletedExecution@1e1b061 and 
> org.apache.maven.buildcache.xml.build.CompletedExecution@38f77cd9)  
>     at java.util.stream.Collectors.duplicateKeyException (Collectors.java:135)
>     at java.util.stream.Collectors.lambda$uniqKeysMapAccumulator$1 
> (Collectors.java:182)
>     at java.util.stream.ReduceOps$3ReducingSink.accept (ReduceOps.java:169)
>     at java.util.ArrayList$ArrayListSpliterator.forEachRemaining 
> (ArrayList.java:1625)
>     at java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:509)
>     at java.util.stream.AbstractPipeline.wrapAndCopyInto 
> (AbstractPipeline.java:499)
>     at java.util.stream.ReduceOps$ReduceOp.evaluateSequential 
> (ReduceOps.java:921)
>     at java.util.stream.AbstractPipeline.evaluate (AbstractPipeline.java:234)
>     at java.util.stream.ReferencePipeline.collect (ReferencePipeline.java:682)
>     at org.apache.maven.buildcache.xml.Build.getExecutionMap (Build.java:198)
>     at org.apache.maven.buildcache.xml.Build.hasCompletedExecution 
> (Build.java:116)
>     at org.apache.maven.buildcache.xml.Build.lambda$getMissingExecutions$0 
> (Build.java:110)
>     at java.util.stream.ReferencePipeline$2$1.accept 
> (ReferencePipeline.java:178)
>     at java.util.ArrayList$ArrayListSpliterator.forEachRemaining 
> (ArrayList.java:1625)
>     at java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:509)
>     at java.util.stream.AbstractPipeline.wrapAndCopyInto 
> (AbstractPipeline.java:499)
>     at java.util.stream.ReduceOps$ReduceOp.evaluateSequential 
> (ReduceOps.java:921)
>     at java.util.stream.AbstractPipeline.evaluate (AbstractPipeline.java:234)
>     at java.util.stream.ReferencePipeline.collect (ReferencePipeline.java:682)
>     at org.apache.maven.buildcache.xml.Build.getMissingExecutions 
> (Build.java:111)
>     at org.apache.maven.buildcache.CacheControllerImpl.analyzeResult 
> (CacheControllerImpl.java:267)
>     at org.apache.maven.buildcache.CacheControllerImpl.findLocalBuild 
> (CacheControllerImpl.java:234)
>     at org.apache.maven.buildcache.CacheControllerImpl.findCachedBuild 
> (CacheControllerImpl.java:185)
>     at org.apache.maven.buildcache.BuildCacheMojosExecutionStrategy.execute 
> (BuildCacheMojosExecutionStrategy.java:114)
>     at org.apache.maven.lifecycle.internal.MojoExecutor.execute 
> (MojoExecutor.java:160)
>     at 
> org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject 
> (LifecycleModuleBuilder.java:105)
>     at 
> org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject 
> (LifecycleModuleBuilder.java:73)
>     at 
> org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build
>  (SingleThreadedBuilder.java:53)
>     at org.apache.maven.lifecycle.internal.LifecycleStarter.execute 
> (LifecycleStarter.java:118)
>     at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:260)
>     at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:172)
>     at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:100)
>     at org.apache.maven.cli.MavenCli.execute (MavenCli.java:821)
>     at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:270)
>     at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
>     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
>     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke 
> (NativeMethodAccessorImpl.java:77)
>     at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke 
> (DelegatingMethodAccessorImpl.java:43)
>     at java.lang.reflect.Method.invoke (Method.java:568)
>     at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced 
> (Launcher.java:282)
>     at org.codehaus.plexus.classworlds.launcher.Launcher.launch 
> (Launcher.java:225)
>     at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode 
> (Launcher.java:406)
>     at org.codehaus.plexus.classworlds.launcher.Launcher.main 
> (Launcher.java:347)
>  {code}
>  
> *+Steps to reproduce:+*
>  * From a simple maven project (repo project attached), with clean cache, run 
> duplicate phase `mvn compile test`
>  * Then run `mvn test`
>  *  -> An exception is thown and no cache is used
>  * Running either of the commands again work as expected
> +*Expected Behaviour:*+
> Even in case of wrong user input like in this example, i guess i would expect:
>  * A cache to not throw exception an reuse the 'test' cache from the first 
> command
>  * Or a more explicit error to explain severity or resolution to the user
> Environment:
> {noformat}
> Apache Maven 3.9.0 (9b58d2bad23a66be161c4664ef21ce219c2c8584)
> Maven home: <REDACTED>
> Java version: 17.0.1, vendor: Eclipse Adoptium, runtime: 
> C:\<REDACTED>\jdk-17.0.1.12-hotspot
> Default locale: fr_FR, platform encoding: Cp1252
> OS name: "windows 10", version: "10.0", arch: "amd64", family: 
> "windows"{noformat}
> +*Suggested source problem & fix*+
> The source problem seems to be that method "buildExecutionInfo" can return a 
> list with duplicate "CompletedExecution" (same execution key)
> My suggested fix would be to either to deduplicate the "CompletedExecution" by
> "executionKey" CacheControllerImpl.buildExecutionInfo or change the unicity 
> key for 
> CompletedExecution.
> I could work on a PR if bug is confirmed and suggested fix is validated.



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

Reply via email to