Hello Jesse, Daniel and I are Jenkins pipeline fans so we will stay tuned and report any issues we find. Thanks again for the fast release, this saves us a lot of time and headaches.
Regards, Karsten Am Dienstag, 8. November 2016 15:59:40 UTC+1 schrieb Jesse Glick: > > On Tue, Nov 8, 2016 at 3:27 AM, Daniel Weber <[email protected] > <javascript:>> wrote: > > Thanks a lot! This fixed our problem :-) > > Good to hear. > > There is test coverage demonstrating lack of leaks for basic > scenarios, which seems to have included yours, but there can always be > some surprises waiting in the wings. I found that when you have some > method defined outside the build, say in a plugin: > > package some.permanent.pkg; > public class SomeClass { > @Whitelisted // go ahead, use me without worries > public static String checkTheFrobnitz(Object whatever) {…} > } > > and you call it from Pipeline script with an argument whose *runtime > type* is defined in that script: > > import some.permanent.pkg.* > stage('Checks') { > echo "Frobnitz verified: ${SomeClass.checkTheFrobnitz(this)}" > } > > then Groovy will helpfully cache the fact that > `SomeClass.checkTheFrobnitz` on (this version of) `WorkflowScript` > should resolve to `checkTheFrobnitz(Object)` rather than some other > overload or weird dynamic invocation. And it will hold onto this cache > from `SomeClass`—so a new cache entry is created on every build, whose > “retained set” includes every class that build defined. The cache uses > a soft reference, so the entry will *eventually* get tossed out, but > not promptly after the end of the build (the VM argument > `-XX:SoftRefLRUPolicyMSPerMB=1` seems to ameliorate the problem). I > have not yet figured out a way to efficiently search for these entries > and blow them away, so for now I just hope this case is rare in > practice. > > To make things more interesting, Groovy 1.x (used in Jenkins 1.x) and > 2.x (used in Jenkins 2.x) each have their own set of bugs in this > area. The Java platform is not innocent either; there are poorly > conceived caches baked into JavaBeans and Serialization which do not > get cleared on time without some tortuous workarounds. Pipeline > implementation code tries to clean up everything it can—enough to make > the defined tests pass. Stay vigilant and report any reproducible > leaks in the future: classes not unloaded, `GroovyClassLoader` > instances never being collected. > > /me sighs > -- You received this message because you are subscribed to the Google Groups "Jenkins Developers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-dev/ee915b2c-28e9-4e74-9629-a4b6be1826ba%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
