Why do we need a bunch of duplicate changes in jdk7u/hotspot ?

Erik Trimble trims at netdemons.com
Sat Apr 28 19:00:58 PDT 2012


I don't see any reasonable way to avoid this "problem".

Basically, the problem boils down to this:

when an HS version is forked off for stabilization into a Update 
release, there exists a set of bugs (to be found) that exist in that 
forked HS codebase (let's call that HSa). Naturally, those bugs exist in 
the ongoing 7u-dev HS codebase as well (let's call that HSb).

Now, when one of those bugs is found and fixed in HSb as important for 
the stabilization release, there's a bunch of possibilities:

     (1) immediately sync the HSa repository into HSb
     (2) delay the HSa -> HSb sync until HSa is completed for release
     (3) transplant the fix from HSa to HSb (resulting in the same 
BugID, but a different ChangesetID)
     (4) create a whole new BugID for the fix, and push that changeset 
into HSb
     (5) recognize that current (mainline) work is making the fix 
irrelevant, and thus, we don't want it at all in HSb

Option 1 and 2 produce problems with the situation put forth in Option 
5, as a full repo sync from HSa -> HSb may introduce fixes that are no 
longer desirable in the mainline development repo, so, frankly, they're 
not something that we should do.

Option 3 combined with a general HSa -> HSb sync at the end of the HSa 
stabilization release breaks a rule we've set up for ourselves, in that 
repositories should NOT multiple changesets with the same BugID. This of 
course is merely a guideline, and we can break it at the community's desire.

Option 4 is a bit messy, since it requires that people recognize that 
two different BugIDs actually address the exact same code flaw. It gets 
messier, since when doing a HSa -> HSb sync at the end of a HSa 
stabilization period, whomever is doing the sync has to actually look at 
the code for each potential BugID fix being sync'd back into HSb, to see 
if that BugID is already fixed in the HSa source base.  Normally, if 
this isn't done, it's no big deal, since it merely means that there are 
two changesets that fix the exact same code portion.  However, in the 
case where we recognized that we actually DON'T want to fix the Bug in 
the HSb mainline code, it requires a bit of extra vigilance to make sure 
it doesn't slip back in from the HSa release.


There were very significant issues around merging back changes from 7u2 
into 7u-dev Hostpot, mostly due to the unusual way 7u1 Hotspot was 
managed.  In the case of 7u4, the decision to push in a hs23 version 
from mailine, rather than use the hs22 version from 7u3, caused 
additional grief.


Honestly, the only way to avoid these issue is to do the following:

(a) after a fork of Hotspot for a stabilization release, declare that 
there will NEVER be an actual repository sync from that fork back into 
the mainline development tree, OR vice versa.  This is hard to do, as 
circumstances always interfere with the best intentions.

(b) require all developers who fix a bug in the stabilization release to 
separately push into the mainline repository; however the developer much 
check that the bugfix is still applicable to the mainline repo (i.e. 
check that other development hasn't obsoleted the fix, or that the fix 
doesn't break something else).


In theory the above should be simple, but like everything else in life, 
the devil is in the details. It creates a whole bunch of extra work (vs 
bulk, end-of-stabilization re-integrations) for both developers and QA 
people, and also requires a bit of crystal-ball-gazing around the 
applicability of a fix, whereas bulk re-integrations are a bit more 
brutal in application (i.e. in a bulk integration, the general rule is: 
if its still broke in the mainline, re-integrate the fix from the 
stabilization release even if there might be a future redesign 
obsoleting the fix).


There is no silver bullet.

:-(

-Erik


On 4/27/2012 3:23 PM, David Holmes wrote:
> Hi Volker,
>
> On 27/04/2012 11:15 PM, Volker Simonis wrote:
>> Hi David,
>>
>> thank you very much for the detailed explanation and the links.
>> I missed that discussion (there are just too many mailing lists to
>> monitor) and now it's obviously too late to complain:)
>>
>> But as far as I understood, Eriks mail  "Community Input on Hotspot 22
>> integration into 7u"
>> (http://mail.openjdk.java.net/pipermail/jdk7u-dev/2011-August/000161.html) 
>>
>> was about problems integrating hs22 into 7u.
>>
>> Did these same problems also occur for hs23 as well? I assume yes and
>> if so your explanation would sound perfectly clear to me.
>
> I assume that the same "merge" based model has been followed since 
> that point.
>
>> On the other hand I saw no definitive answer to Edvard's mail "
>> Proposal on how we should handle syncing between stabilisation forests
>> and always open 7u"
>> (http://mail.openjdk.java.net/pipermail/jdk7u-dev/2011-August/000161.html). 
>>
>>
>> Does this mean that we will constantly see these kind of problems
>> (i.e. duplicate changesets with the same bug ID or even worse
>> duplicate changesets with different bug IDs) in the future?
>
> It will occur as long as we are dealing with hsN-1 and hsN and we 
> merge the way we are.
>
>> Is there any "official" document available which explains the syncing
>> between stabilisation forests and 7u?
>
> I'm not aware of anything. I'm also not sure this is specifically an 
> issue with stabilization forests - the 7u-dev forest will have the 
> same issue.
>
> David
> -----
>
>> Thank you and best regards,
>> Volker
>>
>> On Fri, Apr 27, 2012 at 12:45 PM, David 
>> Holmes<david.holmes at oracle.com>  wrote:
>>> Hi Volker,
>>>
>>>
>>> On 27/04/2012 6:59 PM, Volker Simonis wrote:
>>>>
>>>> could anybody please explain why it was necessary to reintegrate a
>>>> whole lot of changes into hs23 of jdk7u/hotspot which have been in the
>>>> hotspot repository since hs22 anyway?
>>>
>>>
>>> This was discussed last year (with thanks to John Rose for these
>>> references):
>>>
>>> http://mail.openjdk.java.net/pipermail/jdk7u-dev/2011-August/000161.html 
>>>
>>> http://mail.openjdk.java.net/pipermail/jdk7u-dev/2011-October/000582.html 
>>>
>>> http://mail.openjdk.java.net/pipermail/jdk7u-dev/2011-November/000748.html 
>>>
>>>
>>> Basically what you are seeing are fixes that went into hs22 and hs23 
>>> after
>>> hs23 forked. hs22 went into 7u2 which became the basis for 7u3 then 
>>> 7u4.
>>> Then hs23 had to be integrated into 7u4 and so you end up with 
>>> different
>>> changesets that duplicate the same actual changes.
>>>
>>> David
>>> -----
>>>
>>>
>>>> This all happened with the following bulk integrations:
>>>>
>>>> http://mail.openjdk.java.net/pipermail/jdk7u-dev/2012-April/002588.html 
>>>>
>>>> http://mail.openjdk.java.net/pipermail/jdk7u-dev/2012-April/002651.html 
>>>>
>>>>
>>>> and it affects (among others):
>>>>
>>>> 7059019: G1: add G1 support to the SA
>>>> 7092412: G1: Some roots not marked during an initial mark that gets an
>>>> evacuation failure
>>>> 7045232: G1: pool names are inconsistent with other collectors (don't
>>>> have 'Space')
>>>> 7068215: G1: Print reference processing time during remark
>>>> 7091032: G1: assert failure when NewRatio is used
>>>> 7092245: G1: Wrong format specifier in G1PrintRegionLivenessInfo 
>>>> header
>>>> output
>>>> 7092238: G1: Uninitialized field gc_efficiency in
>>>> G1PrintRegionLivenessInfo output
>>>> 6484982: G1: process references during evacuation pauses
>>>> 7075646: G1: fix inconsistencies in the monitoring data
>>>> 7086533: G1: assert(!_g1->is_obj_dead(obj)): We should not be
>>>> preserving dead objs: g1CollectedHeap.cpp:3835
>>>> 7097053: G1: assert(da ? referent->is_oop() :
>>>> referent->is_oop_or_null()) failed: referenceProcessor.cpp:1054
>>>> 7097048: G1: extend the G1 SA changes to print per-heap space 
>>>> information
>>>> 7092236: java/util/EnumSet/EnumSetBash.java fails
>>>> 7092278: "jmap -finalizerinfo" throws
>>>> "sun.jvm.hotspot.utilities.AssertionFailure: invalid cp index 0 137"
>>>> 7096366: PPC: corruption of floating-point values with DeoptimizeALot
>>>> 7100165: JSR 292: leftover printing code in methodHandleWalk.cpp
>>>>
>>>> Looking for each of this changes will show you that they are present
>>>> two times in the repository with exactly the same changesets. E.g.:
>>>> http://hg.openjdk.java.net/jdk7u/jdk7u4/hotspot/log?rev=7059019
>>>>
>>>> Regards,
>>>> Volker




More information about the jdk7u-dev mailing list