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

Jex Jexler commented on GROOVY-7407:
------------------------------------

I can probably take a look sometime the coming weeks, was a long time ago that 
I created that issue here.

To me a machine-wide lock on files (even though per artifact) seems not ideal 
as default setting for Groovy, if a process/thread keeps the lock, other 
processes/threads cannot download the artifact, unless there would be a 
timeout. (Documenting instead how to make the Ivy setting more prominently 
might be a viable alternative, that could then be done by Jenkins, too.)

In a first experiment (with slightly modified GrabConcurrencyTest.java), the 
setting helps somewhat, but with parallel threads downloading the same 
artifacts I could still consistently get states where downloads were only 
partial and even grabs for getting artifcats that had been successfully 
downloaded were apparently hanging, so far unclear if that was rather something 
due to Ivy and/or Groovy Grape.

> Compilation not thread safe if Grape / Ivy is used in Groovy scripts
> --------------------------------------------------------------------
>
>                 Key: GROOVY-7407
>                 URL: https://issues.apache.org/jira/browse/GROOVY-7407
>             Project: Groovy
>          Issue Type: Bug
>          Components: Compiler, Grape
>    Affects Versions: 2.4.3
>         Environment: Essentially independent of the environment, as long as 
> Groovy scripts use Grape; also this bug seems to be present since at least 
> Groovy 1.7.5.
>            Reporter: Jex Jexler
>            Priority: Minor
>              Labels: Compile, Grape, Groovy, Ivy
>         Attachments: GROOVY-7407-Jenkins-Pipeline.txt, 
> GrabConcurrencyTest.java, GrapeAndGroovyShellConcurrencyTest.java, 
> GroovyCompileConcurrencyTest.java, 
> WorkaroundGroovy7407WrappingGrapeEngine.java, 
> stacktrace-GrapeAndGroovyShellConcurrencyTest-1.txt, 
> stacktrace-GrapeAndGroovyShellConcurrencyTest-2.txt, 
> stacktrace-GroovyCompileConcurrencyTest-1.txt, 
> stacktrace-GroovyCompileConcurrencyTest-2.txt
>
>
> If Groovy scripts that import the same libraries via Grape are compiled in 
> separate threads, compilation may fail due to race conditions.
> This does not happen if several threads use the *same* instance of 
> GroovyClassLoader (GCL), because parseClass() uses synchronization.
> But as soon as different GCLs are used in separate threads or if the compiler 
> is used directly (CompilationUnit.compile()), the issue occurs and 
> compilation can fail.
> Two Java unit tests have be attached, which reproduce the issue, although 
> this cannot be guaranteed with 100% certainty, because there is a race 
> condition.
> Two different stacktraces have been observed for each unit test (with origins 
> in Grape and in Ivy), which have also been attached (plus in a different 
> environment (Tomcat webapp CentOS) once a an exception down in Ivy had been 
> observed that seemed to be related to unzipping a JAR file, but no precise 
> record of that exists any more).



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

Reply via email to