Proposal to revise forest graph and integration practices for JDK 9

Robert Field robert.field at oracle.com
Sat Nov 23 11:26:32 PST 2013


+1

The pain of the current system was felt heavily by the lambda team.

-Robert



On 11/23/13 08:34, Joe Darcy wrote:
> Hello,
>
> The current arrangements of sets of integration forests for a JDK 
> platform release, like JDK 8, impose high overheads on development. 
> I'm proposing we use an alternate forest arrangement for JDK 9 that 
> will dramatically reduce the propagation time of fixes across the set 
> of forests. More details below.
>
> JDK release projects for new Java SE platforms, like JDK 8 for Java SE 
> 8, have long used a graph of forests structured roughly as follow:
>
> * A master forest for the release
>
> * A thicket of integration forests for particular teams or technology 
> areas. Today in JDK 8, the "TL" forest hosts changes in tools related 
> to javac as well as core libraries. Forests for various client 
> libraries (2D, awt, swing) host changes in those areas. A HotSpot 
> forest, fed in turn by several HotSpot team forests, hosts VM-related 
> changes. Generally, each integration forest only accepts changes to a 
> subset of repositories. For example, the HotSpot-related forests 
> typically only accept changes to the hotspot repository. The TL forest 
> accepts changes to library-related repos (jdk, jaxp, jaxws, etc.) and 
> langtools, but not to hotspot.
>
> After some amount of testing and other verification steps, changes in 
> one integration forest are integrated into master, typically on a 
> weekly or bi-weekly basis. From master, the fix then propagates down 
> to integration forests according to the policies of that forest. A fix 
> could be in master for several days or more before being propagated to 
> a particular integration forest.
>
> While this structure has provided a great deal of cross-team 
> isolation, it has come at the cost of high propagation delays of fixes 
> to all forests. This propagation delay combined with only pushing 
> fixes to a subset of repos also severely complicates making 
> coordinated changes which span across repositories, as often occurred 
> in Project Lambda and which chronically occurs for technologies like 
> servicability. To give a representative example, consider a 
> hypothetical change which requires updates to both the HotSpot runtime 
> area as well as core libraries. If the change is first pushed to 
> HotSpot, the propagation proceeds like:
>
>     fix pushed to HotSpot runtime forest -> HotSpot main -> JDK 8 
> master -> TL -> core libs engineer's forest
>
> At this point, the libraries half of the change can be pushed:
>
>     core libs fix pushed to TL -> JDK 8 master -> HotSpot main -> 
> HotSpot runtime -> HotSpot runtime engineer's forest
>
> This cycle to separately push both halves of what is conceptually a 
> single fix and wait for them to propagate can take about four weeks. 
> (Worse, often there needs to be a third push to complete the fix since 
> the first push is often to "accept old way or new way" and the third 
> push updates this to "accept new way only." When such a clean-up push 
> is needed, it takes another two weeks to fully propagate.)
>
> Since more projects requiring cross-repository coordination are 
> expected in the future, I'm proposing a number of changes to the 
> forest structure and management policies in JDK 9 to reduce the 
> propagation delays.
>
> * A master forest that is a time-delayed version of dev; dev described 
> below.
>
> * The dev forest conceptually replaces TL and hosts all 
> libraries-related changes. When the sources in dev are in a known-good 
> state, that state can be integrated to master. This integration cycle 
> would happen at least weekly. In a change from current practice, 
> HotSpot changes would be integrated into dev and *not* into master. 
> All other team forests would also integrate into dev rather than master.
>
> * Coordinated HotSpot + other component fixes would *both* get first 
> pushed through the HotSpot forest. From hotspot the full fix would be 
> integrated into dev. If additional testing was appropriate for the 
> non-HotSpot fix, that testing should occur before integration into dev.
>
> * Regular promoted builds based on master would continue.
>
> By having team forests integrate directly into dev as well as having 
> many libraries developers pushing directly to dev, the dev forest 
> serves as an active collaboration area with greatly reduced 
> propagation times across the whole system. With this model there is 
> less cross-team isolation; teams and individuals are responsible for 
> promptly fixing any breakage which is introduced. If problems are not 
> quickly addressed, a problematic changeset may be anti-delta'ed.
>
> (Conceptually, in this model a separate master forest is not strictly 
> needed since the known-good states could be indicated using a 
> mechanism like Hg tags. However, while adjusting to the new model and 
> to allow for fixes directly to master in exceptional circumstances, 
> I'm proposing a physically separate master forest be retained. The 
> distinct URL of master will also clearly indicate known-good states of 
> the source code.)
>
> Please send comments on the above by November 29.
>
> Thanks,
>
> -Joe
>



More information about the jdk9-dev mailing list