Kristian, you have the project handy that was causing the problem? On Jul 26, 2012, at 12:54 PM, Igor Fedorenko wrote:
> I have not looked at parallel execution closely and don't fully > understand the usecase, but I am not sure race condition is the code in > DefaultClassRealmManager. > > As far as I can tell, DefaultClassRealmManager only provides create* > methods, which create new realms and the current implementation looks > proper. > > If parallel execution logic needs to be able to create-or-query plugin > realms in thread-safe manner, I think this should be implemented > somewhere at higher levels, where one-plugin-realm-per-plugin-perproject > constraint can be enforced properly. > > Again, I do not know parallel execution, so I can be completely wrong > about this. > > -- > Regards, > Igor > > On 12-07-26 12:36 PM, Jason van Zyl wrote: >> In that case we may just want to differentiate because the parallel >> execution use case is not one that happens inside the IDE. In the case of >> CLI execution it can all be handled up front as additional realm >> construction beyond the CLI execution isn't going to happen. In an IDE or >> shell wouldn't a map of realms keyed by GAV suffice? Sync on write everyone >> is free to read? >> >> On Jul 26, 2012, at 12:06 PM, Igor Fedorenko wrote: >> >>> This is required in m2e where multiple versions of the same plugin can >>> coexist for long time in the same container. >>> >>> -- >>> Regards, >>> Igor >>> >>> On 12-07-26 8:44 AM, Kristian Rosenvold wrote: >>>> There is a race condition in parallel builds that occurs related to >>>> this piece of code: >>>> >>>> http://maven.apache.org/ref/3.0.4/maven-core/xref/org/apache/maven/classrealm/DefaultClassRealmManager.html#75 >>>> >>>> The thing is, for some reason, there's a loop that retries the class >>>> realm generation with a random suffix if the class realm already >>>> exists. In a parallel run, there will be multiple threads requesting >>>> the same realm-id, which semantically should map to the same instance >>>> of the class realm. >>>> >>>> (Most plugins do not really mind if there's a duplicate class realm >>>> every now and then, but some take it very seriously ;) >>>> >>>> I'm tempted to change the semantics of the "newRealm" method to >>>> "getOrCreateRealm", since that seems to be the correct semantics no >>>> matter what. I've tried tracking the origin of the while loop, and it >>>> seems to be very old. Anyone have any idea of what purpose it served ? >>>> >>>> Kristian >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: [email protected] >>>> For additional commands, e-mail: [email protected] >>>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: [email protected] >>> For additional commands, e-mail: [email protected] >>> >> >> Thanks, >> >> Jason >> >> ---------------------------------------------------------- >> Jason van Zyl >> Founder & CTO, Sonatype >> Founder, Apache Maven >> http://twitter.com/jvanzyl >> --------------------------------------------------------- >> >> The modern conservative is engaged in one of man's oldest exercises in moral >> philosophy; that is, >> the search for a superior moral justification for selfishness. >> >> -- John Kenneth Galbraith >> >> >> >> >> >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > Thanks, Jason ---------------------------------------------------------- Jason van Zyl Founder & CTO, Sonatype Founder, Apache Maven http://twitter.com/jvanzyl --------------------------------------------------------- A man enjoys his work when he understands the whole and when he is responsible for the quality of the whole -- Christopher Alexander, A Pattern Language
