Hi,

I made a first pass at coalescing the logic for a specific way to build (single 
threaded, multi threaded, weave) into its own implementation but there is still 
much cleanup to be done. This was pure refactoring and there isn't much 
functional change aside from adding a command line parameter to specify the id 
of a specific builder if you have your own implementation. I'm using this 
capability for an aggressive mode of parallelization and while that works the 
core is still a bit of a mess, and the signature for a Builder still isn't very 
nice. It should ultimately become:

builder.build( session );

or if we ultimately make the session immutable (which would be nice because in 
any parallel mode it has to be cloned for safety which is expensive)

build.build( session, mutableDataThatCanPotentiallyBeSharedBetweenProjects )

Right now the weave mode code has been conflated into much of the other code 
and it should be contained to its implementation. Ideally a builder gets the 
projects to build and the task segments to execute (clean install) and the rest 
is up to the implementation. All scheduling information, specific metrics, 
particulars about the order of execution should all be local to the 
implementation. Now that there is a clean spot at the end of the build that you 
can attach to the ordering of execution that occurs in a Builder won't affect 
code that takes advantage of this. Though code using the "if last 
reactorProject" type logic need to be change as that breaks badly in parallel 
mode. The projects to built are already stored in the session, we can probably 
store the task segments there as well to try and reduce the signature of a 
Builder.

I would like to start the next phase by removing the weave mode code. I don't 
think it's really a viable model for execution, and even if it was a cleaner 
implementation can be made but I don't think anyone is really using it to be 
honest. If your projects are modularized properly you will be rewarded in any 
parallel mode. I think the weave mode would just encourage poor structuring and 
ultimately not much gain because even if you can move a little bit ahead in the 
build and do a few segments in a few more projects you're still going to get 
blocked by the critical path and if you don't clean that up you're screwed 
anyway. The second you clean that up any parallelized mode you will be rewarded 
and the complexity of the weave mode for possibly a slight gain is not worth 
it. 

At any rate there is a lot more cleanup to do but I would like to start by 
removing the weave mode. Really this is up to Kristian, but it will help me 
greatly clean up the rest of the code.

Thanks,

Jason

----------------------------------------------------------
Jason van Zyl
Founder,  Apache Maven
http://twitter.com/jvanzyl
http://twitter.com/takari_io
---------------------------------------------------------

First, the taking in of scattered particulars under one Idea,
so that everyone understands what is being talked about ... Second,
the separation of the Idea into parts, by dividing it at the joints,
as nature directs, not breaking any limb in half as a bad carver might.

  -- Plato, Phaedrus (Notes on the Synthesis of Form by C. Alexander)









Reply via email to