maven-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Kristian Rosenvold <kristian.rosenv...@gmail.com>
Subject MavenITmng4482ForcePluginSnapshotUpdateTest and embedding, an intricate issue
Date Wed, 03 Mar 2010 11:34:06 GMT
MavenITmng4482ForcePluginSnapshotUpdateTest was failing on my CI 
environment, and I have found out why - the reason is a bit intricate:

My CI is one 32 bit linux node and a 64 bit linux node. Interestingly 
enought the 64 bit vm is "server" because AFAIK that's the only 64 bit 
vm there is.

The 4482 integration test was consistently failing on the 64 bit node, 
and intermittently on the 32 bit node. The failures on the 64 bit node 
were approx 20% VM crash (inside native Zip code used
by classloader to read jar file), 70% of a very odd error message 
indicating that plexus configuration was inconsistent and 10% success.

The test is trying to replace the local-repo version of an extension jar 
file. When forking maven in the int-test, the exenstion jar is locked 
for the duration of the test and unlocked when the forked vm terminates. 
When running the integration tests with verifier.forkMode=auto, the 
extension jar file is kept open as long as the classloader is active. On 
a windows box, this will effectively lock the
file, on a linux box it's even worse, as it seemingly allows you to 
replace the contents of the file but it actually corrupts it (or at 
least the in-memory image, unsure of the details).

Now since the 64 bit vm is "server", it actually has quite different 
behaviour when it comes to unloading stuff than the "client" vm. That's 
why it was failing so much.

I found a blog post that explains it well 
http://management-platform.blogspot.com/2009/01/classloaders-keeping-jar-files-open.html 

The post references a sun bug om the issue 
(http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5041014). 
<http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5041014>The bug 
actually describes the problems I've been having on linux too.

In an isolated fix, I can disable the 4482 test when running 
verifier.forkMode=auto. But it seems to me like there is a larger 
problem here when running any kind of
embedded usage; is stuff like the "-U" option actually supported ?


Kristian


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org


Mime
View raw message