From alex.buckley at oracle.com Sat Aug 1 00:05:43 2020 From: alex.buckley at oracle.com (Alex Buckley) Date: Fri, 31 Jul 2020 17:05:43 -0700 Subject: Preview APIs in the Java Platform In-Reply-To: <952661d4-3f1d-2a05-a178-e11b37141cf7@oracle.com> References: <952661d4-3f1d-2a05-a178-e11b37141cf7@oracle.com> Message-ID: <0da465e7-82ff-a2c7-a95e-7529fc0d957f@oracle.com> On 3/3/2020 1:15 PM, Alex Buckley wrote: > Ultimately, though, the best way to provoke feedback on a feature is to > ship it in the GA binary of a JDK feature release. This approach has > worked well for preview language features, where the Java community has > accepted the idea of non-final features that are disabled by default and > can thus be changed in response to feedback. Ideally, we want a way to > ship highly-evolved but non-final APIs in a JDK feature release, without > distorting the API by relocating its packages and modules, and without > misleading developers about its status. I am pleased to report that http://openjdk.java.net/jeps/12 has been updated to define preview APIs as the third kind of preview feature, alongside preview language features and preview VM features. The connection between preview language features and preview APIs is strong. We now have preview language features that allow ordinary code to declare new types (e.g., record classes, sealed classes), which means that not only do we have to flag where a declaration relies on a non-final feature (`record Point(..) {..}`), but we also have to flag where code uses the declaration (`new Point(..)`), since it relies indirectly on a non-final feature too. JEP 12 always suggested this double-sided flagging, but it emerges more clearly once preview APIs are in the story -- using your own record class `Point` is akin to using a preview API in java.*. The use of preview language features, types declared using preview language features, and preview APIs is discussed in a unified way in the section "Use of Preview Features". Other topics of interest are the four-way categorization of preview APIs (with special rules to support use of "reflective" preview APIs -- also not new, but clearer now), and the impact of preview APIs in java.lang. javac's support for preview APIs is on track for JDK 16. The CSR (https://bugs.openjdk.java.net/browse/JDK-8250769) includes a concise overview of what happens when you use each kind of preview feature. Alex From david.holmes at oracle.com Mon Aug 3 01:52:59 2020 From: david.holmes at oracle.com (David Holmes) Date: Mon, 3 Aug 2020 11:52:59 +1000 Subject: Copyright Issues : JDK15 - GPLv2 is present but Classpath exception is missing In-Reply-To: References: <772e0556-28b7-aa9e-0f28-aa76330d576d@oracle.com> <2fc3326890cdeffdf2a71f4004e0d159e0bd361b.camel@redhat.com> Message-ID: <273b263d-b0ea-aa92-c0e3-efc3e495236e@oracle.com> On 29/07/2020 7:25 pm, Archana Nogriya wrote: > Thank David for confirming. > > Yes agree with you they are either hotspot or build tool related. > > and I will wait for the fix for > src/java.base/share/classes/java/lang/invoke/LambdaProxyClassArchive.java, > as you mentioned :) I have filed: https://bugs.openjdk.java.net/browse/JDK-8250929 Cheers, David > Thanks again. > > > Many Thanks & Regards > Archana Nogriya > Java Runtimes Development and Project Manager > IBM Hursley > IBM United Kingdom Ltd > internet email: archana.nogriya at uk.ibm.com > > > > > From: David Holmes > To: Severin Gehwolf , Archana Nogriya > , jdk-dev at openjdk.java.net > Cc: Andrew Leonard , Simon Rushton > > Date: 28/07/2020 14:51 > Subject: [EXTERNAL] Re: Copyright Issues : JDK15 - GPLv2 is present but > Classpath exception is missing > ------------------------------------------------------------------------ > > > > On 28/07/2020 11:44 pm, Severin Gehwolf wrote: >> On Tue, 2020-07-28 at 23:40 +1000, David Holmes wrote: >>> Hi, >>> >>> On 28/07/2020 10:07 pm, Archana Nogriya wrote: >>>> Hi, >>>> >>>> Please can someone help to fix these copyright issues in JDK15. >>>> We found these issues in our internal scan. >>> >>> Why should these files require the classpath exception? They are not >>> classes you would link against. >> [...] >> >>>> src/java.base/share/classes/java/lang/invoke/LambdaProxyClassArchive.java: >>>> GPLv2 is present but Classpath exception is missing >> >> ---^ >> >> This one probably is? > > Yes I'll give you that one :) > > David > >> Thanks, >> Severin >> > > > > > Unless stated otherwise above: > IBM United Kingdom Limited - Registered in England and Wales with number > 741598. > Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU From GopalaKrishna.Konakanchi at arcserve.com Tue Aug 4 11:08:29 2020 From: GopalaKrishna.Konakanchi at arcserve.com (Konakanchi, Gopala Krishna V N.) Date: Tue, 4 Aug 2020 11:08:29 +0000 Subject: Shortcut files created in openjdk installation Message-ID: Hi, When we have installed open-jdk 1.8.0 on Red hat Linux instance ( AWS ec2-instance - red hat version 8.2 ), some shortcut files were created. Installed using yum. We have faced some issues due to the creation of shortcut files instead of complete file. Observation: When clicked on the shortcut file, the file with full content is opened in the same location. ( Were shortcut file is placed ). Can you please help to let us know why the short cut files are getting created. Best Regards, Gopala Krishna. From sgehwolf at redhat.com Tue Aug 4 11:38:46 2020 From: sgehwolf at redhat.com (Severin Gehwolf) Date: Tue, 04 Aug 2020 13:38:46 +0200 Subject: Shortcut files created in openjdk installation In-Reply-To: References: Message-ID: <8240f438cb7e8ce26bf41ba1f3d265a0fc8c7327.camel@redhat.com> On Tue, 2020-08-04 at 11:08 +0000, Konakanchi, Gopala Krishna V N. wrote: > Hi, > When we have installed open-jdk 1.8.0 on Red hat Linux instance ( AWS ec2-instance - red hat version 8.2 ), some shortcut files were created. > Installed using yum. We have faced some issues due to the creation of shortcut files instead of complete file. This seems to be the wrong list for this issue. jdk-dev list is about development of OpenJDK. Your issue seems to be downstream packaging related. Please open a bug with the vendor which provides the RPM you've installed via yum. Thanks, Severin From GopalaKrishna.Konakanchi at arcserve.com Tue Aug 4 14:22:45 2020 From: GopalaKrishna.Konakanchi at arcserve.com (Konakanchi, Gopala Krishna V N.) Date: Tue, 4 Aug 2020 14:22:45 +0000 Subject: Shortcut files created in openjdk installation In-Reply-To: <8240f438cb7e8ce26bf41ba1f3d265a0fc8c7327.camel@redhat.com> References: <8240f438cb7e8ce26bf41ba1f3d265a0fc8c7327.camel@redhat.com> Message-ID: Hi Gehwolf, Can you please let me know the vendor you have referred in the below mail?. As it was suggested to contact jdk-dev, I contacted. Please find the attached mail for the earlier conversation happened. Best Regards, Gopala Krishna. -----Original Message----- From: Severin Gehwolf Sent: Tuesday, August 4, 2020 5:09 PM To: Konakanchi, Gopala Krishna V N. ; jdk-dev at openjdk.java.net Subject: Re: Shortcut files created in openjdk installation On Tue, 2020-08-04 at 11:08 +0000, Konakanchi, Gopala Krishna V N. wrote: > Hi, > When we have installed open-jdk 1.8.0 on Red hat Linux instance ( AWS ec2-instance - red hat version 8.2 ), some shortcut files were created. > Installed using yum. We have faced some issues due to the creation of shortcut files instead of complete file. This seems to be the wrong list for this issue. jdk-dev list is about development of OpenJDK. Your issue seems to be downstream packaging related. Please open a bug with the vendor which provides the RPM you've installed via yum. Thanks, Severin -------------- next part -------------- An embedded message was scrubbed... From: Maurizio Cimadamore Subject: Re: Your message to ide-support-dev awaits moderator approval Date: Tue, 4 Aug 2020 10:52:36 +0000 Size: 11592 URL: From joe.darcy at oracle.com Tue Aug 4 16:14:54 2020 From: joe.darcy at oracle.com (Joe Darcy) Date: Tue, 4 Aug 2020 09:14:54 -0700 Subject: Shortcut files created in openjdk installation In-Reply-To: References: <8240f438cb7e8ce26bf41ba1f3d265a0fc8c7327.camel@redhat.com> Message-ID: <00db5a4d-8549-6a5f-91ff-62a47d770bcf@oracle.com> Hello Gopala, Expanding Gehwolf's point, the aliases under openjdk.java.net are not general no-cost Java support channels and they should not be treated as such. Cheers, -Joe On 8/4/2020 7:22 AM, Konakanchi, Gopala Krishna V N. wrote: > Hi Gehwolf, > Can you please let me know the vendor you have referred in the below mail?. > As it was suggested to contact jdk-dev, I contacted. > Please find the attached mail for the earlier conversation happened. > > > Best Regards, > Gopala Krishna. > > From shade at redhat.com Wed Aug 5 10:35:47 2020 From: shade at redhat.com (Aleksey Shipilev) Date: Wed, 5 Aug 2020 12:35:47 +0200 Subject: RFC (round 1), JEP draft: Low-level Object layout introspection methods Message-ID: Hi, I would like to solicit early feedback on "Low-level Object layout introspection methods" JEP: https://openjdk.java.net/jeps/8249196 It crosscuts core libraries and Hotspot, and therefore jdk-dev@ seems to be the mailing list to use for it. The work seems to be at the point where we understand the initial design and implementation constraints. Those are both reflected in JEP text (where possible), and in the prototype implementation (webrevs and builds are linked in JEP itself). The API itself is not cast in stone, and open for discussion. JEP text hopefully makes a good argument for each of new methods. Strong (dis)agreements about the existence of particular methods are good to have during this review, so we could swing the JEP direction early. The implementation itself is not the focus of this discussion. If you find implementation bugs/quirks, send me a direct email. Ditto if you have a drive-by comment and do not want to participate in more discussions. The API initial performance characteristics look good and briefly mentioned in JEP text. Robert Stupp had provided the experimental JAMM branch that hooks to new API, and it seems to considerably improve accuracy and performance. I also did a few touch-ups in JOL to bring the performance baseline for comparisons closer, and JOL is still quite far away performance-wise. (Logistics: This review does _not_ require prompt review, as many folks -- including myself -- are having vacations at this time. I shall be able to sift through replies and do JEP/implementation adjustments some time next week.) -- Thanks, -Aleksey From Alan.Bateman at oracle.com Wed Aug 5 12:03:01 2020 From: Alan.Bateman at oracle.com (Alan Bateman) Date: Wed, 5 Aug 2020 13:03:01 +0100 Subject: RFC (round 1), JEP draft: Low-level Object layout introspection methods In-Reply-To: References: Message-ID: On 05/08/2020 11:35, Aleksey Shipilev wrote: > Hi, > > I would like to solicit early feedback on "Low-level Object layout introspection methods" JEP: > https://openjdk.java.net/jeps/8249196 > > It crosscuts core libraries and Hotspot, and therefore jdk-dev@ seems to be the mailing list to use > for it. > > The work seems to be at the point where we understand the initial design and implementation > constraints. Those are both reflected in JEP text (where possible), and in the prototype > implementation (webrevs and builds are linked in JEP itself). > > The API itself is not cast in stone, and open for discussion. JEP text hopefully makes a good > argument for each of new methods. Strong (dis)agreements about the existence of particular methods > are good to have during this review, so we could swing the JEP direction early. > I think the consequences of exposing layout and address information in the standard API needs discussion. Although the intention seems to be for benign introspection by tools, and maybe a small number of super advanced libraries, I could imagine addressOf and fieldOffsetOf being misused. I don't have a good sense on how layout will be change in Project Valhalla with specialized generics to know if these APIs even make sense (I see you have a section already on the challenges with inline types). As you note in the JEP, the Instrumentation and JVM TI APIs are for tool agents, not libraries. The getObjectSIze method was meant for profilers and other tooling that wanted to estimate memory usage. Those APIs have not been updated since Java 5 and probably need to be modernized so that might be useful to separate out for its own investigation. You list "heap dumps" as a non-alternative. The reason that the built-in heap dump generates VM-independent HPROF format is because that was the only format that tooling could consume at the time (Java 6). That is something that could be separated out too as it might be an interesting project to re-visit this area, maybe even augment the heap dump with something that would help heap dump analyzer get a better sense of the memory usage. I see in the alternatives that you don't want to pursue moving JOL in the JDK. I think you could expand a bit more on this as I don't think "backports" or "support previous JDKs" are relevant, meaning I don't think it would need to be constrained by needing to work across different JDK builds/versions. Maybe this alternative is about more diagnostic options to print layout information, maybe it doesn't need a separate tool. I'm sure you will get lots of other feedback on the draft JEP. My main concern is implications of putting these low-level APIs into the java.* API, whether it creates attractive nuisance, and/or will they be regrets in the long term as layouts get more sophisticated. -Alan. From mark.reinhold at oracle.com Fri Aug 7 15:44:13 2020 From: mark.reinhold at oracle.com (mark.reinhold at oracle.com) Date: Fri, 7 Aug 2020 08:44:13 -0700 (PDT) Subject: JDK 15: First Release Candidate Message-ID: <20200807154413.CB26D3BD844@eggemoggin.niobe.net> Per the JDK 15 schedule [1], we are now in the Release Candidate phase. The stabilization repository, jdk/jdk15, is open for P1 bug fixes per the JDK Release Process (JEP 3) [2]. All changes require approval via the Fix-Request Process [3]. If you?re responsible for any of the bugs on the RC candidate-bug list [4] then please see JEP 3 for guidance on how to handle them. There are no unresolved P1 bugs in build 35, so that is our first JDK 15 Release Candidate. Binaries available here, as usual: https://jdk.java.net/15 - Mark [1] https://openjdk.java.net/projects/jdk/15/#Schedule [2] https://openjdk.java.net/jeps/3 [3] https://openjdk.java.net/jeps/3#Fix-Request-Process [4] https://j.mp/jdk-rc From GopalaKrishna.Konakanchi at arcserve.com Fri Aug 7 16:46:09 2020 From: GopalaKrishna.Konakanchi at arcserve.com (Konakanchi, Gopala Krishna V N.) Date: Fri, 7 Aug 2020 16:46:09 +0000 Subject: Shortcut files created in openjdk installation In-Reply-To: <00db5a4d-8549-6a5f-91ff-62a47d770bcf@oracle.com> References: <8240f438cb7e8ce26bf41ba1f3d265a0fc8c7327.camel@redhat.com> <00db5a4d-8549-6a5f-91ff-62a47d770bcf@oracle.com> Message-ID: Thank you Joe. Can you please help to suggest right vendor / point of contact we have to reach for this issue. Best Regards, Gopala Krishna. -----Original Message----- From: Joe Darcy Sent: Tuesday, August 4, 2020 9:45 PM To: Konakanchi, Gopala Krishna V N. ; Severin Gehwolf ; jdk-dev at openjdk.java.net Subject: Re: Shortcut files created in openjdk installation Hello Gopala, Expanding Gehwolf's point, the aliases under openjdk.java.net are not general no-cost Java support channels and they should not be treated as such. Cheers, -Joe On 8/4/2020 7:22 AM, Konakanchi, Gopala Krishna V N. wrote: > Hi Gehwolf, > Can you please let me know the vendor you have referred in the below mail?. > As it was suggested to contact jdk-dev, I contacted. > Please find the attached mail for the earlier conversation happened. > > > Best Regards, > Gopala Krishna. > > From joe.darcy at oracle.com Fri Aug 7 19:31:37 2020 From: joe.darcy at oracle.com (Joe Darcy) Date: Fri, 7 Aug 2020 12:31:37 -0700 Subject: Shortcut files created in openjdk installation In-Reply-To: References: <8240f438cb7e8ce26bf41ba1f3d265a0fc8c7327.camel@redhat.com> <00db5a4d-8549-6a5f-91ff-62a47d770bcf@oracle.com> Message-ID: <1e710dec-2105-548e-d624-2f5ab061fa08@oracle.com> Hello Gopala, I suggest talking to the party you get your JDK from. Cheers, -Joe On 8/7/2020 9:46 AM, Konakanchi, Gopala Krishna V N. wrote: > Thank you Joe. > Can you please help to suggest right vendor / point of contact we have to reach for this issue. > > Best Regards, > Gopala Krishna. > > -----Original Message----- > From: Joe Darcy > Sent: Tuesday, August 4, 2020 9:45 PM > To: Konakanchi, Gopala Krishna V N. ; Severin Gehwolf ; jdk-dev at openjdk.java.net > Subject: Re: Shortcut files created in openjdk installation > > Hello Gopala, > > Expanding Gehwolf's point, the aliases under openjdk.java.net are not general no-cost Java support channels and they should not be treated as such. > > Cheers, > > -Joe > > On 8/4/2020 7:22 AM, Konakanchi, Gopala Krishna V N. wrote: >> Hi Gehwolf, >> Can you please let me know the vendor you have referred in the below mail?. >> As it was suggested to contact jdk-dev, I contacted. >> Please find the attached mail for the earlier conversation happened. >> >> >> Best Regards, >> Gopala Krishna. >> >> From GopalaKrishna.Konakanchi at arcserve.com Fri Aug 7 19:36:15 2020 From: GopalaKrishna.Konakanchi at arcserve.com (Konakanchi, Gopala Krishna V N.) Date: Fri, 7 Aug 2020 19:36:15 +0000 Subject: Shortcut files created in openjdk installation In-Reply-To: <1e710dec-2105-548e-d624-2f5ab061fa08@oracle.com> References: <8240f438cb7e8ce26bf41ba1f3d265a0fc8c7327.camel@redhat.com> <00db5a4d-8549-6a5f-91ff-62a47d770bcf@oracle.com> <1e710dec-2105-548e-d624-2f5ab061fa08@oracle.com> Message-ID: Thank you Joe for the quick reply. We have tried by using yum command: sudo yum install java-1.8.0-openjdk-devel in the ec-2 red hat machine. As its open-jdk I thought open jdk is the point of contact we have reached you. Can you please let me know whether we need to reach out red hat / other vendor for this. Best Regards, Gopala Krishna. -----Original Message----- From: Joe Darcy Sent: Saturday, August 8, 2020 1:02 AM To: Konakanchi, Gopala Krishna V N. ; Severin Gehwolf Cc: jdk-dev at openjdk.java.net Subject: Re: Shortcut files created in openjdk installation Hello Gopala, I suggest talking to the party you get your JDK from. Cheers, -Joe On 8/7/2020 9:46 AM, Konakanchi, Gopala Krishna V N. wrote: > Thank you Joe. > Can you please help to suggest right vendor / point of contact we have to reach for this issue. > > Best Regards, > Gopala Krishna. > > -----Original Message----- > From: Joe Darcy > Sent: Tuesday, August 4, 2020 9:45 PM > To: Konakanchi, Gopala Krishna V N. ; Severin Gehwolf ; jdk-dev at openjdk.java.net > Subject: Re: Shortcut files created in openjdk installation > > Hello Gopala, > > Expanding Gehwolf's point, the aliases under openjdk.java.net are not general no-cost Java support channels and they should not be treated as such. > > Cheers, > > -Joe > > On 8/4/2020 7:22 AM, Konakanchi, Gopala Krishna V N. wrote: >> Hi Gehwolf, >> Can you please let me know the vendor you have referred in the below mail?. >> As it was suggested to contact jdk-dev, I contacted. >> Please find the attached mail for the earlier conversation happened. >> >> >> Best Regards, >> Gopala Krishna. >> >> From joe.darcy at oracle.com Fri Aug 7 19:50:06 2020 From: joe.darcy at oracle.com (Joe Darcy) Date: Fri, 7 Aug 2020 12:50:06 -0700 Subject: Shortcut files created in openjdk installation In-Reply-To: References: <8240f438cb7e8ce26bf41ba1f3d265a0fc8c7327.camel@redhat.com> <00db5a4d-8549-6a5f-91ff-62a47d770bcf@oracle.com> <1e710dec-2105-548e-d624-2f5ab061fa08@oracle.com> Message-ID: <2995760e-715d-f207-7384-67571fcfcd58@oracle.com> If you are looking for support, you should contact whichever company you have a JDK support contract with; there are a variable of alternatives. This will be my last message on this thread; cheers, -Joe On 8/7/2020 12:36 PM, Konakanchi, Gopala Krishna V N. wrote: > Thank you Joe for the quick reply. > We have tried by using yum command: sudo yum install java-1.8.0-openjdk-devel in the ec-2 red hat machine. > As its open-jdk I thought open jdk is the point of contact we have reached you. > Can you please let me know whether we need to reach out red hat / other vendor for this. > > > Best Regards, > Gopala Krishna. > > -----Original Message----- > From: Joe Darcy > Sent: Saturday, August 8, 2020 1:02 AM > To: Konakanchi, Gopala Krishna V N. ; Severin Gehwolf > Cc: jdk-dev at openjdk.java.net > Subject: Re: Shortcut files created in openjdk installation > > Hello Gopala, > > I suggest talking to the party you get your JDK from. > > Cheers, > > -Joe > > On 8/7/2020 9:46 AM, Konakanchi, Gopala Krishna V N. wrote: >> Thank you Joe. >> Can you please help to suggest right vendor / point of contact we have to reach for this issue. >> >> Best Regards, >> Gopala Krishna. >> >> -----Original Message----- >> From: Joe Darcy >> Sent: Tuesday, August 4, 2020 9:45 PM >> To: Konakanchi, Gopala Krishna V N. ; Severin Gehwolf ; jdk-dev at openjdk.java.net >> Subject: Re: Shortcut files created in openjdk installation >> >> Hello Gopala, >> >> Expanding Gehwolf's point, the aliases under openjdk.java.net are not general no-cost Java support channels and they should not be treated as such. >> >> Cheers, >> >> -Joe >> >> On 8/4/2020 7:22 AM, Konakanchi, Gopala Krishna V N. wrote: >>> Hi Gehwolf, >>> Can you please let me know the vendor you have referred in the below mail?. >>> As it was suggested to contact jdk-dev, I contacted. >>> Please find the attached mail for the earlier conversation happened. >>> >>> >>> Best Regards, >>> Gopala Krishna. >>> >>> From brian.goetz at oracle.com Fri Aug 7 19:53:28 2020 From: brian.goetz at oracle.com (Brian Goetz) Date: Fri, 7 Aug 2020 15:53:28 -0400 Subject: RFC (round 1), JEP draft: Low-level Object layout introspection methods In-Reply-To: References: Message-ID: > I would like to solicit early feedback on "Low-level Object layout > introspection methods" JEP: > https://openjdk.java.net/jeps/8249196 I enjoyed reading this JEP draft; clearly a lot of thought has gone into the technical details.? I find much to like, and some to dislike, in this proposal. First, the good news.? I am sympathetic to the needs that certain libraries have to assess memory usage of objects, such as for cache eviction.? While to some level this is an impossible problem (how do we know whether an object reference buried in a graph is aliased or not?), providing users with better ways of measuring cost than simply counting cache entries is a noble cause, and the work you've done on `estimateSize` definitely is a step forward. I am also sympathetic for the desire to better understand layout, for purposes of optimizing footprint ("cool, I can stash this field in the alignment shadow") and cache efficiency ("how do I get these fields so they are more likely on the same cache line.")? While such feedback can never be relied on 100%, I agree it can be useful to have this information so that one can make more accurate estimates of cost. Now, the bad news: I have deep objections to several of the sub-features in this JEP (unfortunately some of them even overlap with the second point above.)? Specifically, I have deep misgivings about exposing field offsets, and deeper misgivings about exposing object addresses. For context, remember that we are in the middle of a deliberate, decade-long transition away from Unsafe.? We knew that we can't just turn off Unsafe immediately, but we also knew we had to wean people from Unsafe -- and not only from the specific class, but from some of the concepts.? And of course we can't do so without providing good-enough replacements for at least some of the use cases, so it will necessarily take time.? (Reasonable people can reasonably disagree on the meaning of "good enough" and which use cases, but that's a separate discussion.) The down payment on this plan was VarHandles; a key goal here was obviate the need for using Unsafe to access data in the Java heap. Naturally it took some time to flesh out the feature set, shake out the performance, and adapt the JDK code to use it, but the goal is clear -- there should be no excuse for using Unsafe to access the Java heap at all.?? And we're? well on the way. People still use Unsafe to access off-heap memory, but we're working on a plan there too -- the Panama foreign memory access API. This is less mature than VarHandles, but the goal is similar; by the time we're done, there should be no excuse to use Unsafe for access to memory at all, ever, because there will be better, safer, supported APIs that do the same thing with comparable performance. (Similarly, Panama has a notion of Layout, and it is possible that, over time, it might be possible to get a Layout for a Java object, and access it through the safer Panama APIs.) The very model that Unsafe assumes for on-heap data (and therefore encourages users to assume) -- that a field offset is a fixed thing that can be relied on -- undermines the VMs ability to optimize.? As just one example, the VM could dynamically redo layout based on profiling data (putting frequently-accessed-together fields so they are in the same cache line) and rewrite existing instances during GC.? In a world where even one user can have Unsafe, then _no one_ can ever have this optimization.? This seems a bad trade! Unfortunately the proposal to include field offset and address information in the API grabs the ball and runs not only to the opposite goal line, but into the next stadium -- by elevating this model to "something you rely on at your own risk" to "something we promise Java will be constrained by until the end of time."? No thank you!? And it seems especially bad to pour fresh concrete on "no one can have this ever" when we're five years into jackhammering away the old dam. In fact, the next methods I would like to _remove_ from Unsafe are the get-field-offset and get-object-address methods.?? You might reply you are enabling this goal, but that would be mistaking the letter for the spirit: I want people to stop assuming that fields HAVE an offset, or that Java objects HAVE an address.? And, what else would someone do with the address and offset, other than provide it to Unsafe (or to the native equivalent)?? This is propping up the wrong model, and runs counter to the long-term direction we've been on for years, and are already halfway there on. So, while there are some things in this JEP that seem quite cool and which I enthusiastically support, there are some fundamental assumptions -- that field offsets and object addresses should be accessible to Java code -- that I disagree with. Setting aside philosophy and stewardship for a moment, I think what's really going on is that this JEP is trying to serve two different audiences: those that are happy to have estimates and/or use the information for making approximate decisions, and those who are interested in low-level hackery for accessing the Java heap, rather than through `getfield` and `putfield`.? I think if you were to split this into two JEPs, you would find enthusiastic support for the first, and strong resistance to the second. To the extent that there is overlap between these groups (e.g., fieldOffsetOf is useful to offline tools that may be used to estimate layouts, as well as online users who would be tempted to believe that this is really a field offset), some creativity will be required to keep the first from becoming an attractive nuisance to the second. So, my feedback is "glass half full" -- I'm happy to see the JEP that provides estimates and such.? My recommendation is to focus on that half for now. Cheers, -Brian From christian.tornqvist at oracle.com Mon Aug 10 21:42:42 2020 From: christian.tornqvist at oracle.com (Christian Tornqvist) Date: Mon, 10 Aug 2020 14:42:42 -0700 Subject: jdk/submit repository reset Message-ID: <8878D6A6-DC58-4D1A-BC04-3AED51C046FA@oracle.com> Hello, The jdk/submit repository was reset. A new repository was created today with no branches except from the default one. http://hg.openjdk.java.net/jdk/submit In order to continue using the submit repo please make a fresh clone and run ?hg out? before push. Also an archive of the old jdk/submit was created https://hg.openjdk.java.net/jdk/submit-archive-2020-08-10 Please continue using the system and report any issues/ask questions related to the jdk/submit repo using ops at openjdk.java.net. Thanks, Christian From shade at redhat.com Tue Aug 11 07:28:00 2020 From: shade at redhat.com (Aleksey Shipilev) Date: Tue, 11 Aug 2020 09:28:00 +0200 Subject: jdk/submit repository reset In-Reply-To: <8878D6A6-DC58-4D1A-BC04-3AED51C046FA@oracle.com> References: <8878D6A6-DC58-4D1A-BC04-3AED51C046FA@oracle.com> Message-ID: On 8/10/20 11:42 PM, Christian Tornqvist wrote: > The jdk/submit repository was reset. > A new repository was created today with no branches except from the default one. > > http://hg.openjdk.java.net/jdk/submit As usual, re-cloned workspace bundle is regenerated here: https://builds.shipilev.net/workspaces/jdk-submit.tar.xz -- Thanks, -Aleksey From shade at redhat.com Tue Aug 11 10:22:24 2020 From: shade at redhat.com (Aleksey Shipilev) Date: Tue, 11 Aug 2020 12:22:24 +0200 Subject: RFC (round 1), JEP draft: Low-level Object layout introspection methods In-Reply-To: References: Message-ID: <787faac2-f156-5da1-4b82-e9318d25d6da@redhat.com> Hi Alan, Thanks for taking a look! On 8/5/20 2:03 PM, Alan Bateman wrote: > On 05/08/2020 11:35, Aleksey Shipilev wrote: > As you note in the JEP, the Instrumentation and JVM TI APIs are for tool > agents, not libraries. The getObjectSIze method was meant for profilers > and other tooling that wanted to estimate memory usage. Those APIs have > not been updated since Java 5 and probably need to be modernized so that > might be useful to separate out for its own investigation. You list > "heap dumps" as a non-alternative. The reason that the built-in heap > dump generates VM-independent HPROF format is because that was the only > format that tooling could consume at the time (Java 6). That is > something that could be separated out too as it might be an interesting > project to re-visit this area, maybe even augment the heap dump with > something that would help heap dump analyzer get a better sense of the > memory usage. Yes, maybe. I don't want to creep the scope of this work, though. > I see in the alternatives that you don't want to pursue moving JOL in > the JDK. I think you could expand a bit more on this as I don't think > "backports" or "support previous JDKs" are relevant, meaning I don't > think it would need to be constrained by needing to work across > different JDK builds/versions. Maybe this alternative is about more > diagnostic options to print layout information, maybe it doesn't need a > separate tool. I don't quite see how moving JOL to JDK helps. I added that alternative after your initial review, so please help me out here? If we move the JOL in its current form, then all the new APIs would be accessible through JOL. In other words, it would be the same API with extra steps. Which means all arguments about exposing offsets, addresses and apply there as well. If we are talking about moving JOL and then disabling some of its features (e.g. getting offsets and addresses), this is not _really_ moving JOL, but rather a shallow version of it. My argument about backports and supporting previous JDK still stands, and here is why. Currently, JOL supports JDK 6..15. Every little bug that is found in JOL is automatically "released" for every supported JDK version. If JOL is inside JDK, that means those bugfixes would need to be backported to previous JDK releases. Basically, that asks JOL maintainers (well, me) to maintain several forked versions of JOL. You can counter that with saying that only the latest version matters, but this is where we would disagree philosophically. > I'm sure you will get lots of other feedback on the draft JEP. My main > concern is implications of putting these low-level APIs into the java.* > API, whether it creates attractive nuisance, and/or will they be regrets > in the long term as layouts get more sophisticated. Quite. I believe JEP calls that out in Risks and Assumptions? I think the weasel-wording the specification text is necessary to prevent _the informational APIs_ from blocking future VM work. I was trying to capture that in many places in the text. Is that still not transparent? More answers in reply to Brian... -- Thanks, -Aleksey From shade at redhat.com Tue Aug 11 10:22:35 2020 From: shade at redhat.com (Aleksey Shipilev) Date: Tue, 11 Aug 2020 12:22:35 +0200 Subject: RFC (round 1), JEP draft: Low-level Object layout introspection methods In-Reply-To: References: Message-ID: <6a9abead-1bc6-336d-b11c-6e6e9ab8983f@redhat.com> Hi Brian, Thanks for taking a look! I think we need to get one thing very straight: these are best-effort informational APIs. They are not required to work 100% reliably. They are expected to provide reasonable answers where possible, until something else gets in the way, including disabled feature flags, corner cases where current and future optimizations turn the answers ambiguous, future work where layouts change on the fly, etc. I tried to be clear about this in JEP text, does that intent register when you read the text? On 8/7/20 9:53 PM, Brian Goetz wrote: > People still use Unsafe to access off-heap memory, but we're working on a plan there too -- the > Panama foreign memory access API. This is less mature than VarHandles, but the goal is similar; by > the time we're done, there should be no excuse to use Unsafe for access to memory at all, ever, > because there will be better, safer, supported APIs that do the same thing with comparable > performance.? (Similarly, Panama has a notion of Layout, and it is possible that, over time, it > might be possible to get a Layout for a Java object, and access it through the safer Panama APIs.)? OK, so let's look a bit forward. Assume Panama does the layout for Java objects. Does it mean that current APIs, that is the MemoryLayout.{bitOffset|byteOffset}: https://hg.openjdk.java.net/jdk/jdk/file/60612063f75a/src/jdk.incubator.foreign/share/classes/jdk/incubator/foreign/MemoryLayout.java#l332 ...apply to Java fields as well? This looks similar to what proposed fieldOffsetOf does. This seems to run counter to the idea that "fields do not have offsets", and that must mean Panama should never do this for heap objects? > The very model that Unsafe assumes for on-heap data (and therefore encourages users to assume) -- > that a field offset is a fixed thing that can be relied on -- undermines the VMs ability to > optimize.? As just one example, the VM could dynamically redo layout based on profiling data > (putting frequently-accessed-together fields so they are in the same cache line) and rewrite > existing instances during GC.? In a world where even one user can have Unsafe, then _no one_ can > ever have this optimization.? This seems a bad trade! Yes, I agree with this part. > Unfortunately the proposal to include field offset and address information in the API grabs the > ball and runs not only to the opposite goal line, but into the next stadium -- by elevating this > model to "something you rely on at your own risk" to "something we promise Java will be > constrained by until the end of time." No thank you! And it seems especially bad to pour fresh > concrete on "no one can have this ever" when we're five years into jackhammering away the old > dam. But I disagree with this part. I don't think the existence of the best-effort informational APIs undermine the future work. If anything comes up that goes against those APIs, then APIs are told to get off our collective lawn, and start replying "don't know". But until that (and even if that) happens, it seems odd to deprive people from getting useful best-effort answers today. > In fact, the next methods I would like to _remove_ from Unsafe are the get-field-offset and > get-object-address methods.?? You might reply you are enabling this goal, but that would be > mistaking the letter for the spirit: I want people to stop assuming that fields HAVE an offset, or > that Java objects HAVE an address.? And, what else would someone do with the address and offset, > other than provide it to Unsafe (or to the native equivalent)?? Before I address the core of this argument below, let me mention there is the answer to that question in JEP text: JOL would introspect the internal and external object layout; Java code would test that padding really works; etc. It would be a mistake to paint Unsafe as the only use. > So, while there are some things in this JEP that seem quite cool and which I enthusiastically > support, there are some fundamental assumptions -- that field offsets and object addresses should be > accessible to Java code -- that I disagree with. I agree that from the pure Java standpoint, language objects/fields are more or less the platonic ideals of themselves. Nothing is really known about them, except the limited set of their expected behaviors. But we cannot be oblivious that implementation details also matter. I would argue that object/field sizes are also such an implementation detail. Yet, we seem to agree that object/field sizes are good to know. So it follows that the problem here is not object/field sizes being the implementation details. We are able to put fundamental/idealistic assumptions on the side, if we really want it. A funny example of such the implementation details concession is not even JVMTI/Instrumentation, but the core libraries themselves: https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html#SIZE I guess the real question is where to put something that goes beyond the "pure Java" and provides the implementation details. So it could avoid the impression of telling "pure Java" facts? I put prototype methods in Runtime, because that looked like one of the least "pure Java" facilities. I'd be happy to learn some other place where such API can be put :) > Setting aside philosophy and stewardship for a moment, I think what's really going on is that this > JEP is trying to serve two different audiences: those that are happy to have estimates and/or use > the information for making approximate decisions, and those who are interested in low-level hackery > for accessing the Java heap, rather than through `getfield` and `putfield`.? I think if you were to > split this into two JEPs, you would find enthusiastic support for the first, and strong resistance > to the second.? With my JEP author hat on: JEP caters for low-level introspection use case, such as JOL and JAMM. It does not intend to cater for "low-level hackery for accessing the Java heap", and it tries to specifically make the argument that new APIs do not allow this low-level hackery beyond what is possible today and in a foreseeable future. I can see that the JEP can be split in "non-controversial" (sizeOf, deepSizeOf) and "controversial" (addressOf, fieldOffsetOf) parts. For the process overhead reasons, I'd push forward with just one JEP at the moment, though. > To the extent that there is overlap between these groups (e.g., fieldOffsetOf is useful to offline > tools that may be used to estimate layouts, as well as online users who would be tempted to believe > that this is really a field offset), some creativity will be required to keep the first from > becoming an attractive nuisance to the second. I am open for suggestions :) One of the reasons the prototype has RuntimeAddressOf and RuntimeOffsetsOf JVM flags (as much as I hate having another JVM option) is to consider if they can be disabled by default, so online users would have to explicitly opt-in for using these facilities: https://builds.shipilev.net/patch-openjdk-jdk-jep-8249196/src/hotspot/share/runtime/globals.hpp.sdiff.html I do believe the Java API is useful, to enable Java-only libraries like JOL. Otherwise, the argument could be made to make fieldOffsetOf-like data available by turning PrintFieldLayout into product VM flag, and then let JOL parse the output of forked JVM. That's tedious, but doable. addressOf cannot be done like that, because it requires passing the object reference somehow. > So, my feedback is "glass half full" -- I'm happy to see the JEP that provides estimates and such.? > My recommendation is to focus on that half for now. Let me ask the specific question: which APIs do you like, and which do you dislike? I gather you like: public static long sizeOf(Object obj); public static long deepSizeOf(Object obj); public static long deepSizeOf(Object obj, ToLongFunction includeCheck); ...but dislike: public static long addressOf(Object obj); public static long fieldOffsetOf(Field field); ...and it is not clear what is your position on: public static long fieldSizeOf(Field field); -- Thanks, -Aleksey From rkennke at redhat.com Tue Aug 11 10:54:40 2020 From: rkennke at redhat.com (Roman Kennke) Date: Tue, 11 Aug 2020 12:54:40 +0200 Subject: RFC (round 1), JEP draft: Low-level Object layout introspection methods In-Reply-To: <6a9abead-1bc6-336d-b11c-6e6e9ab8983f@redhat.com> References: <6a9abead-1bc6-336d-b11c-6e6e9ab8983f@redhat.com> Message-ID: > > Setting aside philosophy and stewardship for a moment, I think > > what's really going on is that this > > JEP is trying to serve two different audiences: those that are > > happy to have estimates and/or use > > the information for making approximate decisions, and those who are > > interested in low-level hackery > > for accessing the Java heap, rather than through `getfield` and > > `putfield`. I think if you were to > > split this into two JEPs, you would find enthusiastic support for > > the first, and strong resistance > > to the second. > > With my JEP author hat on: JEP caters for low-level introspection use > case, such as JOL and JAMM. It > does not intend to cater for "low-level hackery for accessing the > Java heap", and it tries to > specifically make the argument that new APIs do not allow this low- > level hackery beyond what is > possible today and in a foreseeable future. > > I can see that the JEP can be split in "non-controversial" (sizeOf, > deepSizeOf) and "controversial" > (addressOf, fieldOffsetOf) parts. For the process overhead reasons, > I'd push forward with just one > JEP at the moment, though. I don't actually see much of a problem with addressOf() and fieldOffsetOf() introspection. I can see that it *is* a problem with current Unsafe, that also provides accessors to access and modify object using this information, but such API is not included in this JEP. And without any such method, how "useful" can it be for actual hackery? Ok yes, we *could* perhaps pass this to native code and access the address there, but even that would not reliably work, especially not in the face of concurrently-evacuating GCs which can change the object address at any time. As such, what is returned there are only numbers that the caller needs to interpret in some way as a sort of diagnostic value, but must be prepared for the values to change from one call to the next, or even get the anser 'don't know'. (As as side, there are some mistakes in the JEP text there: "... ways to use this value in by feeding it ..." the "in" there seems too much. "there are guarantees it would not poke around": there are *no* guarantees.) Roman From brian.goetz at oracle.com Tue Aug 11 13:17:56 2020 From: brian.goetz at oracle.com (Brian Goetz) Date: Tue, 11 Aug 2020 09:17:56 -0400 Subject: RFC (round 1), JEP draft: Low-level Object layout introspection methods In-Reply-To: <6a9abead-1bc6-336d-b11c-6e6e9ab8983f@redhat.com> References: <6a9abead-1bc6-336d-b11c-6e6e9ab8983f@redhat.com> Message-ID: <7decc21e-c74e-9e02-c8bf-c93d3713350c@oracle.com> > I think we need to get one thing very straight: these are best-effort informational APIs. I accept that this is the motivation, and for things like `estimateDeepSizeOf`, I think the world will go along with your plan.? On the other hand, the intention of `Unsafe` was that Doug would effectively be the only user, ever, and we see how well that worked out.? So the best of intentions don't always predict future reality, and hence sometimes we need to be cynical jerks.? (At your service!) > But I disagree with this part. I don't think the existence of the best-effort informational APIs If that really described the widespread perception, I would agree with you.? But I simply do not believe there is any way to expose an addressOf method and have it widely accepted as merely "best-effort".? It is a perfect example of an "attractive nuisance" (https://en.wikipedia.org/wiki/Attractive_nuisance_doctrine). Merely erecting a sign that says "no swimming" will not keep the kids out of the pool. > I guess the real question is where to put something that goes beyond the "pure Java" and provides > the implementation details. So it could avoid the impression of telling "pure Java" facts? I put > prototype methods in Runtime, because that looked like one of the least "pure Java" facilities. I'd > be happy to learn some other place where such API can be put :) The obvious first answer is: "not in the JDK."? Even if the JDK layout algorithm is a closely guarded secrete, a fortune teller down the street can surely offer predictions about likely future layouts.? And wary consumers can decide whether or not they want to trust the safety of their applications to such sayers of sooth.? The second answer is: "not in the JDK, yet."? It is quite possible that, when we get farther down the road of making Unsafe unnecessary, new options will be available to us. > With my JEP author hat on: JEP caters for low-level introspection use case, such as JOL and JAMM. It > does not intend to cater for "low-level hackery for accessing the Java heap", and it tries to > specifically make the argument that new APIs do not allow this low-level hackery beyond what is > possible today and in a foreseeable future. I believe that your intentions are pure!?? But we both know that purest of intentions are not enough to avoid trouble. > Let me ask the specific question: which APIs do you like, and which do > you dislike? > I gather you like: > public static long sizeOf(Object obj); > public static long deepSizeOf(Object obj); > public static long deepSizeOf(Object obj, ToLongFunction includeCheck); > > ...but dislike: > public static long addressOf(Object obj); > public static long fieldOffsetOf(Field field); > > ...and it is not clear what is your position on: > public static long fieldSizeOf(Field field); I would prefix all the ones I like with `estimate`, to make it crystal clear.? (There is precedent for this convention in the JDK; see Spliterator.)? I don't see any immediate attractive-nuisance problem with `estimateFieldSize`, which gets more interesting when we get to inline classes, though I'd want to think about it further.? (On the other hand, `estimateFieldSize` encourages a new possibly-incorrect assumption: that all the bits of a field are guaranteed to be contiguous, which is certainly true for today's nine basic types, and true for the prototype of Valhalla, but might not be true forever.) To put it another way, the reason that `deepSizeOf` is unobjectionable is that no one who has thought about the problem in any depth would be tempted to believe it, because almost anyone in the position of tuning cache eviction metrics is aware that this is an impossible problem (even in C -- we might know struct sizes exactly, but we have no idea to what degree pointers are aliased, and that matters a lot for this problem.)? But given that the next-best available cost metrics are atrocious, something merely not-terrible is a big improvement.? On the other hand, I do not believe one could ever make a similar credible argument like this for `addressOf` or `fieldOffset` that "no one would ever try to map this directly to reality."? (That wasn't a challenge.) HTH, -Brian From erik.helin at oracle.com Wed Aug 12 06:54:23 2020 From: erik.helin at oracle.com (Erik Helin) Date: Wed, 12 Aug 2020 08:54:23 +0200 Subject: jdk/jdk repository transitions to Git, GitHub and Skara: September 5 Message-ID: <4a562cb1-0de0-b2b0-9155-f821c0533291@oracle.com> Hi all, We are now getting closer to the jdk/jdk repository [0] transitioning to Git, GitHub and Skara. JEP 357 [0] and JEP 369 [1] were targeted to JDK 16 at the end of May 2020 [2]. It was then also communicated that the jdk/jdk repository would transition "early September 2020" [3]. The exact target date for the transition of the jdk/jdk repository is now set to Saturday September 5, 2020. We aim to complete the transition during the weekend of September 5 - 6, 2020. Starting from September 4 the Mercurial repository for jdk/jdk [0] will become read-only and the Git repository for jdk/jdk [5] will become read-write on Monday September 7. If you are an OpenJDK Author, Committer or Reviewer, then please make sure you that you are ready for the transition by following the "Getting Started" guide on the Skara wiki [7]. In particular, make sure that you associate your GitHub username and OpenJDK username, see the "Getting Started" guide for details. Feel free to try out the new tools and make sure that everything works in the OpenJDK playground repository [8]. For those of you doing backports to jdk-updates repositories there is a Skara CLI tool, git hg-export, that will export commits from an OpenJDK Git repository in a format expected by hg and the OpenJDK Mercurial repositories [9]. A "clean" backport of a Git commit looks like the following: $ git clone https://git.openjdk.java.net/jdk $ git -C jdk hg-export | hg -R /path/to/hg/repo import As part of transitioning the jdk/jdk repository we will also transition the jdk/client repository [6]. There is work ongoing that might result in jdk/client being archived instead of transitioned, but that work is not guaranteed to be done by September 5. We will send out more details on this as we get closer. The jdk/submit [10] repository will not be transitioned, the equivalent functionality is provided by the /test pull request command [11]. There are continuously updated read-only mirrors of the jdk/jdk [5], jdk/client [12] and jdk/sandbox [13] repositories available if you want to create personal forks ahead of the transition. Note that the jdk/jdk15 [14] repository will stay on Mercurial as well as the jdk-updates/jdk15u [15] repository (at least for the time being). If you have any questions just send an email to skara-dev at openjdk.java.net! Thanks, Erik and Robin [0]: https://hg.openjdk.java.net/jdk/jdk [1]: https://openjdk.java.net/jeps/357 [2]: https://openjdk.java.net/jeps/369 [3]: https://mail.openjdk.java.net/pipermail/jdk-dev/2020-May/004335.html [4]: https://mail.openjdk.java.net/pipermail/jdk-dev/2020-May/004322.html [5]: https://github.com/openjdk/jdk [6]: https://hg.openjdk.java.net/jdk/client [7]: https://wiki.openjdk.java.net/display/SKARA/Skara#Skara-GettingStarted [8]: https://github.com/openjdk/playground [9]: https://wiki.openjdk.java.net/display/SKARA/git-hg-export [10]: https://hg.openjdk.java.net/jdk/submit [11]: https://wiki.openjdk.java.net/display/SKARA/Pull+Request+Commands#PullRequestCommands-/test [12]: https://github.com/jdk/client [13]: https://github.com/jdk/jdk-sandbox [14]: https://hg.openjdk.java.net/jdk/jdk15 [15]: https://hg.openjdk.java.net/jdk-updates/jdk15u From sgehwolf at redhat.com Wed Aug 12 07:50:43 2020 From: sgehwolf at redhat.com (Severin Gehwolf) Date: Wed, 12 Aug 2020 09:50:43 +0200 Subject: jdk/jdk repository transitions to Git, GitHub and Skara: September 5 In-Reply-To: <4a562cb1-0de0-b2b0-9155-f821c0533291@oracle.com> References: <4a562cb1-0de0-b2b0-9155-f821c0533291@oracle.com> Message-ID: Hi Erik, On Wed, 2020-08-12 at 08:54 +0200, Erik Helin wrote: > Hi all, > > We are now getting closer to the jdk/jdk repository [0] transitioning to > Git, GitHub and Skara. JEP 357 [0] and JEP 369 [1] were targeted to JDK > 16 at the end of May 2020 [2]. It was then also communicated that the > jdk/jdk repository would transition "early September 2020" [3]. > > The exact target date for the transition of the jdk/jdk repository is > now set to Saturday September 5, 2020. We aim to complete the transition > during the weekend of September 5 - 6, 2020. Starting from September 4 > the Mercurial repository for jdk/jdk [0] will become read-only and the > Git repository for jdk/jdk [5] will become read-write on Monday September 7. > > If you are an OpenJDK Author, Committer or Reviewer, then please make > sure you that you are ready for the transition by following the "Getting > Started" guide on the Skara wiki [7]. In particular, make sure that you > associate your GitHub username and OpenJDK username, see the "Getting > Started" guide for details. Feel free to try out the new tools and make > sure that everything works in the OpenJDK playground repository [8]. > > For those of you doing backports to jdk-updates repositories there is a > Skara CLI tool, git hg-export, that will export commits from an OpenJDK > Git repository in a format expected by hg and the OpenJDK Mercurial > repositories [9]. A "clean" backport of a Git commit looks like the > following: > > $ git clone https://git.openjdk.java.net/jdk > $ git -C jdk hg-export | hg -R /path/to/hg/repo import > > As part of transitioning the jdk/jdk repository we will also transition > the jdk/client repository [6]. There is work ongoing that might result > in jdk/client being archived instead of transitioned, but that work is > not guaranteed to be done by September 5. We will send out more details > on this as we get closer. > > The jdk/submit [10] repository will not be transitioned, the equivalent > functionality is provided by the /test pull request command [11]. > > There are continuously updated read-only mirrors of the jdk/jdk [5], > jdk/client [12] and jdk/sandbox [13] repositories available if you want > to create personal forks ahead of the transition. Note that the > jdk/jdk15 [14] repository will stay on Mercurial as well as the > jdk-updates/jdk15u [15] repository (at least for the time being). > > If you have any questions just send an email to skara-dev at openjdk.java.net! Awesome news. Thanks for the info. Very useful. Keep up the excellent work! Cheers, Severin > Thanks, > Erik and Robin > > [0]: https://hg.openjdk.java.net/jdk/jdk > [1]: https://openjdk.java.net/jeps/357 > [2]: https://openjdk.java.net/jeps/369 > [3]: https://mail.openjdk.java.net/pipermail/jdk-dev/2020-May/004335.html > [4]: https://mail.openjdk.java.net/pipermail/jdk-dev/2020-May/004322.html > [5]: https://github.com/openjdk/jdk > [6]: https://hg.openjdk.java.net/jdk/client > [7]: https://wiki.openjdk.java.net/display/SKARA/Skara#Skara-GettingStarted > [8]: https://github.com/openjdk/playground > [9]: https://wiki.openjdk.java.net/display/SKARA/git-hg-export > [10]: https://hg.openjdk.java.net/jdk/submit > [11]: > https://wiki.openjdk.java.net/display/SKARA/Pull+Request+Commands#PullRequestCommands-/test > [12]: https://github.com/jdk/client > [13]: https://github.com/jdk/jdk-sandbox > [14]: https://hg.openjdk.java.net/jdk/jdk15 > [15]: https://hg.openjdk.java.net/jdk-updates/jdk15u > From erik.helin at oracle.com Wed Aug 12 08:07:29 2020 From: erik.helin at oracle.com (Erik Helin) Date: Wed, 12 Aug 2020 10:07:29 +0200 Subject: jdk/jdk repository transitions to Git, GitHub and Skara: September 5 In-Reply-To: References: <4a562cb1-0de0-b2b0-9155-f821c0533291@oracle.com> Message-ID: On 8/12/20 9:50 AM, Severin Gehwolf wrote: > Hi Erik, > > On Wed, 2020-08-12 at 08:54 +0200, Erik Helin wrote: >> Hi all, >> >> We are now getting closer to the jdk/jdk repository [0] transitioning to >> Git, GitHub and Skara. JEP 357 [0] and JEP 369 [1] were targeted to JDK >> 16 at the end of May 2020 [2]. It was then also communicated that the >> jdk/jdk repository would transition "early September 2020" [3]. >> >> The exact target date for the transition of the jdk/jdk repository is >> now set to Saturday September 5, 2020. We aim to complete the transition >> during the weekend of September 5 - 6, 2020. Starting from September 4 >> the Mercurial repository for jdk/jdk [0] will become read-only and the >> Git repository for jdk/jdk [5] will become read-write on Monday September 7. >> >> If you are an OpenJDK Author, Committer or Reviewer, then please make >> sure you that you are ready for the transition by following the "Getting >> Started" guide on the Skara wiki [7]. In particular, make sure that you >> associate your GitHub username and OpenJDK username, see the "Getting >> Started" guide for details. Feel free to try out the new tools and make >> sure that everything works in the OpenJDK playground repository [8]. >> >> For those of you doing backports to jdk-updates repositories there is a >> Skara CLI tool, git hg-export, that will export commits from an OpenJDK >> Git repository in a format expected by hg and the OpenJDK Mercurial >> repositories [9]. A "clean" backport of a Git commit looks like the >> following: >> >> $ git clone https://git.openjdk.java.net/jdk >> $ git -C jdk hg-export | hg -R /path/to/hg/repo import >> >> As part of transitioning the jdk/jdk repository we will also transition >> the jdk/client repository [6]. There is work ongoing that might result >> in jdk/client being archived instead of transitioned, but that work is >> not guaranteed to be done by September 5. We will send out more details >> on this as we get closer. >> >> The jdk/submit [10] repository will not be transitioned, the equivalent >> functionality is provided by the /test pull request command [11]. >> >> There are continuously updated read-only mirrors of the jdk/jdk [5], >> jdk/client [12] and jdk/sandbox [13] repositories available if you want >> to create personal forks ahead of the transition. Note that the >> jdk/jdk15 [14] repository will stay on Mercurial as well as the >> jdk-updates/jdk15u [15] repository (at least for the time being). >> >> If you have any questions just send an email to skara-dev at openjdk.java.net! > > Awesome news. Thanks for the info. Very useful. Keep up the excellent > work! Thanks Severin for the feedback! Erik > Cheers, > Severin > >> Thanks, >> Erik and Robin >> >> [0]: https://hg.openjdk.java.net/jdk/jdk >> [1]: https://openjdk.java.net/jeps/357 >> [2]: https://openjdk.java.net/jeps/369 >> [3]: https://mail.openjdk.java.net/pipermail/jdk-dev/2020-May/004335.html >> [4]: https://mail.openjdk.java.net/pipermail/jdk-dev/2020-May/004322.html >> [5]: https://github.com/openjdk/jdk >> [6]: https://hg.openjdk.java.net/jdk/client >> [7]: https://wiki.openjdk.java.net/display/SKARA/Skara#Skara-GettingStarted >> [8]: https://github.com/openjdk/playground >> [9]: https://wiki.openjdk.java.net/display/SKARA/git-hg-export >> [10]: https://hg.openjdk.java.net/jdk/submit >> [11]: >> https://wiki.openjdk.java.net/display/SKARA/Pull+Request+Commands#PullRequestCommands-/test >> [12]: https://github.com/jdk/client >> [13]: https://github.com/jdk/jdk-sandbox >> [14]: https://hg.openjdk.java.net/jdk/jdk15 >> [15]: https://hg.openjdk.java.net/jdk-updates/jdk15u >> > From joe.darcy at oracle.com Wed Aug 12 18:57:07 2020 From: joe.darcy at oracle.com (Joe Darcy) Date: Wed, 12 Aug 2020 11:57:07 -0700 Subject: FYI, coming soon new javac lint warning for reliance on default constructors by formal API classes Message-ID: <8a039a39-1f99-9b03-3e71-fec349e758f1@oracle.com> Hello, FYI, a new javac lint warning is out for review for JDK 16, JDK-8071961: "Add javac lint warning when a default constructor is created." [1] As described in JLS section 8.8.9 "Default Constructor" [2], if a class does not declare an explicit constructor, an implicit no-arg constructor is declared and added by the compiler. While a default constructor can be fine for an informal class, the default constructor can be troublesome for more formal APIs. The default constructor does not have javadoc and can be inappropriate for classes not intended for instantiation, such as a class that is only a holder for static items. With some guidance from the JDK code base, the criteria to determine if a class is a formal enough API to merit a warning for reliance on a default constructor is currently: * The class is in a named package and the packaged has an unqualified export from its module AND * The class is public and, if it is a nested class, all of its lexically enclosing types are public too. In particular, a class in a package conditionally exported to only certain modules does *not* generate a warning under the current criteria. In addition, the class must be non-anonymous, not a record, etc. to have a warning generated. The JDK build of most modules enables all warnings and runs with warnings-as-errors. Therefore, before the new lint warning can be enabled for the JDK build, the instances of the conditions triggering the warning have to be addressed in a module or the module needs the warning to be disabled. Through the subtasks of JDK-8250212: "Address reliance on default constructors in the JDK (umbrella)", the instances in most JDK modules have been fixed already. Work is on-going to address the instances in client libraries, see JDK-8250639. Therefore, only a few modules will likely have the warning disabled when the new lint warnings goes in, depending on the timing of the full fix of JDK-8250639. Thanks, -Joe [1] https://mail.openjdk.java.net/pipermail/compiler-dev/2020-July/014782.html [2] https://docs.oracle.com/javase/specs/jls/se14/html/jls-8.html#jls-8.8.9 From alex.buckley at oracle.com Wed Aug 12 19:16:03 2020 From: alex.buckley at oracle.com (Alex Buckley) Date: Wed, 12 Aug 2020 12:16:03 -0700 Subject: Preview APIs in the Java Platform In-Reply-To: References: <0da465e7-82ff-a2c7-a95e-7529fc0d957f@oracle.com> <952661d4-3f1d-2a05-a178-e11b37141cf7@oracle.com> Message-ID: Hi Jay, Subsequent to my August 2019 mail, I sent a mail in September 2019 that disavowed use of a Java SE annotation for indicating APIs associated with preview language features: https://mail.openjdk.java.net/pipermail/jdk-dev/2019-September/003325.html Since then, we have seen "APIs associated with preview language features" be subsumed by "preview APIs". How is the status of a preview API indicated? According to JEP 12's "Specifications of Preview Features" section: - "Preview APIs are specified in the javadoc of the API Specification for Java SE, and must clearly indicate their non-final, impermanent status." - "The Umbrella JSR also provides a definitive list of the preview API elements in the release." Also: - "In Java SE 14, prior to the introduction of preview APIs, the JLS enumerated the "essential" API elements that were unavoidably associated with preview language and VM features. The JLS made it a compile-time error (respectively, a warning) to use such elements if preview features were disabled (respectively, enabled). This arrangement was the forerunner of how the JLS treats use of preview APIs, ***with the exception that preview APIs are enumerated in the Java SE Platform Specification rather than the JLS.***" Exactly how the JLS treats use of preview APIs is covered by https://bugs.openjdk.java.net/browse/JDK-8249554. How does a compiler know which preview APIs are enumerated in the Java SE Platform Specification? That's up to the compiler. javac's technique is to recognize APIs annotated with a JDK-internal annotation. (@jdk.internal.PreviewFeature in JDK 14 and 15, but moved to a subpackage of jdk.internal in 16; the details will be clear when Jan opens the code on compiler-dev.) Alex On 8/12/2020 4:24 AM, Jayaprakash Arthanareeswaran wrote: > Hi Alex, > > As per the mail [1] you sent way back in 2019, you mentioned that the > preview APIs will be marked > with @java.lang.annotation.PreviewFeature. However, in JDK 15, the APIs > appear to be annotated > with the internal annotation @jdk.internal.PreviewFeature. > > Is this still under discussion and likely to change in future? > > Regards, > Jay > > [1] http://mail.openjdk.java.net/pipermail/jdk-dev/2019-August/003234.html From Alan.Bateman at oracle.com Thu Aug 13 08:48:10 2020 From: Alan.Bateman at oracle.com (Alan Bateman) Date: Thu, 13 Aug 2020 09:48:10 +0100 Subject: RFC (round 1), JEP draft: Low-level Object layout introspection methods In-Reply-To: <787faac2-f156-5da1-4b82-e9318d25d6da@redhat.com> References: <787faac2-f156-5da1-4b82-e9318d25d6da@redhat.com> Message-ID: <52f96b1a-dca8-7b79-db63-41a6828110e2@oracle.com> On 11/08/2020 11:22, Aleksey Shipilev wrote: > : > I don't quite see how moving JOL to JDK helps. I added that alternative after your initial review, > so please help me out here? > > If we move the JOL in its current form, then all the new APIs would be accessible through JOL. In > other words, it would be the same API with extra steps. Which means all arguments about exposing > offsets, addresses and apply there as well. If we are talking about moving JOL and then disabling > some of its features (e.g. getting offsets and addresses), this is not _really_ moving JOL, but > rather a shallow version of it. > > My argument about backports and supporting previous JDK still stands, and here is why. Currently, > JOL supports JDK 6..15. Every little bug that is found in JOL is automatically "released" for every > supported JDK version. If JOL is inside JDK, that means those bugfixes would need to be backported > to previous JDK releases. Basically, that asks JOL maintainers (well, me) to maintain several forked > versions of JOL. You can counter that with saying that only the latest version matters, but this is > where we would disagree philosophically. > I should have been clearer. I didn't suggest JOL in its current form. Instead I think it is reasonable to ask if it would be useful for the JDK to include a JOL-like tool. No exported API beyond benign methods to provide estimate of size. It would be kept in sync with HotSpot so as layouts change or variant layouts are introduced. It would at least be useful when working on the JDK. That seems a lot more maintainable (to me anyway) than trying to keep a tool outside of the JDK in sync with interesting or unknown layout changes in the future. It's a bit like SA in that regard. -Alan From erik.helin at oracle.com Thu Aug 13 19:45:37 2020 From: erik.helin at oracle.com (Erik Helin) Date: Thu, 13 Aug 2020 21:45:37 +0200 Subject: RFR: 8251551: Use .md filename extension for README Message-ID: <9d7bbc97-fb73-39ea-a39c-ab1f795cd52e@oracle.com> Hi all, please review this patch that adds the .md filename extension to the README file. The README already utilizes the Markdown [0] markup language even though it doesn't use the .md filename extension. I also tweaked the Markdown syntax slightly, I primarily made use of Markdown for the links. Source code forges that support rendering README files (e.g. GitLab, GitHub, BitBucket, SourceHut, Gitea) will now display the README a bit better. For an example, see my personal fork [1] and compare it with how the current README is displayed [2]. Issue: https://bugs.openjdk.java.net/browse/JDK-8251551 Webrev: http://cr.openjdk.java.net/~ehelin/8251551/00/ Thanks, Erik [0]: https://en.wikipedia.org/wiki/Markdown [1]: https://github.com/edvbld/jdk/tree/readme [2]: https://git.openjdk.java.net/jdk From erik.helin at oracle.com Thu Aug 13 19:54:10 2020 From: erik.helin at oracle.com (Erik Helin) Date: Thu, 13 Aug 2020 21:54:10 +0200 Subject: RFR: 8251552: Add minimal CONTRIBUTING.md file Message-ID: <5a644974-8ac6-28e9-ddb9-5c02d83462af@oracle.com> Hi all, please review this patch that adds a minimal CONTRIBUTING.md file to the repository. Many source code forges (e.g. GitLab, GitHub, BitBucket) show the CONTRIBUTING.md file when a newcomer makes their first contribution. Since we already have an OpenJDK developer's guide [0], I've chosen to go with a minimal CONTRIBUTING.md file that only refers the reader to the developer's guide. Issue: https://bugs.openjdk.java.net/browse/JDK-8251552 Webrev: https://cr.openjdk.java.net/~ehelin/8251552/00/ Thanks, Erik [0]: https://openjdk.java.net/guide/ From joe.darcy at oracle.com Thu Aug 13 20:24:31 2020 From: joe.darcy at oracle.com (Joe Darcy) Date: Thu, 13 Aug 2020 13:24:31 -0700 Subject: RFR: 8251551: Use .md filename extension for README In-Reply-To: <9d7bbc97-fb73-39ea-a39c-ab1f795cd52e@oracle.com> References: <9d7bbc97-fb73-39ea-a39c-ab1f795cd52e@oracle.com> Message-ID: Looks fine Erik; thanks, -Joe On 8/13/2020 12:45 PM, Erik Helin wrote: > Hi all, > > please review this patch that adds the .md filename extension to the > README file. The README already utilizes the Markdown [0] markup > language even though it doesn't use the .md filename extension. > > I also tweaked the Markdown syntax slightly, I primarily made use of > Markdown for the links. Source code forges that support rendering > README files (e.g. GitLab, GitHub, BitBucket, SourceHut, Gitea) will > now display the README a bit better. For an example, see my personal > fork [1] and compare it with how the current README is displayed [2]. > > Issue: > https://bugs.openjdk.java.net/browse/JDK-8251551 > > Webrev: > http://cr.openjdk.java.net/~ehelin/8251551/00/ > > Thanks, > Erik > > [0]: https://en.wikipedia.org/wiki/Markdown > [1]: https://github.com/edvbld/jdk/tree/readme > [2]: https://git.openjdk.java.net/jdk From iris.clark at oracle.com Thu Aug 13 21:11:38 2020 From: iris.clark at oracle.com (Iris Clark) Date: Thu, 13 Aug 2020 21:11:38 +0000 (UTC) Subject: RFR: 8251552: Add minimal CONTRIBUTING.md file In-Reply-To: <5a644974-8ac6-28e9-ddb9-5c02d83462af@oracle.com> References: <5a644974-8ac6-28e9-ddb9-5c02d83462af@oracle.com> Message-ID: <2bbf99d2-5c3b-490d-8fc4-a4ce57102f41@default> Hi, Erik. Shouldn't CONTRIBUTING.md reference this link instead? https://openjdk.java.net/contribute/ It contains preliminary information for new people to begin making contributions to the JDK Project. Perhaps I'm not understanding the audience for CONTRIBUTING.md? Thanks, Iris -----Original Message----- From: Erik Helin Sent: Thursday, August 13, 2020 12:54 PM To: jdk-dev at openjdk.java.net Subject: RFR: 8251552: Add minimal CONTRIBUTING.md file Hi all, please review this patch that adds a minimal CONTRIBUTING.md file to the repository. Many source code forges (e.g. GitLab, GitHub, BitBucket) show the CONTRIBUTING.md file when a newcomer makes their first contribution. Since we already have an OpenJDK developer's guide [0], I've chosen to go with a minimal CONTRIBUTING.md file that only refers the reader to the developer's guide. Issue: https://bugs.openjdk.java.net/browse/JDK-8251552 Webrev: https://cr.openjdk.java.net/~ehelin/8251552/00/ Thanks, Erik [0]: https://openjdk.java.net/guide/ From erik.helin at oracle.com Fri Aug 14 04:57:19 2020 From: erik.helin at oracle.com (Erik Helin) Date: Fri, 14 Aug 2020 06:57:19 +0200 Subject: RFR: 8251551: Use .md filename extension for README In-Reply-To: References: <9d7bbc97-fb73-39ea-a39c-ab1f795cd52e@oracle.com> Message-ID: <0a715886-824e-087f-7aa1-b83032192217@oracle.com> On 8/13/20 10:24 PM, Joe Darcy wrote: > Looks fine Erik; thanks, Thanks for reviewing! Erik > -Joe > > On 8/13/2020 12:45 PM, Erik Helin wrote: >> Hi all, >> >> please review this patch that adds the .md filename extension to the >> README file. The README already utilizes the Markdown [0] markup >> language even though it doesn't use the .md filename extension. >> >> I also tweaked the Markdown syntax slightly, I primarily made use of >> Markdown for the links. Source code forges that support rendering >> README files (e.g. GitLab, GitHub, BitBucket, SourceHut, Gitea) will >> now display the README a bit better. For an example, see my personal >> fork [1] and compare it with how the current README is displayed [2]. >> >> Issue: >> https://bugs.openjdk.java.net/browse/JDK-8251551 >> >> Webrev: >> http://cr.openjdk.java.net/~ehelin/8251551/00/ >> >> Thanks, >> Erik >> >> [0]: https://en.wikipedia.org/wiki/Markdown >> [1]: https://github.com/edvbld/jdk/tree/readme >> [2]: https://git.openjdk.java.net/jdk From erik.helin at oracle.com Fri Aug 14 05:40:45 2020 From: erik.helin at oracle.com (Erik Helin) Date: Fri, 14 Aug 2020 07:40:45 +0200 Subject: RFR: 8251552: Add minimal CONTRIBUTING.md file In-Reply-To: <2bbf99d2-5c3b-490d-8fc4-a4ce57102f41@default> References: <5a644974-8ac6-28e9-ddb9-5c02d83462af@oracle.com> <2bbf99d2-5c3b-490d-8fc4-a4ce57102f41@default> Message-ID: <3ffafa05-c168-f7cf-d43f-3276858980cb@oracle.com> On 8/13/20 11:11 PM, Iris Clark wrote: > Hi, Erik. Hi Iris, thanks for reviewing! On 8/13/20 11:11 PM, Iris Clark wrote: > Shouldn't CONTRIBUTING.md reference this link instead? > > https://openjdk.java.net/contribute/ > > It contains preliminary information for new people to begin making contributions to the JDK Project. I agree, that seems better than just linking to the developer's guide. Please see updated webrevs below: - full: https://cr.openjdk.java.net/~ehelin/8251552/01/ - incremental: https://cr.openjdk.java.net/~ehelin/8251552/00-01/ On 8/13/20 11:11 PM, Iris Clark wrote: > Perhaps I'm not understanding the audience for CONTRIBUTING.md? It seems like you understand it very well given your great feedback in this review :) Thanks, Erik > Thanks, > Iris > > -----Original Message----- > From: Erik Helin > Sent: Thursday, August 13, 2020 12:54 PM > To: jdk-dev at openjdk.java.net > Subject: RFR: 8251552: Add minimal CONTRIBUTING.md file > > Hi all, > > please review this patch that adds a minimal CONTRIBUTING.md file to the repository. Many source code forges (e.g. GitLab, GitHub, BitBucket) show the CONTRIBUTING.md file when a newcomer makes their first contribution. Since we already have an OpenJDK developer's guide [0], I've chosen to go with a minimal CONTRIBUTING.md file that only refers the reader to the developer's guide. > > Issue: > https://bugs.openjdk.java.net/browse/JDK-8251552 > > Webrev: > https://cr.openjdk.java.net/~ehelin/8251552/00/ > > Thanks, > Erik > > [0]: https://openjdk.java.net/guide/ > From snazy at gmx.de Fri Aug 14 06:56:08 2020 From: snazy at gmx.de (Robert Stupp) Date: Fri, 14 Aug 2020 08:56:08 +0200 Subject: RFR: 8251552: Add minimal CONTRIBUTING.md file In-Reply-To: <3ffafa05-c168-f7cf-d43f-3276858980cb@oracle.com> References: <5a644974-8ac6-28e9-ddb9-5c02d83462af@oracle.com> <2bbf99d2-5c3b-490d-8fc4-a4ce57102f41@default> <3ffafa05-c168-f7cf-d43f-3276858980cb@oracle.com> Message-ID: There's a `Contributing` section at the end of doc/building.[md|html] with some more information. Maybe just copy/move that section to CONTRIBUTING.md? On Fri, 2020-08-14 at 07:40 +0200, Erik Helin wrote: > On 8/13/20 11:11 PM, Iris Clark wrote: > > Hi, Erik. > > Hi Iris, > > thanks for reviewing! > > On 8/13/20 11:11 PM, Iris Clark wrote: > > Shouldn't CONTRIBUTING.md reference this link instead? > > > > https://openjdk.java.net/contribute/ > > > > It contains preliminary information for new people to begin making > > contributions to the JDK Project. > > I agree, that seems better than just linking to the developer's > guide. > Please see updated webrevs below: > > - full: https://cr.openjdk.java.net/~ehelin/8251552/01/ > - incremental: https://cr.openjdk.java.net/~ehelin/8251552/00-01/ > > On 8/13/20 11:11 PM, Iris Clark wrote: > > Perhaps I'm not understanding the audience for CONTRIBUTING.md? > > It seems like you understand it very well given your great feedback > in > this review :) > > Thanks, > Erik > > > Thanks, > > Iris > > > > -----Original Message----- > > From: Erik Helin > > Sent: Thursday, August 13, 2020 12:54 PM > > To: jdk-dev at openjdk.java.net > > Subject: RFR: 8251552: Add minimal CONTRIBUTING.md file > > > > Hi all, > > > > please review this patch that adds a minimal CONTRIBUTING.md file > > to the repository. Many source code forges (e.g. GitLab, GitHub, > > BitBucket) show the CONTRIBUTING.md file when a newcomer makes > > their first contribution. Since we already have an OpenJDK > > developer's guide [0], I've chosen to go with a minimal > > CONTRIBUTING.md file that only refers the reader to the developer's > > guide. > > > > Issue: > > https://bugs.openjdk.java.net/browse/JDK-8251552 > > > > Webrev: > > https://cr.openjdk.java.net/~ehelin/8251552/00/ > > > > Thanks, > > Erik > > > > [0]: https://openjdk.java.net/guide/ > > -- Robert -- Robert Stupp @snazy From erik.helin at oracle.com Fri Aug 14 07:07:56 2020 From: erik.helin at oracle.com (Erik Helin) Date: Fri, 14 Aug 2020 09:07:56 +0200 Subject: RFR: 8251552: Add minimal CONTRIBUTING.md file In-Reply-To: References: <5a644974-8ac6-28e9-ddb9-5c02d83462af@oracle.com> <2bbf99d2-5c3b-490d-8fc4-a4ce57102f41@default> <3ffafa05-c168-f7cf-d43f-3276858980cb@oracle.com> Message-ID: On 8/14/20 8:56 AM, Robert Stupp wrote: > There's a `Contributing` section at the end of doc/building.[md|html] > with some more information. Maybe just copy/move that section to > CONTRIBUTING.md? I would prefer to not scatter documentation in multiple places, which is why I went for a minimal CONTRIBUTING.md file that just refers to existing documentation. Thanks, Erik > On Fri, 2020-08-14 at 07:40 +0200, Erik Helin wrote: >> On 8/13/20 11:11 PM, Iris Clark wrote: >>> Hi, Erik. >> >> Hi Iris, >> >> thanks for reviewing! >> >> On 8/13/20 11:11 PM, Iris Clark wrote: >>> Shouldn't CONTRIBUTING.md reference this link instead? >>> >>> https://openjdk.java.net/contribute/ >>> >>> It contains preliminary information for new people to begin making >>> contributions to the JDK Project. >> >> I agree, that seems better than just linking to the developer's >> guide. >> Please see updated webrevs below: >> >> - full: https://cr.openjdk.java.net/~ehelin/8251552/01/ >> - incremental: https://cr.openjdk.java.net/~ehelin/8251552/00-01/ >> >> On 8/13/20 11:11 PM, Iris Clark wrote: >>> Perhaps I'm not understanding the audience for CONTRIBUTING.md? >> >> It seems like you understand it very well given your great feedback >> in >> this review :) >> >> Thanks, >> Erik >> >>> Thanks, >>> Iris >>> >>> -----Original Message----- >>> From: Erik Helin >>> Sent: Thursday, August 13, 2020 12:54 PM >>> To: jdk-dev at openjdk.java.net >>> Subject: RFR: 8251552: Add minimal CONTRIBUTING.md file >>> >>> Hi all, >>> >>> please review this patch that adds a minimal CONTRIBUTING.md file >>> to the repository. Many source code forges (e.g. GitLab, GitHub, >>> BitBucket) show the CONTRIBUTING.md file when a newcomer makes >>> their first contribution. Since we already have an OpenJDK >>> developer's guide [0], I've chosen to go with a minimal >>> CONTRIBUTING.md file that only refers the reader to the developer's >>> guide. >>> >>> Issue: >>> https://bugs.openjdk.java.net/browse/JDK-8251552 >>> >>> Webrev: >>> https://cr.openjdk.java.net/~ehelin/8251552/00/ >>> >>> Thanks, >>> Erik >>> >>> [0]: https://openjdk.java.net/guide/ >>> > -- > Robert > > -- > Robert Stupp > @snazy > From magnus.ihse.bursie at oracle.com Fri Aug 14 09:43:46 2020 From: magnus.ihse.bursie at oracle.com (Magnus Ihse Bursie) Date: Fri, 14 Aug 2020 11:43:46 +0200 Subject: RFR: 8251551: Use .md filename extension for README In-Reply-To: <9d7bbc97-fb73-39ea-a39c-ab1f795cd52e@oracle.com> References: <9d7bbc97-fb73-39ea-a39c-ab1f795cd52e@oracle.com> Message-ID: <8791ec6b-7b5c-3864-b0f8-9841148d227e@oracle.com> Hi Erik, On 2020-08-13 21:45, Erik Helin wrote: > Hi all, > > please review this patch that adds the .md filename extension to the > README file. The README already utilizes the Markdown [0] markup > language even though it doesn't use the .md filename extension. > > I also tweaked the Markdown syntax slightly, I primarily made use of > Markdown for the links. Source code forges that support rendering > README files (e.g. GitLab, GitHub, BitBucket, SourceHut, Gitea) will > now display the README a bit better. For an example, see my personal > fork [1] and compare it with how the current README is displayed [2]. > > Issue: > https://bugs.openjdk.java.net/browse/JDK-8251551 > > Webrev: > http://cr.openjdk.java.net/~ehelin/8251551/00/ Thank you for doing this. I've been thinking about fixing it for quite some time. :) I'm happy to see that you included the intended perma-link to the online html version of the build instructions, https://openjdk.java.net/groups/build/doc/building.html. However, if feels a bit sneaky to point the link to a completely different place than the human-readable description indicates. I'd be a bit upset if I followed such a link and it led me completely elsewhere, even if that was a page I really wanted to see. When I wrote the original README, the only use-case I had in mind was for someone to have checked out the code locally, not someone seeing it as a project description on Github. So I'd suggest a change more along these lines: --- For build instructions, please see the [online documentation](https://openjdk.java.net/groups/build/doc/building.html), or either of these files: ?- [doc/building.html](doc/building.html) (html version) ?- [doc/building.md](doc/building.md) (markdown version) --- And possibly even without the link to the doc/building.* files; at least in github this works not so good for html so it might make a bad impression if someone tries to follow them. (With reservation that I just wrote it in my mail client, and didn't check the markdown for correctness.) /Magnus > > Thanks, > Erik > > [0]: https://en.wikipedia.org/wiki/Markdown > [1]: https://github.com/edvbld/jdk/tree/readme > [2]: https://git.openjdk.java.net/jdk From magnus.ihse.bursie at oracle.com Fri Aug 14 09:46:35 2020 From: magnus.ihse.bursie at oracle.com (Magnus Ihse Bursie) Date: Fri, 14 Aug 2020 11:46:35 +0200 Subject: RFR: 8251552: Add minimal CONTRIBUTING.md file In-Reply-To: References: <5a644974-8ac6-28e9-ddb9-5c02d83462af@oracle.com> <2bbf99d2-5c3b-490d-8fc4-a4ce57102f41@default> <3ffafa05-c168-f7cf-d43f-3276858980cb@oracle.com> Message-ID: <4e07362e-6e87-0a80-e37e-5309edec2a46@oracle.com> On 2020-08-14 08:56, Robert Stupp wrote: > There's a `Contributing` section at the end of doc/building.[md|html] > with some more information. Maybe just copy/move that section to > CONTRIBUTING.md? It doesn't contain anything else of real substance, it's just a wordy way of pointing folks to https://openjdk.java.net/contribute/. :-) Erik: Second revision looks good. Thanks for bringing us up to modern defaults! :) /Magnus > > On Fri, 2020-08-14 at 07:40 +0200, Erik Helin wrote: >> On 8/13/20 11:11 PM, Iris Clark wrote: >>> Hi, Erik. >> Hi Iris, >> >> thanks for reviewing! >> >> On 8/13/20 11:11 PM, Iris Clark wrote: >>> Shouldn't CONTRIBUTING.md reference this link instead? >>> >>> https://openjdk.java.net/contribute/ >>> >>> It contains preliminary information for new people to begin making >>> contributions to the JDK Project. >> I agree, that seems better than just linking to the developer's >> guide. >> Please see updated webrevs below: >> >> - full: https://cr.openjdk.java.net/~ehelin/8251552/01/ >> - incremental: https://cr.openjdk.java.net/~ehelin/8251552/00-01/ >> >> On 8/13/20 11:11 PM, Iris Clark wrote: >>> Perhaps I'm not understanding the audience for CONTRIBUTING.md? >> It seems like you understand it very well given your great feedback >> in >> this review :) >> >> Thanks, >> Erik >> >>> Thanks, >>> Iris >>> >>> -----Original Message----- >>> From: Erik Helin >>> Sent: Thursday, August 13, 2020 12:54 PM >>> To: jdk-dev at openjdk.java.net >>> Subject: RFR: 8251552: Add minimal CONTRIBUTING.md file >>> >>> Hi all, >>> >>> please review this patch that adds a minimal CONTRIBUTING.md file >>> to the repository. Many source code forges (e.g. GitLab, GitHub, >>> BitBucket) show the CONTRIBUTING.md file when a newcomer makes >>> their first contribution. Since we already have an OpenJDK >>> developer's guide [0], I've chosen to go with a minimal >>> CONTRIBUTING.md file that only refers the reader to the developer's >>> guide. >>> >>> Issue: >>> https://bugs.openjdk.java.net/browse/JDK-8251552 >>> >>> Webrev: >>> https://cr.openjdk.java.net/~ehelin/8251552/00/ >>> >>> Thanks, >>> Erik >>> >>> [0]: https://openjdk.java.net/guide/ >>> > -- > Robert > > -- > Robert Stupp > @snazy > From erik.helin at oracle.com Fri Aug 14 10:56:30 2020 From: erik.helin at oracle.com (Erik Helin) Date: Fri, 14 Aug 2020 12:56:30 +0200 Subject: RFR: 8251552: Add minimal CONTRIBUTING.md file In-Reply-To: <4e07362e-6e87-0a80-e37e-5309edec2a46@oracle.com> References: <5a644974-8ac6-28e9-ddb9-5c02d83462af@oracle.com> <2bbf99d2-5c3b-490d-8fc4-a4ce57102f41@default> <3ffafa05-c168-f7cf-d43f-3276858980cb@oracle.com> <4e07362e-6e87-0a80-e37e-5309edec2a46@oracle.com> Message-ID: On 8/14/20 11:46 AM, Magnus Ihse Bursie wrote: > On 2020-08-14 08:56, Robert Stupp wrote: >> There's a `Contributing` section at the end of doc/building.[md|html] >> with some more information. Maybe just copy/move that section to >> CONTRIBUTING.md? > It doesn't contain anything else of real substance, it's just a wordy > way of pointing folks to https://openjdk.java.net/contribute/. :-) > > Erik: Second revision looks good. Thanks for bringing us up to modern > defaults! :) Thanks Magnus for reviewing! Erik > /Magnus >> >> On Fri, 2020-08-14 at 07:40 +0200, Erik Helin wrote: >>> On 8/13/20 11:11 PM, Iris Clark wrote: >>>> Hi, Erik. >>> Hi Iris, >>> >>> thanks for reviewing! >>> >>> On 8/13/20 11:11 PM, Iris Clark wrote: >>>> Shouldn't CONTRIBUTING.md reference this link instead? >>>> >>>> ????? https://openjdk.java.net/contribute/ >>>> >>>> It contains preliminary information for new people to begin making >>>> contributions to the JDK Project. >>> I agree, that seems better than just linking to the developer's >>> guide. >>> Please see updated webrevs below: >>> >>> - full: https://cr.openjdk.java.net/~ehelin/8251552/01/ >>> - incremental: https://cr.openjdk.java.net/~ehelin/8251552/00-01/ >>> >>> On 8/13/20 11:11 PM, Iris Clark wrote: >>>> Perhaps I'm not understanding the audience for CONTRIBUTING.md? >>> It seems like you understand it very well given your great feedback >>> in >>> this review :) >>> >>> Thanks, >>> Erik >>> >>>> Thanks, >>>> Iris >>>> >>>> -----Original Message----- >>>> From: Erik Helin >>>> Sent: Thursday, August 13, 2020 12:54 PM >>>> To: jdk-dev at openjdk.java.net >>>> Subject: RFR: 8251552: Add minimal CONTRIBUTING.md file >>>> >>>> Hi all, >>>> >>>> please review this patch that adds a minimal CONTRIBUTING.md file >>>> to the repository. Many source code forges (e.g. GitLab, GitHub, >>>> BitBucket) show the CONTRIBUTING.md file when a newcomer makes >>>> their first contribution. Since we already have an OpenJDK >>>> developer's guide [0], I've chosen to go with a minimal >>>> CONTRIBUTING.md file that only refers the reader to the developer's >>>> guide. >>>> >>>> Issue: >>>> https://bugs.openjdk.java.net/browse/JDK-8251552 >>>> >>>> Webrev: >>>> https://cr.openjdk.java.net/~ehelin/8251552/00/ >>>> >>>> Thanks, >>>> Erik >>>> >>>> [0]: https://openjdk.java.net/guide/ >>>> >> -- >> Robert >> >> -- >> Robert Stupp >> @snazy >> > From erik.helin at oracle.com Fri Aug 14 11:57:18 2020 From: erik.helin at oracle.com (Erik Helin) Date: Fri, 14 Aug 2020 13:57:18 +0200 Subject: RFR: 8251551: Use .md filename extension for README In-Reply-To: <8791ec6b-7b5c-3864-b0f8-9841148d227e@oracle.com> References: <9d7bbc97-fb73-39ea-a39c-ab1f795cd52e@oracle.com> <8791ec6b-7b5c-3864-b0f8-9841148d227e@oracle.com> Message-ID: <519bd32a-54d3-2f3e-fb7e-dd50405dd1de@oracle.com> On 8/14/20 11:43 AM, Magnus Ihse Bursie wrote: > When I wrote the original README, the only use-case I had in mind was > for someone to have checked out the code locally, not someone seeing it > as a project description on Github. So I'd suggest a change more along > these lines: > --- > For build instructions, please see the [online > documentation](https://openjdk.java.net/groups/build/doc/building.html), > or either of these files: > > ?- [doc/building.html](doc/building.html) (html version) > ?- [doc/building.md](doc/building.md) (markdown version) > --- Thanks for reviewing Magnus! I agree with your suggestion, please see updated webrevs below: - full: https://cr.openjdk.java.net/~ehelin/8251551/01/ - incremental: https://cr.openjdk.java.net/~ehelin/8251551/00-01/ You can also see a rendered version of the README.md file in my personal fork [0]. Thanks, Erik [0]: https://github.com/edvbld/jdk/blob/readme/README.md From magnus.ihse.bursie at oracle.com Fri Aug 14 12:24:58 2020 From: magnus.ihse.bursie at oracle.com (Magnus Ihse Bursie) Date: Fri, 14 Aug 2020 14:24:58 +0200 Subject: RFR: 8251551: Use .md filename extension for README In-Reply-To: <519bd32a-54d3-2f3e-fb7e-dd50405dd1de@oracle.com> References: <9d7bbc97-fb73-39ea-a39c-ab1f795cd52e@oracle.com> <8791ec6b-7b5c-3864-b0f8-9841148d227e@oracle.com> <519bd32a-54d3-2f3e-fb7e-dd50405dd1de@oracle.com> Message-ID: <1acce8c6-2921-e9a5-7edc-dd7d1421a76f@oracle.com> On 2020-08-14 13:57, Erik Helin wrote: > On 8/14/20 11:43 AM, Magnus Ihse Bursie wrote: >> When I wrote the original README, the only use-case I had in mind was >> for someone to have checked out the code locally, not someone seeing >> it as a project description on Github. So I'd suggest a change more >> along these lines: >> --- >> For build instructions, please see the [online >> documentation](https://openjdk.java.net/groups/build/doc/building.html), >> or either of these files: >> >> ??- [doc/building.html](doc/building.html) (html version) >> ??- [doc/building.md](doc/building.md) (markdown version) >> --- > > Thanks for reviewing Magnus! I agree with your suggestion, please see > updated webrevs below: > > - full: https://cr.openjdk.java.net/~ehelin/8251551/01/ > - incremental: https://cr.openjdk.java.net/~ehelin/8251551/00-01/ Purrrr-fect! :) Thanks for doing this. /Magnus > > You can also see a rendered version of the README.md file in my > personal fork [0]. > > Thanks, > Erik > > [0]: https://github.com/edvbld/jdk/blob/readme/README.md From iris.clark at oracle.com Fri Aug 14 15:19:58 2020 From: iris.clark at oracle.com (Iris Clark) Date: Fri, 14 Aug 2020 15:19:58 +0000 (UTC) Subject: RFR: 8251552: Add minimal CONTRIBUTING.md file In-Reply-To: <3ffafa05-c168-f7cf-d43f-3276858980cb@oracle.com> References: <5a644974-8ac6-28e9-ddb9-5c02d83462af@oracle.com> <2bbf99d2-5c3b-490d-8fc4-a4ce57102f41@default> <3ffafa05-c168-f7cf-d43f-3276858980cb@oracle.com> Message-ID: Hi, Erik. >- full: https://cr.openjdk.java.net/~ehelin/8251552/01/ >- incremental: https://cr.openjdk.java.net/~ehelin/8251552/00-01/ This revised version referencing only ojn:contribute looks good. Thank you! Iris From erik.helin at oracle.com Fri Aug 14 15:24:56 2020 From: erik.helin at oracle.com (Erik Helin) Date: Fri, 14 Aug 2020 17:24:56 +0200 Subject: RFR: 8251552: Add minimal CONTRIBUTING.md file In-Reply-To: References: <5a644974-8ac6-28e9-ddb9-5c02d83462af@oracle.com> <2bbf99d2-5c3b-490d-8fc4-a4ce57102f41@default> <3ffafa05-c168-f7cf-d43f-3276858980cb@oracle.com> Message-ID: <687bab50-9471-22e5-338b-c38323f9fa0a@oracle.com> On 8/14/20 5:19 PM, Iris Clark wrote: > Hi, Erik. > >> - full: https://cr.openjdk.java.net/~ehelin/8251552/01/ >> - incremental: https://cr.openjdk.java.net/~ehelin/8251552/00-01/ > > This revised version referencing only ojn:contribute looks good. Thanks Iris for reviewing! Erik > Thank you! > Iris From mark.reinhold at oracle.com Fri Aug 14 18:07:58 2020 From: mark.reinhold at oracle.com (mark.reinhold at oracle.com) Date: Fri, 14 Aug 2020 11:07:58 -0700 Subject: RFR: 8251551: Use .md filename extension for README In-Reply-To: <519bd32a-54d3-2f3e-fb7e-dd50405dd1de@oracle.com> References: <9d7bbc97-fb73-39ea-a39c-ab1f795cd52e@oracle.com> <8791ec6b-7b5c-3864-b0f8-9841148d227e@oracle.com> <519bd32a-54d3-2f3e-fb7e-dd50405dd1de@oracle.com> Message-ID: <20200814110758.361113313@eggemoggin.niobe.net> 2020/8/14 4:57:18 -0700, erik.helin at oracle.com: > On 8/14/20 11:43 AM, Magnus Ihse Bursie wrote: >> When I wrote the original README, the only use-case I had in mind was >> for someone to have checked out the code locally, not someone seeing it >> as a project description on Github. So I'd suggest a change more along >> these lines: >> --- >> For build instructions, please see the [online >> documentation](https://openjdk.java.net/groups/build/doc/building.html), >> or either of these files: >> >> - [doc/building.html](doc/building.html) (html version) >> - [doc/building.md](doc/building.md) (markdown version) >> --- > > Thanks for reviewing Magnus! I agree with your suggestion, please see > updated webrevs below: > > - full: https://cr.openjdk.java.net/~ehelin/8251551/01/ > - incremental: https://cr.openjdk.java.net/~ehelin/8251551/00-01/ > > You can also see a rendered version of the README.md file in my personal > fork [0]. There?s an extra comma in there. s/For build instructions, please/For build instructions please see/ Otherwise, looks good. - Mark From erik.helin at oracle.com Sat Aug 15 09:52:01 2020 From: erik.helin at oracle.com (Erik Helin) Date: Sat, 15 Aug 2020 11:52:01 +0200 Subject: RFR: 8251551: Use .md filename extension for README In-Reply-To: <20200814110758.361113313@eggemoggin.niobe.net> References: <9d7bbc97-fb73-39ea-a39c-ab1f795cd52e@oracle.com> <8791ec6b-7b5c-3864-b0f8-9841148d227e@oracle.com> <519bd32a-54d3-2f3e-fb7e-dd50405dd1de@oracle.com> <20200814110758.361113313@eggemoggin.niobe.net> Message-ID: On 8/14/20 8:07 PM, mark.reinhold at oracle.com wrote: > 2020/8/14 4:57:18 -0700, erik.helin at oracle.com: >> On 8/14/20 11:43 AM, Magnus Ihse Bursie wrote: >>> When I wrote the original README, the only use-case I had in mind was >>> for someone to have checked out the code locally, not someone seeing it >>> as a project description on Github. So I'd suggest a change more along >>> these lines: >>> --- >>> For build instructions, please see the [online >>> documentation](https://openjdk.java.net/groups/build/doc/building.html), >>> or either of these files: >>> >>> - [doc/building.html](doc/building.html) (html version) >>> - [doc/building.md](doc/building.md) (markdown version) >>> --- >> >> Thanks for reviewing Magnus! I agree with your suggestion, please see >> updated webrevs below: >> >> - full: https://cr.openjdk.java.net/~ehelin/8251551/01/ >> - incremental: https://cr.openjdk.java.net/~ehelin/8251551/00-01/ >> >> You can also see a rendered version of the README.md file in my personal >> fork [0]. > > There?s an extra comma in there. > > s/For build instructions, please/For build instructions please see/ Thanks for reviewing Mark and for catching the extra comma! Please see updated webrevs below: - full: https://cr.openjdk.java.net/~ehelin/8251551/02/ - incremental: https://cr.openjdk.java.net/~ehelin/8251551/01-02/ On 8/14/20 8:07 PM, mark.reinhold at oracle.com wrote: > Otherwise, looks good. Thanks! Erik > - Mark From peter.levart at gmail.com Sun Aug 16 10:41:51 2020 From: peter.levart at gmail.com (Peter Levart) Date: Sun, 16 Aug 2020 12:41:51 +0200 Subject: RFC (round 1), JEP draft: Low-level Object layout introspection methods In-Reply-To: <6a9abead-1bc6-336d-b11c-6e6e9ab8983f@redhat.com> References: <6a9abead-1bc6-336d-b11c-6e6e9ab8983f@redhat.com> Message-ID: <040dac9d-dbe7-6cac-9c1a-59c3bd8a60e6@gmail.com> Hi, Just a thought... On 8/11/20 12:22 PM, Aleksey Shipilev wrote: > ...but dislike: > public static long addressOf(Object obj); > public static long fieldOffsetOf(Field field); What exactly is the purpose of "addressOf" method in terms of information API? Is it used to estimate relative placement of several objects in the heap to see how they are scattered around which affects the CPU cache performance when accessing them? If this is the case, then maybe the method could return a "mangled" address: the address + some secret random value calculated once for the whole VM. You could still picture the relative placement of objects with such value, but could not use it to actually access the data in the object (although as Roman Kennke already put it, the object address is a "moving target" today already and so can not be reliably used to access object data via the returned "long" address anyway). Regards, Peter From conor.cleary at oracle.com Mon Aug 17 10:11:14 2020 From: conor.cleary at oracle.com (Conor Cleary) Date: Mon, 17 Aug 2020 11:11:14 +0100 Subject: RFR[8250855]: 'Address reliance on default constructors in the Java 2D APIs' Message-ID: Hi all, Looking for reviewers for JDK-8250855, 'Address reliance on default constructors in the Java 2D APIs'. This patch addresses the reliance on default constructors in the following packages: * java.awt.Image * java.awt.PrintJob * java.awt.font.GlyphVector * java.awt.font.LayoutPath * java.awt.font.LineMetrics * java.awt.image.AbstractMultiResolutionImage * java.awt.image.BufferStrategy * java.awt.image.ImageFilter * java.awt.image.RGBImageFilter * java.awt.image.VolatileImage * javax.print.PrintServiceLookup * javax.print.ServiceUI * javax.print.ServiceUIFactory * javax.print.StreamPrintServiceFactory * javax.print.event.PrintJobAdapter The patch places simple constructors in all of these packages. * bug: https://bugs.openjdk.java.net/browse/JDK-8250855 * webrev: http://cr.openjdk.java.net/~ccleary/issues/webrevs-store/8250855/webrevs/webrev.00/ Conor From LANCE.ANDERSEN at ORACLE.COM Mon Aug 17 11:16:22 2020 From: LANCE.ANDERSEN at ORACLE.COM (Lance Andersen) Date: Mon, 17 Aug 2020 07:16:22 -0400 Subject: RFR[8250855]: 'Address reliance on default constructors in the Java 2D APIs' In-Reply-To: References: Message-ID: Hi Conor, Overall I think this is OK. A few comments to consider: Have you created a CSR for this change yet? If not you will need one. The description for almost all of the constructors indicate: ???? Constructor for subclasses to call ?????? Is the above wording used elsewhere in the JDK? Not sure I like it, I might suggest a little wordsmithing For example AbstractList uses: ????? Sole constructor. (For invocation by subclass constructors, typically implicit.) -------------- For ImageFilter (as an example): ??? Creates an {@code ImageFilter} -------- I would probably tweak it to something similar to: ???? HashTable: Constructs a new, empty hashtable FileSystem: Initializes a new instance of this class. ????? I would suggest including ?new? in your proposed wording at a minimum Best Lance > On Aug 17, 2020, at 6:11 AM, Conor Cleary wrote: > > Hi all, > > Looking for reviewers for JDK-8250855, 'Address reliance on default constructors in the Java 2D APIs'. > > This patch addresses the reliance on default constructors in the following packages: > > * java.awt.Image > * java.awt.PrintJob > * java.awt.font.GlyphVector > * java.awt.font.LayoutPath > * java.awt.font.LineMetrics > * java.awt.image.AbstractMultiResolutionImage > * java.awt.image.BufferStrategy > * java.awt.image.ImageFilter > * java.awt.image.RGBImageFilter > * java.awt.image.VolatileImage > * javax.print.PrintServiceLookup > * javax.print.ServiceUI > * javax.print.ServiceUIFactory > * javax.print.StreamPrintServiceFactory > * javax.print.event.PrintJobAdapter > > The patch places simple constructors in all of these packages. > > * bug: https://bugs.openjdk.java.net/browse/JDK-8250855 > * webrev: > http://cr.openjdk.java.net/~ccleary/issues/webrevs-store/8250855/webrevs/webrev.00/ > > > Conor > Best Lance ------------------ Lance Andersen| Principal Member of Technical Staff | +1.781.442.2037 Oracle Java Engineering 1 Network Drive Burlington, MA 01803 Lance.Andersen at oracle.com From daniel.fuchs at oracle.com Mon Aug 17 11:30:34 2020 From: daniel.fuchs at oracle.com (Daniel Fuchs) Date: Mon, 17 Aug 2020 12:30:34 +0100 Subject: RFR[8250855]: 'Address reliance on default constructors in the Java 2D APIs' In-Reply-To: References: Message-ID: On 17/08/2020 12:16, Lance Andersen wrote: > The description for almost all of the constructors indicate: > > ???? > Constructor for subclasses to call > ?????? > > Is the above wording used elsewhere in the JDK? Not sure I like it, I might suggest a little wordsmithing As far as I know that's what Joe Darcy used to document public implicit constructors in abstract classes in recent similar cleanup patches, see for instance here: http://cr.openjdk.java.net/~darcy/8250244.0/src/java.base/share/classes/java/net/SocketAddress.java.frames.html I wouldn't use that description if the class could be instantiated, but if it's abstract then we have a precedent... Not sure if there is already a different convention for that in 2D/AWT code base though. best regards, -- daniel From LANCE.ANDERSEN at ORACLE.COM Mon Aug 17 11:50:34 2020 From: LANCE.ANDERSEN at ORACLE.COM (Lance Andersen) Date: Mon, 17 Aug 2020 07:50:34 -0400 Subject: RFR[8250855]: 'Address reliance on default constructors in the Java 2D APIs' In-Reply-To: References: Message-ID: Hi Daniel > On Aug 17, 2020, at 7:30 AM, Daniel Fuchs wrote: > > On 17/08/2020 12:16, Lance Andersen wrote: >> The description for almost all of the constructors indicate: >> ???? >> Constructor for subclasses to call >> ?????? >> Is the above wording used elsewhere in the JDK? Not sure I like it, I might suggest a little wordsmithing > > As far as I know that's what Joe Darcy used to document > public implicit constructors in abstract classes in > recent similar cleanup patches, see for instance here: > > http://cr.openjdk.java.net/~darcy/8250244.0/src/java.base/share/classes/java/net/SocketAddress.java.frames.html > > I wouldn't use that description if the class could be instantiated, > but if it's abstract then we have a precedent... > Not sure if there is already a different convention for that > in 2D/AWT code base though. If the wording is being used elsewhere, then we have a precedent. We should probably discuss at some point do we want to revisit the wording throughout the JDK for consistency. Thank you for the follow up > > best regards, > > -- daniel > Best Lance ------------------ Lance Andersen| Principal Member of Technical Staff | +1.781.442.2037 Oracle Java Engineering 1 Network Drive Burlington, MA 01803 Lance.Andersen at oracle.com From shade at redhat.com Mon Aug 17 12:33:10 2020 From: shade at redhat.com (Aleksey Shipilev) Date: Mon, 17 Aug 2020 14:33:10 +0200 Subject: RFC (round 1), JEP draft: Low-level Object layout introspection methods In-Reply-To: <040dac9d-dbe7-6cac-9c1a-59c3bd8a60e6@gmail.com> References: <6a9abead-1bc6-336d-b11c-6e6e9ab8983f@redhat.com> <040dac9d-dbe7-6cac-9c1a-59c3bd8a60e6@gmail.com> Message-ID: <50c49f3f-00fc-7142-2627-62ddf17d6ea9@redhat.com> On 8/16/20 12:41 PM, Peter Levart wrote: > On 8/11/20 12:22 PM, Aleksey Shipilev wrote: >> ...but dislike: >> public static long addressOf(Object obj); >> public static long fieldOffsetOf(Field field); > > What exactly is the purpose of "addressOf" method in terms of > information API? Is it used to estimate relative placement of several > objects in the heap to see how they are scattered around which affects > the CPU cache performance when accessing them? Yes, it says so in "Motivation" section in JEP. Additionally, checking the object address against the cache line size. > If this is the case, then maybe the method could return a "mangled" > address: the address + some secret random value calculated once for the > whole VM. Now that is an interesting suggestion! Implemented here: https://hg.openjdk.java.net/jdk/sandbox/rev/248807bfa78e There is little-to-none loss of performance, because the offset can be trivially used in intrinsics. JEP text is updated to mention this technique. I believe this makes the address exposure story less problematic, although the result is still conceptually a useful proxy for a memory location. -- Thanks, -Aleksey From rkennke at redhat.com Mon Aug 17 12:43:39 2020 From: rkennke at redhat.com (Roman Kennke) Date: Mon, 17 Aug 2020 14:43:39 +0200 Subject: RFC (round 1), JEP draft: Low-level Object layout introspection methods In-Reply-To: <50c49f3f-00fc-7142-2627-62ddf17d6ea9@redhat.com> References: <6a9abead-1bc6-336d-b11c-6e6e9ab8983f@redhat.com> <040dac9d-dbe7-6cac-9c1a-59c3bd8a60e6@gmail.com> <50c49f3f-00fc-7142-2627-62ddf17d6ea9@redhat.com> Message-ID: On Mon, 2020-08-17 at 14:33 +0200, Aleksey Shipilev wrote: > Error verifying signature: Cannot verify message signature: > Incorrect message format > On 8/16/20 12:41 PM, Peter Levart wrote: > > On 8/11/20 12:22 PM, Aleksey Shipilev wrote: > > > ...but dislike: > > > public static long addressOf(Object obj); > > > public static long fieldOffsetOf(Field field); > > > > What exactly is the purpose of "addressOf" method in terms of > > information API? Is it used to estimate relative placement of > > several > > objects in the heap to see how they are scattered around which > > affects > > the CPU cache performance when accessing them? > > Yes, it says so in "Motivation" section in JEP. Additionally, > checking the object address against > the cache line size. > > > If this is the case, then maybe the method could return a > > "mangled" > > address: the address + some secret random value calculated once for > > the > > whole VM. > > Now that is an interesting suggestion! > > Implemented here: > https://hg.openjdk.java.net/jdk/sandbox/rev/248807bfa78e > > There is little-to-none loss of performance, because the offset can > be trivially used in intrinsics. > JEP text is updated to mention this technique. I believe this makes > the address exposure story less > problematic, although the result is still conceptually a useful proxy > for a memory location. > Maybe I'm missing something, but it may not actually have to be 'some secret offset' but could be just the location of the object relative to heap start? Roman From jdk at fiolino.de Mon Aug 17 12:55:20 2020 From: jdk at fiolino.de (Michael Kuhlmann) Date: Mon, 17 Aug 2020 14:55:20 +0200 Subject: RFC (round 1), JEP draft: Low-level Object layout introspection methods In-Reply-To: <50c49f3f-00fc-7142-2627-62ddf17d6ea9@redhat.com> References: <6a9abead-1bc6-336d-b11c-6e6e9ab8983f@redhat.com> <040dac9d-dbe7-6cac-9c1a-59c3bd8a60e6@gmail.com> <50c49f3f-00fc-7142-2627-62ddf17d6ea9@redhat.com> Message-ID: On 8/17/20 2:33 PM, Aleksey Shipilev wrote: > On 8/16/20 12:41 PM, Peter Levart wrote: >> On 8/11/20 12:22 PM, Aleksey Shipilev wrote: >>> ...but dislike: >>> public static long addressOf(Object obj); >>> public static long fieldOffsetOf(Field field); >> What exactly is the purpose of "addressOf" method in terms of >> information API? Is it used to estimate relative placement of several >> objects in the heap to see how they are scattered around which affects >> the CPU cache performance when accessing them? > Yes, it says so in "Motivation" section in JEP. Additionally, checking the object address against > the cache line size. > >> If this is the case, then maybe the method could return a "mangled" >> address: the address + some secret random value calculated once for the >> whole VM. > Now that is an interesting suggestion! > > Implemented here: > https://hg.openjdk.java.net/jdk/sandbox/rev/248807bfa78e > > There is little-to-none loss of performance, because the offset can be trivially used in intrinsics. > JEP text is updated to mention this technique. I believe this makes the address exposure story less > problematic, although the result is still conceptually a useful proxy for a memory location. > I don't fully get it. If the idea is that evil attackers shouldn't be able to read confidential information from Java objects, then adding a secret offset won't help. You can just create a unique object, e.g. an array filled with some data, and scan the whole heap for that. Then you can easily calculate the distance between this and any other object and read or modify its content. From peter.levart at gmail.com Mon Aug 17 14:57:16 2020 From: peter.levart at gmail.com (Peter Levart) Date: Mon, 17 Aug 2020 16:57:16 +0200 Subject: RFC (round 1), JEP draft: Low-level Object layout introspection methods In-Reply-To: References: <6a9abead-1bc6-336d-b11c-6e6e9ab8983f@redhat.com> <040dac9d-dbe7-6cac-9c1a-59c3bd8a60e6@gmail.com> <50c49f3f-00fc-7142-2627-62ddf17d6ea9@redhat.com> Message-ID: <5b41c949-fbe4-a339-35b0-6b7b53b7f299@gmail.com> On 8/17/20 2:55 PM, Michael Kuhlmann wrote: > On 8/17/20 2:33 PM, Aleksey Shipilev wrote: >> On 8/16/20 12:41 PM, Peter Levart wrote: >>> On 8/11/20 12:22 PM, Aleksey Shipilev wrote: >>>> ...but dislike: >>>> ????? public static long addressOf(Object obj); >>>> ????? public static long fieldOffsetOf(Field field); >>> What exactly is the purpose of "addressOf" method in terms of >>> information API? Is it used to estimate relative placement of several >>> objects in the heap to see how they are scattered around which affects >>> the CPU cache performance when accessing them? >> Yes, it says so in "Motivation" section in JEP. Additionally, >> checking the object address against >> the cache line size. >> >>> If this is the case, then maybe the method could return a "mangled" >>> address: the address + some secret random value calculated once for the >>> whole VM. >> Now that is an interesting suggestion! >> >> Implemented here: >> ?? https://hg.openjdk.java.net/jdk/sandbox/rev/248807bfa78e >> >> There is little-to-none loss of performance, because the offset can >> be trivially used in intrinsics. >> JEP text is updated to mention this technique. I believe this makes >> the address exposure story less >> problematic, although the result is still conceptually a useful proxy >> for a memory location. >> > > I don't fully get it. If the idea is that evil attackers shouldn't be > able to read confidential information from Java objects, then adding a > secret offset won't help. You can just create a unique object, e.g. an > array filled with some data, and scan the whole heap for that. Then > you can easily calculate the distance between this and any other > object and read or modify its content. > Yeah, you can do it if you are evil and have access to Unsafe also. This is not a security concern. It is a concern that otherwise kind people will start abusing the API to code useful programs that will later fail when the information API suddenly starts returning "unknown" values. Regards, Peter From erik.osterlund at oracle.com Mon Aug 17 15:13:47 2020 From: erik.osterlund at oracle.com (=?UTF-8?Q?Erik_=c3=96sterlund?=) Date: Mon, 17 Aug 2020 17:13:47 +0200 Subject: RFC (round 1), JEP draft: Low-level Object layout introspection methods In-Reply-To: <50c49f3f-00fc-7142-2627-62ddf17d6ea9@redhat.com> References: <6a9abead-1bc6-336d-b11c-6e6e9ab8983f@redhat.com> <040dac9d-dbe7-6cac-9c1a-59c3bd8a60e6@gmail.com> <50c49f3f-00fc-7142-2627-62ddf17d6ea9@redhat.com> Message-ID: <1513c60a-6df4-1ee5-d15b-3cbe9df6aa97@oracle.com> Hi Aleksey, I think the way this addressOf API (and others) is used is really a key factor. You have a question that you want answers to, and addressOf can help you figure out the answer. But knowing what the question is, seems crucial for what form the API should take to answer that question. And I don't think I understand well enough how these low-level APIs are *really* intended to be used. What are the actual high level questions we want answered? I read some use cases in the JEP description, but I don't see how neither addresses nor offsets have to be exposed to answer the actual high level questions. This problem seems strikingly similar to that of measuring time. Let's say you would like to measure how long time it took to run your micro benchmark and you need an API to do that. The most obvious solution is to expose an API that tells you how long time has passed since some reference point. This allows you to measure a start time and an end time, and compute the difference. Excellent. Except, now as a provider of this API, you have to go through a world of trouble to deal with various things like monotonicity of time counters on different levels in the stack. Because the implicit expectation is that surely time never goes backward. Except when it does because one socket is hotter than another and threads migrate between sockets and what not, and now we have to hide that from the unknowing user. To ensure monotonicity of the time stamps, you gotta put in stuff in the whole tech stack (hardware, hypervisor, VM, OS, JVM, etc) and deal with many problems. An alternative API would to get the same job done for this use case would be to expose a timer that you can start and stop and then return the duration. It would hide the details about time stamps and encapsulate how to reason about them with a check that if the presumed duration between internal time stamps is negative, return zero. Voila - monotonic time measurements. In a very similar way, if what you wish to do is to measure the distance in bytes between two objects in order to measure some sense of locality (I think you see where I am going with this), then the obvious API to do that is to expose the current address of an object. Then you can manually compute the distance by taking the address of one object minus the address of the other object. Except the user code does not have explicit control of scheduling of safepoints between the two points of measurement. Therefore, the result of computing the difference might lead to some similarly surprising results, including but not limited to: * The computed distance between o1 and o2 is zero bytes, but it is not the same object. Impossible! Except when it isn't. * The computed distance between o1 and o2 is non-zero bytes, but it is the same object. Impossible! Except when it isn't. * The computed distance between o1 and o2 does not reflect the actual distance between o1 and o2 at any snapshot of time. Impossible! Except when it isn't. Again we have exposed something slippery exposed to a lot of implementation weirdness, like a time stamp, and let the user of the API know how to interpret relative differences, hoping they won't get surprised by potential implementation artifacts (like relocation, slippery safepoints, pointer tagging, pointer compression schemes, etc). Perhaps, another way of answering the same question without the addressOf API, is to have an estimatedDistanceInBytes(Object o1, Object o2) or even an estimatedDistanceInBytes(Object o1, Field f1, Object o2, Field f2) API. This API could run in a mode where there are no safepoints, and ensure that none of the above mentioned "impossible" situations actually remain impossible, and hence more effectively actually answering the high-level question. It would also importantly never expose any addresses or offsets, while still allowing various locality heuristics to be computed by performance people. As for the other question - what is the cache line alignment of this object - a similar API closer to the high level question could be built, like: alignmentInBytes(Object o1, int alignment), where alignment is a power of 2 up to a "reasonable" size that allows you to answer all the questions you had about the object layout, without exposing its address. Although we might want to think a bit more about this one. We don't want to hardcode assumptions that the alignmentInBytes of an object is where its oop is pointing at a cache line. There are no oops in the user model. If you for example consider an alternative JVM implementation like Jikes RVM, then the object pointer is at an offset into the object payload (in fact where an array payload would start). This was done to reduce the instructions needed for RISC processors to perform array element addressing. This reinforces that a JVM implementation might choose to have their object pointers point at different offsets either before or after the payload of where its memory cell begin. In the previous Shenandoah design (before the LRB), it would for example point one word into the payload of the cell. And that would still be before the payload of the object - a rather arbitrary point. So we would have to have some kind of consensus about what offset into the payload to expose the alignment of. Where the fields start? Once again, the nature of the question becomes very relevant. Because is the root question really "what is the cache line alignment of my object", or is it "what is the cache line alignment of the field foo", which might be better represented with alignmentInBytes(Object o1, Field field, int alignment). That would allow a possibly less sensitive and more heuristic in nature piece of information, to leave the JVM. But then why are you asking what the alignment of the field is really? Is there yet a more high level question we are trying to answer, such as "is field foo and bar on the same cache line in object o?". Now at this high level, we are getting to a point where we could expose just a boolean that is heuristic in nature. This would allow covering up many thinkable implementation choices from the user of the API. I, like Brian, am not a big fan of exposing the very concept that fields have offsets or that objects have addresses for that matter. For me, the exposed user model is that objects don't have addresses, they are logical concepts composed of a mapping to "memory cells" that may or may not be 1:1. As you know better than most people, there are GC designs that do not have a to-space invariant. Like Shenandoah a few years ago, and seemingly the new Alibaba Platinum GC. There are also GC designs where fields are not offsets, like Schism and Jamaica VM in the literature, that split objects into multiple fixed sized memory cells, to combat fragmentation without the need for compaction. I think that we want to maintain as much flexibility as we can for future GC algorithms to thrive on the Java platform, and not perform the same mistake that languages like Go did by exposing the address of the objects, and hence forever closing the door to moving garbage collection for the go platform. I hope you understand where I am coming from as a GC maintainer. TL/DR: Exposing the low level details about object layout that requires the user to know implementation details such as the very concept that an object is associated with an address, or that fields are associated with an offset, ought to be the last possible resort. And I have a feeling that if we look more closely at the high level questions you really want answers for with the proposed low-level API, we might be able to design more high-level APIs, closer to the original questions, that might be both more effective at answering such questions without strange implementation anomalies due to leaving the measuring between different relative points of data be done in an uncontrolled fashion by users, instead of by letting the JVM know in the API what you are really asking), and hide more implementation details (addresses, offsets) we don't want to expose, at the same time. I have heard two high-level questions that addressOf is proposed to answer: * What is the byte distance between o1 and o2 * What is the alignment of o1? As mentioned, zooming out even one more step, are we asking these questions as a means to an end, or because we have another even more high level question? Perhaps if we get to the root of what we would like to find out, we might never have to expose neither offsets of fields nor addresses of objects. Because why do you need them if not to answer an even more high level question about the layout of an object, e.g. "is foo of obj1 and bar of obj2 on the same cache line" or "what is the byte distance between foo of obj1 and bar of obj2"? When I read your JEP description, it seems like those are indeed the kind of high level questions we want answered really. And for that, I think a much more high level API would be more appropriate. What do you think? Thanks, /Erik On 2020-08-17 14:33, Aleksey Shipilev wrote: > On 8/16/20 12:41 PM, Peter Levart wrote: >> On 8/11/20 12:22 PM, Aleksey Shipilev wrote: >>> ...but dislike: >>> public static long addressOf(Object obj); >>> public static long fieldOffsetOf(Field field); >> What exactly is the purpose of "addressOf" method in terms of >> information API? Is it used to estimate relative placement of several >> objects in the heap to see how they are scattered around which affects >> the CPU cache performance when accessing them? > Yes, it says so in "Motivation" section in JEP. Additionally, checking the object address against > the cache line size. > >> If this is the case, then maybe the method could return a "mangled" >> address: the address + some secret random value calculated once for the >> whole VM. > Now that is an interesting suggestion! > > Implemented here: > https://hg.openjdk.java.net/jdk/sandbox/rev/248807bfa78e > > There is little-to-none loss of performance, because the offset can be trivially used in intrinsics. > JEP text is updated to mention this technique. I believe this makes the address exposure story less > problematic, although the result is still conceptually a useful proxy for a memory location. > From jdk at fiolino.de Mon Aug 17 15:19:17 2020 From: jdk at fiolino.de (Michael Kuhlmann) Date: Mon, 17 Aug 2020 17:19:17 +0200 Subject: RFC (round 1), JEP draft: Low-level Object layout introspection methods In-Reply-To: <5b41c949-fbe4-a339-35b0-6b7b53b7f299@gmail.com> References: <6a9abead-1bc6-336d-b11c-6e6e9ab8983f@redhat.com> <040dac9d-dbe7-6cac-9c1a-59c3bd8a60e6@gmail.com> <50c49f3f-00fc-7142-2627-62ddf17d6ea9@redhat.com> <5b41c949-fbe4-a339-35b0-6b7b53b7f299@gmail.com> Message-ID: <4dd3ebdf-4a9d-014f-bf99-bda551263501@fiolino.de> On 8/17/20 4:57 PM, Peter Levart wrote: > > On 8/17/20 2:55 PM, Michael Kuhlmann wrote: >> ... >> I don't fully get it. If the idea is that evil attackers shouldn't be >> able to read confidential information from Java objects, then adding >> a secret offset won't help. You can just create a unique object, e.g. >> an array filled with some data, and scan the whole heap for that. >> Then you can easily calculate the distance between this and any other >> object and read or modify its content. >> > Yeah, you can do it if you are evil and have access to Unsafe also. > This is not a security concern. It is a concern that otherwise kind > people will start abusing the API to code useful programs that will > later fail when the information API suddenly starts returning > "unknown" values. > > Regards, Peter > True, but when Unsafe is not available any more, you can't do much with these numbers at all. Then it doesn't matter if the number if the concrete memory address or not, you can't access it anyway except using JNI. So why adding an offset? It gives the false impression that it could be more secure, which is not the case. Regards, Michael From adinn at redhat.com Mon Aug 17 15:57:12 2020 From: adinn at redhat.com (Andrew Dinn) Date: Mon, 17 Aug 2020 16:57:12 +0100 Subject: RFC (round 1), JEP draft: Low-level Object layout introspection methods In-Reply-To: <4dd3ebdf-4a9d-014f-bf99-bda551263501@fiolino.de> References: <6a9abead-1bc6-336d-b11c-6e6e9ab8983f@redhat.com> <040dac9d-dbe7-6cac-9c1a-59c3bd8a60e6@gmail.com> <50c49f3f-00fc-7142-2627-62ddf17d6ea9@redhat.com> <5b41c949-fbe4-a339-35b0-6b7b53b7f299@gmail.com> <4dd3ebdf-4a9d-014f-bf99-bda551263501@fiolino.de> Message-ID: <144279d8-a044-4957-acb6-b477cec4ec54@redhat.com> On 17/08/2020 16:19, Michael Kuhlmann wrote: > > On 8/17/20 4:57 PM, Peter Levart wrote: > True, but when Unsafe is not available any more, you can't do much with > these numbers at all. Then it doesn't matter if the number if the > concrete memory address or not, you can't access it anyway except using > JNI. I completely agree with this view. I fear Brian's critique has apportioned blame to the wrong target. The problem here is not the exposure of raw addresses (also offsets, etc) that Aleksey's spec enables, it is the existence of a Java API that allows them to be used as raw addresses (etc). Take away that API (which is a task that is very much in hand) and it is hard to see why there is a problem with the exposure. Without such an API the values returned are a mere cipher form the point of view of the reporting JVM, providing no means to side effect its operation. Whereas, on the other hand, those same numbers -- if and when they are available -- may still be crunched pairwise (or in some other statistically interesting aggregation) as numeric values to reveal a host of interesting and useful (albeit perhaps not always reproducible or reliable) properties of that JVM without in any way prejudicing its execution. You are right that this still leaves a wormhole open for abuse in JNI code. However, that wormhole is already present for anyone creative and/or stupid enough to use it so I don't see that as an argument against Aleksey's proposal. One should only guard so far against idiocy when the cost is to disable a legitimate (one might even claim pressing) need for sensible users to be able to measure how their code is operating. regards, Andrew Dinn ----------- Red Hat Distinguished Engineer Red Hat UK Ltd Registered in England and Wales under Company Registration No. 03798903 Directors: Michael Cunningham, Michael ("Mike") O'Neill From shade at redhat.com Mon Aug 17 16:13:40 2020 From: shade at redhat.com (Aleksey Shipilev) Date: Mon, 17 Aug 2020 18:13:40 +0200 Subject: RFC (round 1), JEP draft: Low-level Object layout introspection methods In-Reply-To: <144279d8-a044-4957-acb6-b477cec4ec54@redhat.com> References: <6a9abead-1bc6-336d-b11c-6e6e9ab8983f@redhat.com> <040dac9d-dbe7-6cac-9c1a-59c3bd8a60e6@gmail.com> <50c49f3f-00fc-7142-2627-62ddf17d6ea9@redhat.com> <5b41c949-fbe4-a339-35b0-6b7b53b7f299@gmail.com> <4dd3ebdf-4a9d-014f-bf99-bda551263501@fiolino.de> <144279d8-a044-4957-acb6-b477cec4ec54@redhat.com> Message-ID: On 8/17/20 5:57 PM, Andrew Dinn wrote: > You are right that this still leaves a wormhole open for abuse in JNI > code. However, that wormhole is already present for anyone creative > and/or stupid enough to use it so I don't see that as an argument > against Aleksey's proposal. One should only guard so far against idiocy > when the cost is to disable a legitimate (one might even claim pressing) > need for sensible users to be able to measure how their code is operating. Indeed. I see the value in mixing up the cookie to the addressOf: it gives the tangible speed-bump for unintended uses, while keeping it open for intended uses without a penalty. With a cookie, you try to pass Runtime.addressOf(new Object()) to JNI, cast jlong to void* there, and then dereference off it? Here, take this SIGSEGV. As you would have with just about any other jlong. It is one thing to spell out something in Javadoc, and another thing to actively shake off the unintended behaviors. Similar example: randomized iteration order in some Collections factory methods. This is why I liked Peter's suggestion, that's why I implemented it, and that's why I think it makes address exposure story better! -- Thanks, -Aleksey From peter.levart at gmail.com Mon Aug 17 16:16:33 2020 From: peter.levart at gmail.com (Peter Levart) Date: Mon, 17 Aug 2020 18:16:33 +0200 Subject: RFC (round 1), JEP draft: Low-level Object layout introspection methods In-Reply-To: <144279d8-a044-4957-acb6-b477cec4ec54@redhat.com> References: <6a9abead-1bc6-336d-b11c-6e6e9ab8983f@redhat.com> <040dac9d-dbe7-6cac-9c1a-59c3bd8a60e6@gmail.com> <50c49f3f-00fc-7142-2627-62ddf17d6ea9@redhat.com> <5b41c949-fbe4-a339-35b0-6b7b53b7f299@gmail.com> <4dd3ebdf-4a9d-014f-bf99-bda551263501@fiolino.de> <144279d8-a044-4957-acb6-b477cec4ec54@redhat.com> Message-ID: On 8/17/20 5:57 PM, Andrew Dinn wrote: > On 17/08/2020 16:19, Michael Kuhlmann wrote: >> On 8/17/20 4:57 PM, Peter Levart wrote: correction... On 8/17/20 2:55 PM, Michael Kuhlmann wrote: >> True, but when Unsafe is not available any more, you can't do much with >> these numbers at all. Then it doesn't matter if the number if the >> concrete memory address or not, you can't access it anyway except using >> JNI. > I completely agree with this view. I fear Brian's critique has > apportioned blame to the wrong target. The problem here is not the > exposure of raw addresses (also offsets, etc) that Aleksey's spec > enables, it is the existence of a Java API that allows them to be used > as raw addresses (etc). Take away that API (which is a task that is very > much in hand) and it is hard to see why there is a problem with the > exposure. > > Without such an API the values returned are a mere cipher form the point > of view of the reporting JVM, providing no means to side effect its > operation. Whereas, on the other hand, those same numbers -- if and when > they are available -- may still be crunched pairwise (or in some other > statistically interesting aggregation) as numeric values to reveal a > host of interesting and useful (albeit perhaps not always reproducible > or reliable) properties of that JVM without in any way prejudicing its > execution. > > You are right that this still leaves a wormhole open for abuse in JNI > code. However, that wormhole is already present for anyone creative > and/or stupid enough to use it so I don't see that as an argument > against Aleksey's proposal. One should only guard so far against idiocy > when the cost is to disable a legitimate (one might even claim pressing) > need for sensible users to be able to measure how their code is operating. > > regards, > > > Andrew Dinn > ----------- > Red Hat Distinguished Engineer > Red Hat UK Ltd > Registered in England and Wales under Company Registration No. 03798903 > Directors: Michael Cunningham, Michael ("Mike") O'Neill > I think that part of Brian's concern was rightly against addressOf(Object) since Unsafe is currently still present while its functionality is slowly being crippled while other APIs are replacing it. Suppose that in some future JDK the Unsafe.get/put methods that take an Object reference are taken away, but those that take long addresses are still kept to facilitate access to off-heap memory. This crippled Unsafe API could be seen by a newbie as a perfect match with the Aleksey's addressOf(Object) API to form a means to peek and poke into objects. It would mostly even work. But see the Erik ?sterlund's reply which is more profound. Regards, Peter From shade at redhat.com Mon Aug 17 16:27:51 2020 From: shade at redhat.com (Aleksey Shipilev) Date: Mon, 17 Aug 2020 18:27:51 +0200 Subject: RFC (round 1), JEP draft: Low-level Object layout introspection methods In-Reply-To: References: <6a9abead-1bc6-336d-b11c-6e6e9ab8983f@redhat.com> <040dac9d-dbe7-6cac-9c1a-59c3bd8a60e6@gmail.com> <50c49f3f-00fc-7142-2627-62ddf17d6ea9@redhat.com> Message-ID: <128a9bb2-d7c8-bc95-f44a-e7549fe11fd0@redhat.com> On 8/17/20 2:43 PM, Roman Kennke wrote: > Maybe I'm missing something, but it may not actually have to be 'some > secret offset' but could be just the location of the object relative to > heap start? Ha! I thought about the same initially, but then shrugged it off. At the first glance, subtracting the heap base does appear simpler than other approaches. But after tinkering with the prototype I thought that doing the full-random cookie is just as simple. (Some implementation trivia: without CompressedOops enabled, only CollectedHeap seems to know what the heap base is, whoops. So you either end up extending the CollectedHeap interface, or add the auxiliary field in Universe -- which is what you would do anyway for a random cookie). Conceptually, heap bases are usually high power-of-two's, so demangling the address would seem trivial, and that triviality would somewhat defeat the purpose of mangling it in the first place. Plus, heap bases are quite stable run-to-run, which makes the demangling code appear more stable than it actually is. Also, I can imagine the compressed oops mode where heap base is effectively zero (with some GC handling to "block out" zero pages and whatnot). This turns mangling into identity :) Full random cookies would make unintended use failures more systematic. -- Thanks, -Aleksey From philip.race at oracle.com Mon Aug 17 19:23:24 2020 From: philip.race at oracle.com (Philip Race) Date: Mon, 17 Aug 2020 12:23:24 -0700 Subject: RFR[8250855]: 'Address reliance on default constructors in the Java 2D APIs' In-Reply-To: References: Message-ID: <5F3AD92C.1020106@oracle.com> Neither of awt-dev or jdk-dev is the right list for this fix. Please move the review to 2d-dev. -phil. On 8/17/20, 4:50 AM, Lance Andersen wrote: > Hi Daniel > >> On Aug 17, 2020, at 7:30 AM, Daniel Fuchs wrote: >> >> On 17/08/2020 12:16, Lance Andersen wrote: >>> The description for almost all of the constructors indicate: >>> ???? >>> Constructor for subclasses to call >>> ?????? >>> Is the above wording used elsewhere in the JDK? Not sure I like it, I might suggest a little wordsmithing >> As far as I know that's what Joe Darcy used to document >> public implicit constructors in abstract classes in >> recent similar cleanup patches, see for instance here: >> >> http://cr.openjdk.java.net/~darcy/8250244.0/src/java.base/share/classes/java/net/SocketAddress.java.frames.html >> >> I wouldn't use that description if the class could be instantiated, >> but if it's abstract then we have a precedent... >> Not sure if there is already a different convention for that >> in 2D/AWT code base though. > If the wording is being used elsewhere, then we have a precedent. We should probably discuss at some point do we want to revisit the wording throughout the JDK for consistency. > > Thank you for the follow up >> best regards, >> >> -- daniel >> > > Best > Lance > ------------------ > > > > > Lance Andersen| Principal Member of Technical Staff | +1.781.442.2037 > Oracle Java Engineering > 1 Network Drive > Burlington, MA 01803 > Lance.Andersen at oracle.com > > > > From mark.reinhold at oracle.com Tue Aug 18 18:48:00 2020 From: mark.reinhold at oracle.com (mark.reinhold at oracle.com) Date: Tue, 18 Aug 2020 11:48:00 -0700 (PDT) Subject: New candidate JEP: 389: Foreign Linker API Message-ID: <20200818184800.373753BE810@eggemoggin.niobe.net> https://openjdk.java.net/jeps/389 - Mark From mark.reinhold at oracle.com Tue Aug 18 19:15:33 2020 From: mark.reinhold at oracle.com (mark.reinhold at oracle.com) Date: Tue, 18 Aug 2020 12:15:33 -0700 Subject: JDK 15: Second Release Candidate Message-ID: <20200818121533.278198220@eggemoggin.niobe.net> We fixed three bugs after build 35 [1], so build 36 is our second JDK 15 Release Candidate. Binaries available here, as usual: https://jdk.java.net/15 - Mark [1] https://bugs.openjdk.java.net/issues/?jql=project%20%3D%20JDK%20AND%20fixversion%20%3D%2015%20and%20%22resolved%20in%20build%22%20%3D%20b36%20order%20by%20component%2C%20subcomponent From daniel.fuchs at oracle.com Wed Aug 19 09:51:57 2020 From: daniel.fuchs at oracle.com (Daniel Fuchs) Date: Wed, 19 Aug 2020 10:51:57 +0100 Subject: CFV: New JDK Committer: Rahul Yadav Message-ID: Hi, I hereby nominate Rahul Yadav (ryadav) to JDK Committer. Rahul is a member of the java core libraries team at Oracle. Rahul already contributed 14 fixes to the JDK project [1]. Votes are due by 12:00 UTC September 2nd, 2020. Only current JDK Committers [2] are eligible to vote on this nomination. Votes must be cast in the open by replying to this mailing list. For Lazy Consensus voting instructions, see [3]. Best regards, -- daniel [1] http://hg.openjdk.java.net/jdk/jdk/search/?rev=keyword%28rahul.r.yadav%40oracle.com%29%20or%20author%28ryadav%29&revcount=20 [2] http://openjdk.java.net/census [3] http://openjdk.java.net/bylaws#lazy-consensus From aleksej.efimov at oracle.com Wed Aug 19 10:00:20 2020 From: aleksej.efimov at oracle.com (Aleks Efimov) Date: Wed, 19 Aug 2020 11:00:20 +0100 Subject: CFV: New JDK Committer: Rahul Yadav In-Reply-To: References: Message-ID: Vote: yes Best Regards, Aleksei On 19/08/2020 10:51, Daniel Fuchs wrote: > Hi, > > I hereby nominate Rahul Yadav (ryadav) to JDK Committer. > > Rahul is a member of the java core libraries team at Oracle. > Rahul already contributed 14 fixes to the JDK project [1]. > > Votes are due by 12:00 UTC September 2nd, 2020. > > Only current JDK Committers [2] are eligible to vote on this > nomination. Votes must be cast in the open by replying to this > mailing list. > > For Lazy Consensus voting instructions, see [3]. > > Best regards, > > -- daniel > > [1] > http://hg.openjdk.java.net/jdk/jdk/search/?rev=keyword%28rahul.r.yadav%40oracle.com%29%20or%20author%28ryadav%29&revcount=20 > > [2] http://openjdk.java.net/census > [3] http://openjdk.java.net/bylaws#lazy-consensus From chris.hegarty at oracle.com Wed Aug 19 10:00:55 2020 From: chris.hegarty at oracle.com (Chris Hegarty) Date: Wed, 19 Aug 2020 11:00:55 +0100 Subject: CFV: New JDK Committer: Rahul Yadav In-Reply-To: References: Message-ID: Vote: YES -Chris. > On 19 Aug 2020, at 10:51, Daniel Fuchs wrote: > > Hi, > > I hereby nominate Rahul Yadav (ryadav) to JDK Committer. From sean.coffey at oracle.com Wed Aug 19 10:15:51 2020 From: sean.coffey at oracle.com (=?UTF-8?Q?Se=c3=a1n_Coffey?=) Date: Wed, 19 Aug 2020 11:15:51 +0100 Subject: CFV: New JDK Committer: Rahul Yadav In-Reply-To: References: Message-ID: <9c96be94-79b0-3a46-3121-71d59d625fae@oracle.com> Vote: yes regards, Sean. On 19/08/2020 10:51, Daniel Fuchs wrote: > Hi, > > I hereby nominate Rahul Yadav (ryadav) to JDK Committer. > > Rahul is a member of the java core libraries team at Oracle. > Rahul already contributed 14 fixes to the JDK project [1]. > > Votes are due by 12:00 UTC September 2nd, 2020. > > Only current JDK Committers [2] are eligible to vote on this > nomination. Votes must be cast in the open by replying to this > mailing list. > > For Lazy Consensus voting instructions, see [3]. > > Best regards, > > -- daniel > > [1] > http://hg.openjdk.java.net/jdk/jdk/search/?rev=keyword%28rahul.r.yadav%40oracle.com%29%20or%20author%28ryadav%29&revcount=20 > > [2] http://openjdk.java.net/census > [3] http://openjdk.java.net/bylaws#lazy-consensus From LANCE.ANDERSEN at ORACLE.COM Wed Aug 19 11:29:23 2020 From: LANCE.ANDERSEN at ORACLE.COM (Lance Andersen) Date: Wed, 19 Aug 2020 07:29:23 -0400 Subject: CFV: New JDK Committer: Rahul Yadav In-Reply-To: References: Message-ID: <3CF23F16-DDD6-4321-A040-720A99DFBBD4@ORACLE.COM> Vote:yes > On Aug 19, 2020, at 5:51 AM, Daniel Fuchs wrote: > > Hi, > > I hereby nominate Rahul Yadav (ryadav) to JDK Committer. > > Rahul is a member of the java core libraries team at Oracle. > Rahul already contributed 14 fixes to the JDK project [1]. > > Votes are due by 12:00 UTC September 2nd, 2020. > > Only current JDK Committers [2] are eligible to vote on this > nomination. Votes must be cast in the open by replying to this > mailing list. > > For Lazy Consensus voting instructions, see [3]. > > Best regards, > > -- daniel > > [1] http://hg.openjdk.java.net/jdk/jdk/search/?rev=keyword%28rahul.r.yadav%40oracle.com%29%20or%20author%28ryadav%29&revcount=20 > > [2] http://openjdk.java.net/census > [3] http://openjdk.java.net/bylaws#lazy-consensus Best Lance ------------------ Lance Andersen| Principal Member of Technical Staff | +1.781.442.2037 Oracle Java Engineering 1 Network Drive Burlington, MA 01803 Lance.Andersen at oracle.com From peter.levart at gmail.com Wed Aug 19 11:35:24 2020 From: peter.levart at gmail.com (Peter Levart) Date: Wed, 19 Aug 2020 13:35:24 +0200 Subject: RFC (round 1), JEP draft: Low-level Object layout introspection methods In-Reply-To: <1513c60a-6df4-1ee5-d15b-3cbe9df6aa97@oracle.com> References: <6a9abead-1bc6-336d-b11c-6e6e9ab8983f@redhat.com> <040dac9d-dbe7-6cac-9c1a-59c3bd8a60e6@gmail.com> <50c49f3f-00fc-7142-2627-62ddf17d6ea9@redhat.com> <1513c60a-6df4-1ee5-d15b-3cbe9df6aa97@oracle.com> Message-ID: <0dd03aeb-6238-8c86-3639-3d9fd97ad9ea@gmail.com> Hi, On 8/17/20 5:13 PM, Erik ?sterlund wrote: > Perhaps, another way of answering the same question without the > addressOf API, is to have an estimatedDistanceInBytes(Object o1, > Object o2) or even an > estimatedDistanceInBytes(Object o1, Field f1, Object o2, Field f2) > API. This API could run in a mode where there are no > safepoints, and ensure that none of the above mentioned "impossible" > situations actually remain impossible, and hence more effectively > actually answering the high-level question. > It would also importantly never expose any addresses or offsets, while > still allowing various locality heuristics to be computed by > performance people. ...still, if you wanted to obtain the estimated distances among all pairs of (object, field)-s in a set of objects, individually query-ing for each pair would not give you a snapshot view for the whole set. If this is important, one would perhaps have to have an API like this: record ObjectField(Object object, Field field) {} long[][] estimatedDistancesInBytes(ObjectField[] objectFields) this API returns a matrix of distances (let's say lower triangle without diagonal), a total of n*(n-1)/2 distances for n ObjectField instances. This requires quadratic space. For 1M objects, the API would return ~ 1/2 a trillion distances (4T bytes). This might be a problem. one could argue that if distances are a signed number (not absolute), so that distance(f1, f2) == -distance(f2, f1), the API could also be like: long[] estimatedDistancesInBytes(ObjectField[] objectFields) where the i-th element d[i] of the returned array would represent a distance(f[i], f[i+1]). To get a distance from f[x] to f[y] (y >= x), you would then just sum(d[i]; x <= i <= y). OTOH, an API like: long[] estimatedAddressesOf(ObjectField[] objectFields) would also work and would not require summing y-x+1 numbers to get a distance from f[x] to f[y] but just calculate one difference: a[y] - a[x]. If addresses are mangled (each is added the same random offset), the API doesn't expose any more of internals than alternative APIs that returns distances. I would also say that exposing distance(s) admits existence of points with location (i.e. addresses) so even philosophically you don't expose more internals. Regards, Peter From peter.levart at gmail.com Wed Aug 19 11:46:53 2020 From: peter.levart at gmail.com (Peter Levart) Date: Wed, 19 Aug 2020 13:46:53 +0200 Subject: RFC (round 1), JEP draft: Low-level Object layout introspection methods In-Reply-To: <0dd03aeb-6238-8c86-3639-3d9fd97ad9ea@gmail.com> References: <6a9abead-1bc6-336d-b11c-6e6e9ab8983f@redhat.com> <040dac9d-dbe7-6cac-9c1a-59c3bd8a60e6@gmail.com> <50c49f3f-00fc-7142-2627-62ddf17d6ea9@redhat.com> <1513c60a-6df4-1ee5-d15b-3cbe9df6aa97@oracle.com> <0dd03aeb-6238-8c86-3639-3d9fd97ad9ea@gmail.com> Message-ID: <3c19774c-e49a-db01-802c-84c035f9e4f6@gmail.com> On 8/19/20 1:35 PM, Peter Levart wrote: > Hi, > > On 8/17/20 5:13 PM, Erik ?sterlund wrote: >> Perhaps, another way of answering the same question without the >> addressOf API, is to have an estimatedDistanceInBytes(Object o1, >> Object o2) or even an >> estimatedDistanceInBytes(Object o1, Field f1, Object o2, Field f2) >> API. This API could run in a mode where there are no >> safepoints, and ensure that none of the above mentioned "impossible" >> situations actually remain impossible, and hence more effectively >> actually answering the high-level question. >> It would also importantly never expose any addresses or offsets, >> while still allowing various locality heuristics to be computed by >> performance people. > > ...still, if you wanted to obtain the estimated distances among all > pairs of (object, field)-s in a set of objects, individually query-ing > for each pair would not give you a snapshot view for the whole set. If > this is important, one would perhaps have to have an API like this: > > record ObjectField(Object object, Field field) {} > > long[][] estimatedDistancesInBytes(ObjectField[] objectFields) > > this API returns a matrix of distances (let's say lower triangle > without diagonal), a total of n*(n-1)/2 distances for n ObjectField > instances. This requires quadratic space. For 1M objects, the API > would return ~ 1/2 a trillion distances (4T bytes). This might be a > problem. > > one could argue that if distances are a signed number (not absolute), > so that distance(f1, f2) == -distance(f2, f1), the API could also be > like: > > long[] estimatedDistancesInBytes(ObjectField[] objectFields) > > where the i-th element d[i] of the returned array would represent a > distance(f[i], f[i+1]). To get a distance from f[x] to f[y] (y >= x), > you would then just sum(d[i]; x <= i <= y). > > OTOH, an API like: > > long[] estimatedAddressesOf(ObjectField[] objectFields) > > would also work and would not require summing y-x+1 numbers to get a > distance from f[x] to f[y] but just calculate one difference: a[y] - > a[x]. If addresses are mangled (each is added the same random offset), > the API doesn't expose any more of internals than alternative APIs > that returns distances. I would also say that exposing distance(s) > admits existence of points with location (i.e. addresses) so even > philosophically you don't expose more internals. > > > Regards, Peter > Fourth variant could be an API like: long[] estimatedDistancesInBytes(ObjectField[] objectFields) where the i-th element d[i] of the returned array represents a distance(f[0], f[i]). This is similar to addressessOf where the added offset to each returned address is -addressOf(f[0]). Peter From peter.levart at gmail.com Wed Aug 19 12:10:36 2020 From: peter.levart at gmail.com (Peter Levart) Date: Wed, 19 Aug 2020 14:10:36 +0200 Subject: RFC (round 1), JEP draft: Low-level Object layout introspection methods In-Reply-To: <3c19774c-e49a-db01-802c-84c035f9e4f6@gmail.com> References: <6a9abead-1bc6-336d-b11c-6e6e9ab8983f@redhat.com> <040dac9d-dbe7-6cac-9c1a-59c3bd8a60e6@gmail.com> <50c49f3f-00fc-7142-2627-62ddf17d6ea9@redhat.com> <1513c60a-6df4-1ee5-d15b-3cbe9df6aa97@oracle.com> <0dd03aeb-6238-8c86-3639-3d9fd97ad9ea@gmail.com> <3c19774c-e49a-db01-802c-84c035f9e4f6@gmail.com> Message-ID: <77b39ab0-9344-37f3-2c84-65b21165853b@gmail.com> Now all these APIs that return distances (except maybe mangledAddressesOf) don't give any information about alignment to power of 2 address multiples (cache lines for example). So if we modify the last (4th) API variant for distances to also return alignments: long[] estimatedDistancesAndAlignmentsInBytes(ObjectField[] objectFields, int bits); // 0 < bits <= 2^16 for example to not expose too much of real addresses where r[2*i] of the returned array represents a distance: realAddressOf(f[i]) - realAddressOf(f[0]) and r[2*i+1] of the returned array represents an alignment: realAddressOf(f[i]) & ((1L << bits) - 1) ...then I think everything needed for performance analysis can be derived from this information. Regards, Peter On 8/19/20 1:46 PM, Peter Levart wrote: > > > On 8/19/20 1:35 PM, Peter Levart wrote: >> Hi, >> >> On 8/17/20 5:13 PM, Erik ?sterlund wrote: >>> Perhaps, another way of answering the same question without the >>> addressOf API, is to have an estimatedDistanceInBytes(Object o1, >>> Object o2) or even an >>> estimatedDistanceInBytes(Object o1, Field f1, Object o2, Field f2) >>> API. This API could run in a mode where there are no >>> safepoints, and ensure that none of the above mentioned "impossible" >>> situations actually remain impossible, and hence more effectively >>> actually answering the high-level question. >>> It would also importantly never expose any addresses or offsets, >>> while still allowing various locality heuristics to be computed by >>> performance people. >> >> ...still, if you wanted to obtain the estimated distances among all >> pairs of (object, field)-s in a set of objects, individually >> query-ing for each pair would not give you a snapshot view for the >> whole set. If this is important, one would perhaps have to have an >> API like this: >> >> record ObjectField(Object object, Field field) {} >> >> long[][] estimatedDistancesInBytes(ObjectField[] objectFields) >> >> this API returns a matrix of distances (let's say lower triangle >> without diagonal), a total of n*(n-1)/2 distances for n ObjectField >> instances. This requires quadratic space. For 1M objects, the API >> would return ~ 1/2 a trillion distances (4T bytes). This might be a >> problem. >> >> one could argue that if distances are a signed number (not absolute), >> so that distance(f1, f2) == -distance(f2, f1), the API could also be >> like: >> >> long[] estimatedDistancesInBytes(ObjectField[] objectFields) >> >> where the i-th element d[i] of the returned array would represent a >> distance(f[i], f[i+1]). To get a distance from f[x] to f[y] (y >= x), >> you would then just sum(d[i]; x <= i <= y). >> >> OTOH, an API like: >> >> long[] estimatedAddressesOf(ObjectField[] objectFields) >> >> would also work and would not require summing y-x+1 numbers to get a >> distance from f[x] to f[y] but just calculate one difference: a[y] - >> a[x]. If addresses are mangled (each is added the same random >> offset), the API doesn't expose any more of internals than >> alternative APIs that returns distances. I would also say that >> exposing distance(s) admits existence of points with location (i.e. >> addresses) so even philosophically you don't expose more internals. >> >> >> Regards, Peter >> > Fourth variant could be an API like: > > long[] estimatedDistancesInBytes(ObjectField[] objectFields) > > where the i-th element d[i] of the returned array represents a > distance(f[0], f[i]). > > This is similar to addressessOf where the added offset to each > returned address is -addressOf(f[0]). > > Peter > From peter.levart at gmail.com Wed Aug 19 13:08:13 2020 From: peter.levart at gmail.com (Peter Levart) Date: Wed, 19 Aug 2020 15:08:13 +0200 Subject: RFC (round 1), JEP draft: Low-level Object layout introspection methods In-Reply-To: <6a9abead-1bc6-336d-b11c-6e6e9ab8983f@redhat.com> References: <6a9abead-1bc6-336d-b11c-6e6e9ab8983f@redhat.com> Message-ID: <176a4a61-2a1c-aba8-7cb1-51b7793e2b66@gmail.com> On 8/11/20 12:22 PM, Aleksey Shipilev wrote: > ...and it is not clear what is your position on: > public static long fieldSizeOf(Field field); Perhaps an alternative. Each Field has a type (represented by: Class Field.getType()). So adding a method to Class would also be possible. Like: long getFieldSizeInBytes();? // how many bytes does value of that type take when placed on heap (for identity classes, this would be the number of bytes a pointer takes - compressed taken into account, for inline classes this would give the footprint of the fields of that inline class with all gaps included). Alternatively the API could be specified somewhere else as a static method: long getSizeInBytesForFieldOfType(Class fieldType); This assumes that fields of the same type always take the same size in the same VM. Regards, Peter From Roger.Riggs at oracle.com Wed Aug 19 13:39:30 2020 From: Roger.Riggs at oracle.com (Roger Riggs) Date: Wed, 19 Aug 2020 09:39:30 -0400 Subject: CFV: New JDK Committer: Rahul Yadav In-Reply-To: References: Message-ID: <8bb122e4-8de4-d19e-f141-3142dd5609e5@oracle.com> Vote: Yes On 8/19/20 5:51 AM, Daniel Fuchs wrote: > I hereby nominate Rahul Yadav (ryadav) to JDK Committer. From pavel.rappo at oracle.com Wed Aug 19 14:34:24 2020 From: pavel.rappo at oracle.com (Pavel Rappo) Date: Wed, 19 Aug 2020 15:34:24 +0100 Subject: CFV: New JDK Committer: Rahul Yadav In-Reply-To: References: Message-ID: Vote: yes > On 19 Aug 2020, at 10:51, Daniel Fuchs wrote: > > Hi, > > I hereby nominate Rahul Yadav (ryadav) to JDK Committer. > > Rahul is a member of the java core libraries team at Oracle. > Rahul already contributed 14 fixes to the JDK project [1]. > > Votes are due by 12:00 UTC September 2nd, 2020. > > Only current JDK Committers [2] are eligible to vote on this > nomination. Votes must be cast in the open by replying to this > mailing list. > > For Lazy Consensus voting instructions, see [3]. > > Best regards, > > -- daniel > > [1] http://hg.openjdk.java.net/jdk/jdk/search/?rev=keyword%28rahul.r.yadav%40oracle.com%29%20or%20author%28ryadav%29&revcount=20 > > [2] http://openjdk.java.net/census > [3] http://openjdk.java.net/bylaws#lazy-consensus From dmitry.markov at oracle.com Wed Aug 19 14:36:48 2020 From: dmitry.markov at oracle.com (Dmitry Markov) Date: Wed, 19 Aug 2020 15:36:48 +0100 Subject: CFV: New JDK Committer: Rahul Yadav In-Reply-To: References: Message-ID: <7554BF2E-57DF-48FA-81AF-FA1417785737@oracle.com> Vote: Yes Regards, Dmitry > On 19 Aug 2020, at 10:51, Daniel Fuchs wrote: > > Hi, > > I hereby nominate Rahul Yadav (ryadav) to JDK Committer. > > Rahul is a member of the java core libraries team at Oracle. > Rahul already contributed 14 fixes to the JDK project [1]. > > Votes are due by 12:00 UTC September 2nd, 2020. > > Only current JDK Committers [2] are eligible to vote on this > nomination. Votes must be cast in the open by replying to this > mailing list. > > For Lazy Consensus voting instructions, see [3]. > > Best regards, > > -- daniel > > [1] http://hg.openjdk.java.net/jdk/jdk/search/?rev=keyword%28rahul.r.yadav%40oracle.com%29%20or%20author%28ryadav%29&revcount=20 > > [2] http://openjdk.java.net/census > [3] http://openjdk.java.net/bylaws#lazy-consensus From mandy.chung at oracle.com Wed Aug 19 16:16:12 2020 From: mandy.chung at oracle.com (Mandy Chung) Date: Wed, 19 Aug 2020 09:16:12 -0700 Subject: CFV: New JDK Committer: Rahul Yadav In-Reply-To: References: Message-ID: <8b887aad-fc2e-e3f7-3369-752674c9125c@oracle.com> Vote: yes Mandy On 8/19/20 2:51 AM, Daniel Fuchs wrote: > Hi, > > I hereby nominate Rahul Yadav (ryadav) to JDK Committer. > > Rahul is a member of the java core libraries team at Oracle. > Rahul already contributed 14 fixes to the JDK project [1]. > > Votes are due by 12:00 UTC September 2nd, 2020. > > Only current JDK Committers [2] are eligible to vote on this > nomination. Votes must be cast in the open by replying to this > mailing list. > > For Lazy Consensus voting instructions, see [3]. > > Best regards, > > -- daniel > > [1] > http://hg.openjdk.java.net/jdk/jdk/search/?rev=keyword%28rahul.r.yadav%40oracle.com%29%20or%20author%28ryadav%29&revcount=20 > > [2] http://openjdk.java.net/census > [3] http://openjdk.java.net/bylaws#lazy-consensus From naoto.sato at oracle.com Wed Aug 19 16:35:33 2020 From: naoto.sato at oracle.com (naoto.sato at oracle.com) Date: Wed, 19 Aug 2020 09:35:33 -0700 Subject: CFV: New JDK Committer: Rahul Yadav In-Reply-To: References: Message-ID: <951414af-c06e-b4a8-0218-14ffcd533e9d@oracle.com> Vote: yes Naoto On 8/19/20 2:51 AM, Daniel Fuchs wrote: > Hi, > > I hereby nominate Rahul Yadav (ryadav) to JDK Committer. > > Rahul is a member of the java core libraries team at Oracle. > Rahul already contributed 14 fixes to the JDK project [1]. > > Votes are due by 12:00 UTC September 2nd, 2020. > > Only current JDK Committers [2] are eligible to vote on this > nomination. Votes must be cast in the open by replying to this > mailing list. > > For Lazy Consensus voting instructions, see [3]. > > Best regards, > > -- daniel > > [1] > http://hg.openjdk.java.net/jdk/jdk/search/?rev=keyword%28rahul.r.yadav%40oracle.com%29%20or%20author%28ryadav%29&revcount=20 > > > [2] http://openjdk.java.net/census > [3] http://openjdk.java.net/bylaws#lazy-consensus From brent.christian at oracle.com Wed Aug 19 21:13:34 2020 From: brent.christian at oracle.com (Brent Christian) Date: Wed, 19 Aug 2020 14:13:34 -0700 Subject: CFV: New JDK Committer: Rahul Yadav In-Reply-To: References: Message-ID: Vote: Yes -Brent On 8/19/20 2:51 AM, Daniel Fuchs wrote: > Hi, > > I hereby nominate Rahul Yadav (ryadav) to JDK Committer. > > Rahul is a member of the java core libraries team at Oracle. > Rahul already contributed 14 fixes to the JDK project [1]. > > Votes are due by 12:00 UTC September 2nd, 2020. > > Only current JDK Committers [2] are eligible to vote on this > nomination. Votes must be cast in the open by replying to this > mailing list. > > For Lazy Consensus voting instructions, see [3]. > > Best regards, > > -- daniel > > [1] > http://hg.openjdk.java.net/jdk/jdk/search/?rev=keyword%28rahul.r.yadav%40oracle.com%29%20or%20author%28ryadav%29&revcount=20 > > > [2] http://openjdk.java.net/census > [3] http://openjdk.java.net/bylaws#lazy-consensus From brian.goetz at oracle.com Wed Aug 19 22:52:07 2020 From: brian.goetz at oracle.com (Brian Goetz) Date: Wed, 19 Aug 2020 18:52:07 -0400 Subject: RFC (round 1), JEP draft: Low-level Object layout introspection methods In-Reply-To: <144279d8-a044-4957-acb6-b477cec4ec54@redhat.com> References: <6a9abead-1bc6-336d-b11c-6e6e9ab8983f@redhat.com> <040dac9d-dbe7-6cac-9c1a-59c3bd8a60e6@gmail.com> <50c49f3f-00fc-7142-2627-62ddf17d6ea9@redhat.com> <5b41c949-fbe4-a339-35b0-6b7b53b7f299@gmail.com> <4dd3ebdf-4a9d-014f-bf99-bda551263501@fiolino.de> <144279d8-a044-4957-acb6-b477cec4ec54@redhat.com> Message-ID: <68ccc246-4154-30cd-0b83-d61344c49054@oracle.com> On 8/17/2020 11:57 AM, Andrew Dinn wrote: > > I completely agree with this view. I fear Brian's critique has > apportioned blame to the wrong target. The problem here is not the > exposure of raw addresses (also offsets, etc) that Aleksey's spec > enables, it is the existence of a Java API that allows them to be used > as raw addresses (etc). Take away that API (which is a task that is very > much in hand) and it is hard to see why there is a problem with the > exposure. I think you have misapportioned my apportioning of blame.?? It is not either-or; *BOTH* APIs are blameworthy.? We happen to already have the latter (and this sucks, and we're in the middle of a decade-long, expensive process of getting rid of it), but that doesn't mean "if we didn't have Unsafe, this would be perfectly fine." But, if you want to re-propose this API after Unsafe and equivalent JNI holes have been categorically plugged, we can reevaluate this idea on its own without the reflected blame from other APIs, by all means.? I think the answer would still be "it was a bad idea when Unsafe did it, and it's still a bad idea", but by all means, let's run that experiment.? (See you in a decade!) From michael.x.mcmahon at oracle.com Thu Aug 20 08:00:42 2020 From: michael.x.mcmahon at oracle.com (Michael McMahon) Date: Thu, 20 Aug 2020 09:00:42 +0100 Subject: CFV: New JDK Committer: Rahul Yadav In-Reply-To: References: Message-ID: Vote: Yes - Michael On 19/08/2020 10:51, Daniel Fuchs wrote: > Hi, > > I hereby nominate Rahul Yadav (ryadav) to JDK Committer. > > Rahul is a member of the java core libraries team at Oracle. > Rahul already contributed 14 fixes to the JDK project [1]. > > Votes are due by 12:00 UTC September 2nd, 2020. > > Only current JDK Committers [2] are eligible to vote on this > nomination. Votes must be cast in the open by replying to this > mailing list. > > For Lazy Consensus voting instructions, see [3]. > > Best regards, > > -- daniel > > [1] > http://hg.openjdk.java.net/jdk/jdk/search/?rev=keyword%28rahul.r.yadav%40oracle.com%29%20or%20author%28ryadav%29&revcount=20 > > [2] http://openjdk.java.net/census > [3] http://openjdk.java.net/bylaws#lazy-consensus From mark.reinhold at oracle.com Thu Aug 20 21:40:00 2020 From: mark.reinhold at oracle.com (mark.reinhold at oracle.com) Date: Thu, 20 Aug 2020 14:40:00 -0700 (PDT) Subject: JEP proposed to target JDK 16: 338: Vector API (Incubator) Message-ID: <20200820214000.992C93BEC90@eggemoggin.niobe.net> The following JEP is proposed to target JDK 16: 338: Vector API (Incubator) https://openjdk.java.net/jeps/338 Feedback on this proposal from JDK Project Committers and Reviewers [1] is more than welcome, as are reasoned objections. If no such objections are raised by 23:00 UTC on Thursday, 27 August, or if they?re raised and then satisfactorily answered, then per the JEP 2.0 process proposal [2] I?ll target this JEP to JDK 16. - Mark [1] https://openjdk.java.net/census#jdk [2] https://cr.openjdk.java.net/~mr/jep/jep-2.0-02.html From huizhe.wang at oracle.com Fri Aug 21 02:10:08 2020 From: huizhe.wang at oracle.com (Joe Wang) Date: Thu, 20 Aug 2020 19:10:08 -0700 Subject: CFV: New JDK Committer: Rahul Yadav In-Reply-To: References: Message-ID: <9cefe535-f1a8-7a8e-ebf6-be8931c3027e@oracle.com> Vote: YES Best, Joe On 8/19/20 2:51 AM, Daniel Fuchs wrote: > Hi, > > I hereby nominate Rahul Yadav (ryadav) to JDK Committer. From jai.forums2013 at gmail.com Fri Aug 21 14:05:01 2020 From: jai.forums2013 at gmail.com (Jaikiran Pai) Date: Fri, 21 Aug 2020 19:35:01 +0530 Subject: Survey : On the jinfo, jmap, jstack serviceability tools In-Reply-To: <260b8d05-43f0-f8e8-107f-5ac4784d62ab@oracle.com> References: <260b8d05-43f0-f8e8-107f-5ac4784d62ab@oracle.com> Message-ID: <0024e934-2784-71d0-f732-736b492e844d@gmail.com> Are the results of this survey now available? -Jaikiran On 16/06/20 1:12 am, Stephen Fitch wrote: > Hello: > > We are considering deprecation and (eventual) removal of the jinfo, > jmap, jstack - (aka ?j* tools?) and building out a future foundation > for some aspect of serviceability on jcmd, however we don?t have a lot > of data about how how these tools are used in practice, especially > outside of Oracle. > > Therefore, we have created a survey [1] to gather more information and > help us evaluate and understand how others are using these tools in > the JDK.If you have used, or have (support) processes that utilize > these j*commands, then we would definitely appreciate a completed survey. > > We are specifically interested in your use-cases and how these tools > are effective for you in resolving JVM issues. > > The survey will remain open through July 15 2020. The results of the > survey will be made public after the survey closes. > > Thank you very much for your time and support. > > [1] https://www.questionpro.com/t/AQk5jZhiww From Sergey.Bylokhov at oracle.com Sat Aug 22 03:24:55 2020 From: Sergey.Bylokhov at oracle.com (Sergey Bylokhov) Date: Fri, 21 Aug 2020 20:24:55 -0700 Subject: RFR[8250855]: 'Address reliance on default constructors in the Java 2D APIs' In-Reply-To: References: Message-ID: Hi, Conor. The latest agreement in the client team for such bugs is to use protected constructors for the abstract classes. Something like this: https://cr.openjdk.java.net/~psadhukhan/8250850/webrev.1/src/java.desktop/share/classes/javax/swing/plaf/metal/MetalTheme.java.sdiff.html PS you need to file a CSR for this change. On 17.08.2020 03:11, Conor Cleary wrote: > Hi all, > > Looking for reviewers for JDK-8250855, 'Address reliance on default constructors in the Java 2D APIs'. > > This patch addresses the reliance on default constructors in the following packages: > > * java.awt.Image > * java.awt.PrintJob > * java.awt.font.GlyphVector > * java.awt.font.LayoutPath > * java.awt.font.LineMetrics > * java.awt.image.AbstractMultiResolutionImage > * java.awt.image.BufferStrategy > * java.awt.image.ImageFilter > * java.awt.image.RGBImageFilter > * java.awt.image.VolatileImage > * javax.print.PrintServiceLookup > * javax.print.ServiceUI > * javax.print.ServiceUIFactory > * javax.print.StreamPrintServiceFactory > * javax.print.event.PrintJobAdapter > > The patch places simple constructors in all of these packages. > > * bug: https://bugs.openjdk.java.net/browse/JDK-8250855 > * webrev: http://cr.openjdk.java.net/~ccleary/issues/webrevs-store/8250855/webrevs/webrev.00/ > > > Conor > -- Best regards, Sergey. From fw at deneb.enyo.de Sun Aug 23 20:37:26 2020 From: fw at deneb.enyo.de (Florian Weimer) Date: Sun, 23 Aug 2020 22:37:26 +0200 Subject: RFC (round 1), JEP draft: Low-level Object layout introspection methods In-Reply-To: <6a9abead-1bc6-336d-b11c-6e6e9ab8983f@redhat.com> (Aleksey Shipilev's message of "Tue, 11 Aug 2020 12:22:35 +0200") References: <6a9abead-1bc6-336d-b11c-6e6e9ab8983f@redhat.com> Message-ID: <87v9h914l5.fsf@mid.deneb.enyo.de> * Aleksey Shipilev: > I can see that the JEP can be split in "non-controversial" (sizeOf, > deepSizeOf) and "controversial" (addressOf, fieldOffsetOf) > parts. For the process overhead reasons, I'd push forward with just > one JEP at the moment, though. Are there JVMs out there where naive implementation of deepSizeOf (with something like IdentityHashMap in the background) would itself change object layout and sizes? A theoretical implementation of System.identityHashCode() might allocate a word for the identity hash only after the method has been applied to the object and the object has been moved. From forax at univ-mlv.fr Sun Aug 23 21:13:50 2020 From: forax at univ-mlv.fr (Remi Forax) Date: Sun, 23 Aug 2020 23:13:50 +0200 (CEST) Subject: RFC (round 1), JEP draft: Low-level Object layout introspection methods In-Reply-To: <87v9h914l5.fsf@mid.deneb.enyo.de> References: <6a9abead-1bc6-336d-b11c-6e6e9ab8983f@redhat.com> <87v9h914l5.fsf@mid.deneb.enyo.de> Message-ID: <444415579.940.1598217230326.JavaMail.zimbra@u-pem.fr> ----- Mail original ----- > De: "Florian Weimer" > ?: "Aleksey Shipilev" > Cc: "Brian Goetz" , "jdk-dev" > Envoy?: Dimanche 23 Ao?t 2020 22:37:26 > Objet: Re: RFC (round 1), JEP draft: Low-level Object layout introspection methods > * Aleksey Shipilev: > >> I can see that the JEP can be split in "non-controversial" (sizeOf, >> deepSizeOf) and "controversial" (addressOf, fieldOffsetOf) >> parts. For the process overhead reasons, I'd push forward with just >> one JEP at the moment, though. > > Are there JVMs out there where naive implementation of deepSizeOf > (with something like IdentityHashMap in the background) would itself > change object layout and sizes? > > A theoretical implementation of System.identityHashCode() might > allocate a word for the identity hash only after the method has been > applied to the object and the object has been moved. yes, i believe IBM OpenJ9 use/used this exact trick. I remember reading a paper about that. R?mi From volker.simonis at gmail.com Mon Aug 24 13:58:18 2020 From: volker.simonis at gmail.com (Volker Simonis) Date: Mon, 24 Aug 2020 15:58:18 +0200 Subject: http://cr.openjdk.java.net/ seems to be down Message-ID: Hi, I can't access http://cr.openjdk.java.net/ any more. I always get a "The connection to the server was reset while the page was loading" error. It seems that only the web-server is down because I can still sftp into cr.openjdk.java.net. Regards, Volker From tim.bell at oracle.com Mon Aug 24 15:01:20 2020 From: tim.bell at oracle.com (Tim Bell) Date: Mon, 24 Aug 2020 08:01:20 -0700 Subject: http://cr.openjdk.java.net/ seems to be down In-Reply-To: References: Message-ID: <7fec5943-d86f-f0ec-a8a7-3d68b49c4aea@oracle.com> On 2020-08-24 06:58, Volker Simonis wrote: > I can't access http://cr.openjdk.java.net/ any more. I always get a > "The connection to the server was reset while the page was loading" > error. I can confirm that the server hosting http://openjdk.java.net, cr.openjdk.java.net, hg.openjdk.java.net, http://jdk.java.net, is very slow at best. Many things I try to do are timing out. > It seems that only the web-server is down because I can still sftp > into cr.openjdk.java.net. I reported an outage. I am escalating with the datacenter operations team. Tim From volker.simonis at gmail.com Mon Aug 24 15:12:39 2020 From: volker.simonis at gmail.com (Volker Simonis) Date: Mon, 24 Aug 2020 17:12:39 +0200 Subject: http://cr.openjdk.java.net/ seems to be down In-Reply-To: <7fec5943-d86f-f0ec-a8a7-3d68b49c4aea@oracle.com> References: <7fec5943-d86f-f0ec-a8a7-3d68b49c4aea@oracle.com> Message-ID: Thanks for the confirmation Tim. I just got a request through to http://openjdk.java.net but it took more than 30 minutes. And I've just noticed that https://hg.openjdk.java.net seems to be affected as well, so it might be good to add that to the escalation as well. Thanks one more time and best regards, Volker On Mon, Aug 24, 2020 at 5:03 PM Tim Bell wrote: > > On 2020-08-24 06:58, Volker Simonis wrote: > > > I can't access http://cr.openjdk.java.net/ any more. I always get a > > "The connection to the server was reset while the page was loading" > > error. > > I can confirm that the server hosting http://openjdk.java.net, > cr.openjdk.java.net, hg.openjdk.java.net, http://jdk.java.net, is very > slow at best. Many things I try to do are timing out. > > > It seems that only the web-server is down because I can still sftp > > into cr.openjdk.java.net. > > I reported an outage. I am escalating with the datacenter operations team. > > Tim From jesper.wilhelmsson at oracle.com Tue Aug 25 00:13:30 2020 From: jesper.wilhelmsson at oracle.com (Jesper Wilhelmsson) Date: Tue, 25 Aug 2020 02:13:30 +0200 Subject: RFR: Updated section on Code Conventions. In-Reply-To: <20200709165133.836046289@eggemoggin.niobe.net> References: <20200622094020.797147833@eggemoggin.niobe.net> <15690ebb-6f03-9014-33fb-7c62f458cdc5@oracle.com> <33317468-7359-b1d1-aa05-0ce673128a2a@oracle.com> <1fb7cf56-8eb5-b73f-8fd2-8a5f852af40a@oracle.com> <4A71B635-C45D-4F95-92A1-33F810CFA8F6@ORACLE.COM> <20200709165133.836046289@eggemoggin.niobe.net> Message-ID: > On 10 Jul 2020, at 01:51, mark.reinhold at oracle.com wrote: >> ... >> >> 2) Small, controlled, set of editors > > Here?s the missing issue: Who would this set of editors be? As I wrote > earlier: > > Not only would we need an editor to spend time on this, and maintain > it for the long haul, but it would inevitably require some of the > limited time of at least some of our most experienced contributors. > Is that the best use of their time? > > I don?t know how to answer this question but I don?t see any qualified > contributors volunteering, and I certainly can?t take it on myself. > > Without an answer to this question, all the others are moot. Hi Mark. Reviving this thread from the past. Before my vacation I sent out this question to some people I think would qualify to be in an editorial board of the Java style guide: "If we were to assemble a set of four-six persons to build an editorial board for the Java Style Guide, would you agree to be part of it?" The following set of people replied that they are interested in participating: Brian Goetz, Paul Sandoz, Stuart Marks, Joe Darcy, Andreas Lundblad, Michael Diamond. I'd be willing to participate myself as well if needed. I hope this shows that there are qualified contributors willing to volunteer and that we should plan for the next step. Thanks, /Jesper From stuart.marks at oracle.com Tue Aug 25 16:49:14 2020 From: stuart.marks at oracle.com (Stuart Marks) Date: Tue, 25 Aug 2020 09:49:14 -0700 Subject: CFV: New JDK Committer: Rahul Yadav In-Reply-To: References: Message-ID: <7a78faa4-6c7b-ff54-a34d-f2261d0221f6@oracle.com> Vote: yes On 8/19/20 2:51 AM, Daniel Fuchs wrote: > Hi, > > I hereby nominate Rahul Yadav (ryadav) to JDK Committer. > > Rahul is a member of the java core libraries team at Oracle. > Rahul already contributed 14 fixes to the JDK project [1]. > > Votes are due by 12:00 UTC September 2nd, 2020. > > Only current JDK Committers [2] are eligible to vote on this > nomination. Votes must be cast in the open by replying to this > mailing list. > > For Lazy Consensus voting instructions, see [3]. > > Best regards, > > -- daniel > > [1] > http://hg.openjdk.java.net/jdk/jdk/search/?rev=keyword%28rahul.r.yadav%40oracle.com%29%20or%20author%28ryadav%29&revcount=20 > > > [2] http://openjdk.java.net/census > [3] http://openjdk.java.net/bylaws#lazy-consensus From fw at deneb.enyo.de Tue Aug 25 17:54:59 2020 From: fw at deneb.enyo.de (Florian Weimer) Date: Tue, 25 Aug 2020 19:54:59 +0200 Subject: RFC (round 1), JEP draft: Low-level Object layout introspection methods In-Reply-To: <444415579.940.1598217230326.JavaMail.zimbra@u-pem.fr> (Remi Forax's message of "Sun, 23 Aug 2020 23:13:50 +0200 (CEST)") References: <6a9abead-1bc6-336d-b11c-6e6e9ab8983f@redhat.com> <87v9h914l5.fsf@mid.deneb.enyo.de> <444415579.940.1598217230326.JavaMail.zimbra@u-pem.fr> Message-ID: <877dtmwqz0.fsf@mid.deneb.enyo.de> * Remi Forax: > ----- Mail original ----- >> De: "Florian Weimer" >> ?: "Aleksey Shipilev" >> Cc: "Brian Goetz" , "jdk-dev" >> Envoy?: Dimanche 23 Ao?t 2020 22:37:26 >> Objet: Re: RFC (round 1), JEP draft: Low-level Object layout introspection methods > >> * Aleksey Shipilev: >> >>> I can see that the JEP can be split in "non-controversial" (sizeOf, >>> deepSizeOf) and "controversial" (addressOf, fieldOffsetOf) >>> parts. For the process overhead reasons, I'd push forward with just >>> one JEP at the moment, though. >> >> Are there JVMs out there where naive implementation of deepSizeOf >> (with something like IdentityHashMap in the background) would itself >> change object layout and sizes? >> >> A theoretical implementation of System.identityHashCode() might >> allocate a word for the identity hash only after the method has been >> applied to the object and the object has been moved. > > yes, i believe IBM OpenJ9 use/used this exact trick. > I remember reading a paper about that. Is this an argument for or against providing an interface like deepSizeOf? 8-) From abdul.kolarkunnu at oracle.com Wed Aug 26 03:36:18 2020 From: abdul.kolarkunnu at oracle.com (abdul.kolarkunnu at oracle.com) Date: Wed, 26 Aug 2020 09:06:18 +0530 Subject: CFV: New JDK Committer: Rahul Yadav In-Reply-To: References: Message-ID: <2e9353c9-01a8-4d23-254e-6c93f075bf42@oracle.com> Vote: yes -Muneer On 19/08/20 3:21 pm, Daniel Fuchs wrote: > Hi, > > I hereby nominate Rahul Yadav (ryadav) to JDK Committer. > > Rahul is a member of the java core libraries team at Oracle. > Rahul already contributed 14 fixes to the JDK project [1]. > > Votes are due by 12:00 UTC September 2nd, 2020. > > Only current JDK Committers [2] are eligible to vote on this > nomination. Votes must be cast in the open by replying to this > mailing list. > > For Lazy Consensus voting instructions, see [3]. > > Best regards, > > -- daniel > > [1] > http://hg.openjdk.java.net/jdk/jdk/search/?rev=keyword%28rahul.r.yadav%40oracle.com%29%20or%20author%28ryadav%29&revcount=20 > > [2] http://openjdk.java.net/census > [3] http://openjdk.java.net/bylaws#lazy-consensus From shade at redhat.com Wed Aug 26 05:31:39 2020 From: shade at redhat.com (Aleksey Shipilev) Date: Wed, 26 Aug 2020 07:31:39 +0200 Subject: RFC (round 1), JEP draft: Low-level Object layout introspection methods In-Reply-To: <877dtmwqz0.fsf@mid.deneb.enyo.de> References: <6a9abead-1bc6-336d-b11c-6e6e9ab8983f@redhat.com> <87v9h914l5.fsf@mid.deneb.enyo.de> <444415579.940.1598217230326.JavaMail.zimbra@u-pem.fr> <877dtmwqz0.fsf@mid.deneb.enyo.de> Message-ID: On 8/25/20 7:54 PM, Florian Weimer wrote: >>> Are there JVMs out there where naive implementation of deepSizeOf >>> (with something like IdentityHashMap in the background) would itself >>> change object layout and sizes? >>> >>> A theoretical implementation of System.identityHashCode() might >>> allocate a word for the identity hash only after the method has been >>> applied to the object and the object has been moved. >> >> yes, i believe IBM OpenJ9 use/used this exact trick. >> I remember reading a paper about that. > > Is this an argument for or against providing an interface like > deepSizeOf? 8-) Au contraire: since interaction with IHC is runtime-specific, it should be in the hands of internal API to figure out the answer. That is, if Hotspot ever implements off-band identity hash code, then it would be a good time to switch the deepSizeOf internals to either avoid IdentityHashSet by doing something else, or accept the interaction whole-sale. This would be an awkward thing to do in a 3rd party library that does not need detecting and handling even more VM quirks. -- Thanks, -Aleksey From thomas.stuefe at gmail.com Thu Aug 27 08:24:24 2020 From: thomas.stuefe at gmail.com (=?UTF-8?Q?Thomas_St=C3=BCfe?=) Date: Thu, 27 Aug 2020 10:24:24 +0200 Subject: jdk/jdk repository transitions to Git, GitHub and Skara: September 5 In-Reply-To: <4a562cb1-0de0-b2b0-9155-f821c0533291@oracle.com> References: <4a562cb1-0de0-b2b0-9155-f821c0533291@oracle.com> Message-ID: Hi Erik, will jdk/sandbox be affected or will that continue to work after the transition (and continue being synced with jdk/jdk)? Thanks, Thomas On Wed, Aug 12, 2020 at 8:57 AM Erik Helin wrote: > Hi all, > > We are now getting closer to the jdk/jdk repository [0] transitioning to > Git, GitHub and Skara. JEP 357 [0] and JEP 369 [1] were targeted to JDK > 16 at the end of May 2020 [2]. It was then also communicated that the > jdk/jdk repository would transition "early September 2020" [3]. > > The exact target date for the transition of the jdk/jdk repository is > now set to Saturday September 5, 2020. We aim to complete the transition > during the weekend of September 5 - 6, 2020. Starting from September 4 > the Mercurial repository for jdk/jdk [0] will become read-only and the > Git repository for jdk/jdk [5] will become read-write on Monday September > 7. > > If you are an OpenJDK Author, Committer or Reviewer, then please make > sure you that you are ready for the transition by following the "Getting > Started" guide on the Skara wiki [7]. In particular, make sure that you > associate your GitHub username and OpenJDK username, see the "Getting > Started" guide for details. Feel free to try out the new tools and make > sure that everything works in the OpenJDK playground repository [8]. > > For those of you doing backports to jdk-updates repositories there is a > Skara CLI tool, git hg-export, that will export commits from an OpenJDK > Git repository in a format expected by hg and the OpenJDK Mercurial > repositories [9]. A "clean" backport of a Git commit looks like the > following: > > $ git clone https://git.openjdk.java.net/jdk > $ git -C jdk hg-export | hg -R /path/to/hg/repo import > > As part of transitioning the jdk/jdk repository we will also transition > the jdk/client repository [6]. There is work ongoing that might result > in jdk/client being archived instead of transitioned, but that work is > not guaranteed to be done by September 5. We will send out more details > on this as we get closer. > > The jdk/submit [10] repository will not be transitioned, the equivalent > functionality is provided by the /test pull request command [11]. > > There are continuously updated read-only mirrors of the jdk/jdk [5], > jdk/client [12] and jdk/sandbox [13] repositories available if you want > to create personal forks ahead of the transition. Note that the > jdk/jdk15 [14] repository will stay on Mercurial as well as the > jdk-updates/jdk15u [15] repository (at least for the time being). > > If you have any questions just send an email to skara-dev at openjdk.java.net > ! > > Thanks, > Erik and Robin > > [0]: https://hg.openjdk.java.net/jdk/jdk > [1]: https://openjdk.java.net/jeps/357 > [2]: https://openjdk.java.net/jeps/369 > [3]: https://mail.openjdk.java.net/pipermail/jdk-dev/2020-May/004335.html > [4]: https://mail.openjdk.java.net/pipermail/jdk-dev/2020-May/004322.html > [5]: https://github.com/openjdk/jdk > [6]: https://hg.openjdk.java.net/jdk/client > [7]: > https://wiki.openjdk.java.net/display/SKARA/Skara#Skara-GettingStarted > [8]: https://github.com/openjdk/playground > [9]: https://wiki.openjdk.java.net/display/SKARA/git-hg-export > [10]: https://hg.openjdk.java.net/jdk/submit > [11]: > > https://wiki.openjdk.java.net/display/SKARA/Pull+Request+Commands#PullRequestCommands-/test > [12]: https://github.com/jdk/client > [13]: https://github.com/jdk/jdk-sandbox > [14]: https://hg.openjdk.java.net/jdk/jdk15 > [15]: https://hg.openjdk.java.net/jdk-updates/jdk15u > From erik.helin at oracle.com Thu Aug 27 09:11:03 2020 From: erik.helin at oracle.com (Erik Helin) Date: Thu, 27 Aug 2020 11:11:03 +0200 Subject: jdk/jdk repository transitions to Git, GitHub and Skara: September 5 In-Reply-To: References: <4a562cb1-0de0-b2b0-9155-f821c0533291@oracle.com> Message-ID: <175b5b8d-a52e-bd2c-8277-306643689c0d@oracle.com> On 8/27/20 10:24 AM, Thomas St?fe wrote: > Hi Erik, Hi Thomas, hope you are doing well! On 8/27/20 10:24 AM, Thomas St?fe wrote: > Will jdk/sandbox be affected or will?that continue to work after the > transition (and continue being synced with jdk/jdk)? The Mercurial repositories jdk/sandbox [0] and jdk/jdk [1] will both become read-only on Sep 4. There is already a read-only Git mirror for the Mercurial jdk/sandbox repository available at: https://git.openjdk.java.net/jdk-sandbox This Git mirror is currently read-only, but on Sep 5 it will become read-write (and will no longer be a mirror). All JDK Committers and above [2] will be given direct write access to the Git jdk-sandbox repository [4] on Sep 5. We won't give you direct write access prior to Sep 5 as it might interfere with the mirroring. Note that you will not be given direct write access to the jdk Git repository [3], instead you will use so-called "pull requests" for contributing changes to the jdk Git repository. See the "Workflow" section on the Skara wiki for more details [5]. And yes, we will continue to automatically sync the master branch of the Git jdk repository [3] to the master branch of the Git jdk-sandbox repository [4]. If you have any more questions, just let me know! Thanks, Erik [0]: https://hg.openjdk.java.net/jdk/sandbox [1]: https://hg.openjdk.java.net/jdk/jdk [2]: https://openjdk.java.net/census#jdk [3]: https://git.openjdk.java.net/jdk [4]: https://git.openjdk.java.net/jdk-sandbox [5]: https://wiki.openjdk.java.net/display/skara#Skara-Workflow > Thanks, Thomas > > > On Wed, Aug 12, 2020 at 8:57 AM Erik Helin > wrote: > > Hi all, > > We are now getting closer to the jdk/jdk repository [0] > transitioning to > Git, GitHub and Skara. JEP 357 [0] and JEP 369 [1] were targeted to JDK > 16 at the end of May 2020 [2]. It was then also communicated that the > jdk/jdk repository would transition "early September 2020" [3]. > > The exact target date for the transition of the jdk/jdk repository is > now set to Saturday September 5, 2020. We aim to complete the > transition > during the weekend of September 5 - 6, 2020. Starting from September 4 > the Mercurial repository for jdk/jdk [0] will become read-only and the > Git repository for jdk/jdk [5] will become read-write on Monday > September 7. > > If you are an OpenJDK Author, Committer or Reviewer, then please make > sure you that you are ready for the transition by following the > "Getting > Started" guide on the Skara wiki [7]. In particular, make sure that you > associate your GitHub username and OpenJDK username, see the "Getting > Started" guide for details. Feel free to try out the new tools and make > sure that everything works in the OpenJDK playground repository [8]. > > For those of you doing backports to jdk-updates repositories there is a > Skara CLI tool, git hg-export, that will export commits from an OpenJDK > Git repository in a format expected by hg and the OpenJDK Mercurial > repositories [9]. A "clean" backport of a Git commit looks like the > following: > > $ git clone https://git.openjdk.java.net/jdk > $ git -C jdk hg-export | hg -R /path/to/hg/repo import > > As part of transitioning the jdk/jdk repository we will also transition > the jdk/client repository [6]. There is work ongoing that might result > in jdk/client being archived instead of transitioned, but that work is > not guaranteed to be done by September 5. We will send out more details > on this as we get closer. > > The jdk/submit [10] repository will not be transitioned, the equivalent > functionality is provided by the /test pull request command [11]. > > There are continuously updated read-only mirrors of the jdk/jdk [5], > jdk/client [12] and jdk/sandbox [13] repositories available if you want > to create personal forks ahead of the transition. Note that the > jdk/jdk15 [14] repository will stay on Mercurial as well as the > jdk-updates/jdk15u [15] repository (at least for the time being). > > If you have any questions just send an email to > skara-dev at openjdk.java.net ! > > Thanks, > Erik and Robin > > [0]: https://hg.openjdk.java.net/jdk/jdk > [1]: https://openjdk.java.net/jeps/357 > [2]: https://openjdk.java.net/jeps/369 > [3]: > https://mail.openjdk.java.net/pipermail/jdk-dev/2020-May/004335.html > [4]: > https://mail.openjdk.java.net/pipermail/jdk-dev/2020-May/004322.html > [5]: https://github.com/openjdk/jdk > [6]: https://hg.openjdk.java.net/jdk/client > [7]: > https://wiki.openjdk.java.net/display/SKARA/Skara#Skara-GettingStarted > [8]: https://github.com/openjdk/playground > [9]: https://wiki.openjdk.java.net/display/SKARA/git-hg-export > [10]: https://hg.openjdk.java.net/jdk/submit > [11]: > https://wiki.openjdk.java.net/display/SKARA/Pull+Request+Commands#PullRequestCommands-/test > [12]: https://github.com/jdk/client > [13]: https://github.com/jdk/jdk-sandbox > [14]: https://hg.openjdk.java.net/jdk/jdk15 > [15]: https://hg.openjdk.java.net/jdk-updates/jdk15u > From robin.westberg at oracle.com Thu Aug 27 10:34:19 2020 From: robin.westberg at oracle.com (Robin Westberg) Date: Thu, 27 Aug 2020 12:34:19 +0200 Subject: Request for assistance: Verify and update mailing list filter rules for jdk/jdk in preparation for Skara transition Message-ID: <568BB329-6F50-43B4-BE1D-3A9D7EA60F79@oracle.com> Hi all, As part of transitioning the jdk/jdk repository to Git with project Skara, we have created a set of rules that determine which mailing list(s) should be the default recipient of a review request, depending on which files are changed. The initial version of these rules was created by looking at historical commits and matching them with existing mailing list review threads. This has produced a reasonable basis, but it can most certainly be made better with some additional manual curating. Therefore, it would be very helpful if people with good knowledge of the various subsystems and source files that make up the JDK would be willing to take a look at these rules, and also suggest improvements where needed. In addition, lists like [1] would also be very useful insofar they exist. The current version of these rules is located in a JSON file in the Skara repository at [2]. In order to check the validity of the rules, there is also a CLI tool that can be used to apply it to either a subset of files or existing commits and produce a suggestion [3] [4]. If you are interested in helping out with curating these rules, these are the steps to get started: 1. Install the Skara CLI tools: https://wiki.openjdk.java.net/display/SKARA/CLI+Tools 2. Locate a suitable clone of the jdk/jdk repository (either Mercurial or Git is fine) 3. Change (cd) to the root of your jdk/jdk repository 3. Run the ?debug mlrules? command on your favorite subset of files, for example like this (use the actual location of jdk.json on your system): $ git skara debug mlrules -v ~/git/skara/config/mailinglist/rules/jdk.json src/hotspot/share/jfr/ Reading rules file... src/hotspot/share/jfr/dcmd: [hotspot-jfr-dev] src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp: [hotspot-jfr-dev] src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.hpp: [hotspot-jfr-dev] src/hotspot/share/jfr/instrumentation/jfrJvmtiAgent.cpp: [hotspot-jfr-dev, serviceability-dev] ? Final list suggestion is: [hotspot-jfr-dev, serviceability-dev] The command accepts multiple folder and/or file names to make it possible to simulate a potential change to a given set of files: $ git skara debug mlrules -v ../skara/config/mailinglist/rules/jdk.json doc/ide.md src/hotspot/cpu/x86/x86.ad src/hotspot/os/linux/gc/z/zNUMA_linux.cpp Reading rules file... doc: [build-dev] src/hotspot/cpu: [hotspot-compiler-dev] src/hotspot/os: [hotspot-runtime-dev, hotspot-gc-dev] Combined list suggestion: [build-dev, hotspot-compiler-dev, hotspot-gc-dev, hotspot-runtime-dev] Final list suggestion is: [build-dev, hotspot-dev] If the suggestions look fine, all is well. If not, you are welcome to propose a change to the rules, preferably by editing the jdk.json file [6] and creating a pull request towards the Skara project as described in [5]. Coincidentally, this is the same way that future changes to the jdk/jdk repository will be integrated, so this exercise could also serve as a way of getting started with Git / Skara! Best regards, Robin [1] https://openjdk.java.net/groups/2d/2dawtfiles.html [2] https://git.openjdk.java.net/skara/blob/master/config/mailinglist/rules/jdk.json [3] $ git skara debug mlrules -v ~/git/skara/config/mailinglist/rules/jdk.json src/java.desktop/unix/native Reading rules file... src/java.desktop/unix/native/common: [2d-dev] src/java.desktop/unix/native/include: [] src/java.desktop/unix/native/libawt: [2d-dev] src/java.desktop/unix/native/libawt_headless: [awt-dev] src/java.desktop/unix/native/libawt_xawt: [awt-dev] src/java.desktop/unix/native/libfontmanager: [2d-dev] src/java.desktop/unix/native/libjawt: [awt-dev] src/java.desktop/unix/native/libsplashscreen: [awt-dev] Combined list suggestion: [2d-dev, awt-dev] Final list suggestion is: [2d-dev, awt-dev] [4] $ git skara debug mlrules -d 30 -v ~/git/skara/config/mailinglist/rules/jdk.json . ... ? [2d-dev, awt-dev, serviceability-dev] c32923e0: 8240487: Cleanup whitespace in .cc, .hh, .m, and .mm files ? [awt-dev] 7f74c7dd: 8212226: SurfaceManager throws "Invalid Image variant" for MultiResolutionImage (Windows) Suggested lists: [2d-dev, awt-dev] Rules matching unmentioned lists [2d-dev]: src/java.desktop/share/classes/sun/java2d/SunGraphics2D.java - [2d-dev: ^src/java.desktop/share/classes/sun/java2d/] ? [5] https://wiki.openjdk.java.net/display/SKARA/Skara#Skara-Workflow [6] The rules are made up of sets of regular expressions for the various mailing lists that are used for reviewing changes going into the JDK. If any rule matches, that mailing list will get a copy of the review request email. For directories containing files that belong to different subsystems, it?s usually a good idea to write the rules in a complementary fashion if possible, so that anything not explicitly mentioned gets a reasonable default. As an example, see these rules for a subset of awt / 2d / i18n files: ?awt-dev?: "src/java.desktop/share/classes/sun/awt/(?!font|sunhints|color/|font/|geom/|im/|image/|print/)? ?2d-dev?: "src/java.desktop/share/classes/sun/awt/(font|sunhints|color/|font/|geom/|image/|print/)" ?I18n-dev?: "src/java.desktop/share/classes/sun/awt/im/? In this example, anything not explicitly indicated as belonging to either 2d-dev or i18-dev will be matched by awt-dev. From david.holmes at oracle.com Thu Aug 27 13:21:13 2020 From: david.holmes at oracle.com (David Holmes) Date: Thu, 27 Aug 2020 23:21:13 +1000 Subject: Request for assistance: Verify and update mailing list filter rules for jdk/jdk in preparation for Skara transition In-Reply-To: <568BB329-6F50-43B4-BE1D-3A9D7EA60F79@oracle.com> References: <568BB329-6F50-43B4-BE1D-3A9D7EA60F79@oracle.com> Message-ID: Hi Robin, This seems completely impractical/unworkable to me - who is going to be maintaining this list of rules? I see many issues on a first glance e.g. - the hotspot interpreter belongs to runtime not hotspot compiler and certainly not compiler-dev which is for javac! - Anything under "make" has to go to build-dev as the primary list, as well as, potentially, whatever component area it relates to. - anything under test/hotspot goes to a hotspot mailing list not e.g. core-libs-dev! David ----- On 27/08/2020 8:34 pm, Robin Westberg wrote: > Hi all, > > As part of transitioning the jdk/jdk repository to Git with project Skara, we have created a set of rules that determine which mailing list(s) should be the default recipient of a review request, depending on which files are changed. The initial version of these rules was created by looking at historical commits and matching them with existing mailing list review threads. This has produced a reasonable basis, but it can most certainly be made better with some additional manual curating. > > Therefore, it would be very helpful if people with good knowledge of the various subsystems and source files that make up the JDK would be willing to take a look at these rules, and also suggest improvements where needed. In addition, lists like [1] would also be very useful insofar they exist. > > The current version of these rules is located in a JSON file in the Skara repository at [2]. In order to check the validity of the rules, there is also a CLI tool that can be used to apply it to either a subset of files or existing commits and produce a suggestion [3] [4]. If you are interested in helping out with curating these rules, these are the steps to get started: > > 1. Install the Skara CLI tools: https://wiki.openjdk.java.net/display/SKARA/CLI+Tools > 2. Locate a suitable clone of the jdk/jdk repository (either Mercurial or Git is fine) > 3. Change (cd) to the root of your jdk/jdk repository > 3. Run the ?debug mlrules? command on your favorite subset of files, for example like this (use the actual location of jdk.json on your system): > > $ git skara debug mlrules -v ~/git/skara/config/mailinglist/rules/jdk.json src/hotspot/share/jfr/ > Reading rules file... > src/hotspot/share/jfr/dcmd: [hotspot-jfr-dev] > src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp: [hotspot-jfr-dev] > src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.hpp: [hotspot-jfr-dev] > src/hotspot/share/jfr/instrumentation/jfrJvmtiAgent.cpp: [hotspot-jfr-dev, serviceability-dev] > ? > Final list suggestion is: [hotspot-jfr-dev, serviceability-dev] > > The command accepts multiple folder and/or file names to make it possible to simulate a potential change to a given set of files: > > $ git skara debug mlrules -v ../skara/config/mailinglist/rules/jdk.json doc/ide.md src/hotspot/cpu/x86/x86.ad src/hotspot/os/linux/gc/z/zNUMA_linux.cpp > Reading rules file... > doc: [build-dev] > src/hotspot/cpu: [hotspot-compiler-dev] > src/hotspot/os: [hotspot-runtime-dev, hotspot-gc-dev] > > Combined list suggestion: [build-dev, hotspot-compiler-dev, hotspot-gc-dev, hotspot-runtime-dev] > Final list suggestion is: [build-dev, hotspot-dev] > > If the suggestions look fine, all is well. If not, you are welcome to propose a change to the rules, preferably by editing the jdk.json file [6] and creating a pull request towards the Skara project as described in [5]. Coincidentally, this is the same way that future changes to the jdk/jdk repository will be integrated, so this exercise could also serve as a way of getting started with Git / Skara! > > Best regards, > Robin > > [1] https://openjdk.java.net/groups/2d/2dawtfiles.html > [2] https://git.openjdk.java.net/skara/blob/master/config/mailinglist/rules/jdk.json > > [3] > $ git skara debug mlrules -v ~/git/skara/config/mailinglist/rules/jdk.json src/java.desktop/unix/native > Reading rules file... > src/java.desktop/unix/native/common: [2d-dev] > src/java.desktop/unix/native/include: [] > src/java.desktop/unix/native/libawt: [2d-dev] > src/java.desktop/unix/native/libawt_headless: [awt-dev] > src/java.desktop/unix/native/libawt_xawt: [awt-dev] > src/java.desktop/unix/native/libfontmanager: [2d-dev] > src/java.desktop/unix/native/libjawt: [awt-dev] > src/java.desktop/unix/native/libsplashscreen: [awt-dev] > > Combined list suggestion: [2d-dev, awt-dev] > Final list suggestion is: [2d-dev, awt-dev] > > [4] > $ git skara debug mlrules -d 30 -v ~/git/skara/config/mailinglist/rules/jdk.json . > ... > ? [2d-dev, awt-dev, serviceability-dev] c32923e0: 8240487: Cleanup whitespace in .cc, .hh, .m, and .mm files > ? [awt-dev] 7f74c7dd: 8212226: SurfaceManager throws "Invalid Image variant" for MultiResolutionImage (Windows) > Suggested lists: [2d-dev, awt-dev] > Rules matching unmentioned lists [2d-dev]: > src/java.desktop/share/classes/sun/java2d/SunGraphics2D.java - [2d-dev: ^src/java.desktop/share/classes/sun/java2d/] > ? > > [5] https://wiki.openjdk.java.net/display/SKARA/Skara#Skara-Workflow > > [6] > The rules are made up of sets of regular expressions for the various mailing lists that are used for reviewing changes going into the JDK. If any rule matches, that mailing list will get a copy of the review request email. For directories containing files that belong to different subsystems, it?s usually a good idea to write the rules in a complementary fashion if possible, so that anything not explicitly mentioned gets a reasonable default. As an example, see these rules for a subset of awt / 2d / i18n files: > > ?awt-dev?: "src/java.desktop/share/classes/sun/awt/(?!font|sunhints|color/|font/|geom/|im/|image/|print/)? > ?2d-dev?: "src/java.desktop/share/classes/sun/awt/(font|sunhints|color/|font/|geom/|image/|print/)" > ?I18n-dev?: "src/java.desktop/share/classes/sun/awt/im/? > > In this example, anything not explicitly indicated as belonging to either 2d-dev or i18-dev will be matched by awt-dev. > From david.holmes at oracle.com Thu Aug 27 13:26:06 2020 From: david.holmes at oracle.com (David Holmes) Date: Thu, 27 Aug 2020 23:26:06 +1000 Subject: Request for assistance: Verify and update mailing list filter rules for jdk/jdk in preparation for Skara transition In-Reply-To: <568BB329-6F50-43B4-BE1D-3A9D7EA60F79@oracle.com> References: <568BB329-6F50-43B4-BE1D-3A9D7EA60F79@oracle.com> Message-ID: In all seriousness I just don't think this is a reasonable or necessary thing to do. When you create a PR you should specify the mailing lists to be used, as you do today with a RFR. Trying to maintain a file by file mapping is just a huge initial setup cost and a maintenance nightmare. It is not necessary to try and automate this IMO. I wish this intent had been flagged/discussed some time ago. :( David ----- On 27/08/2020 8:34 pm, Robin Westberg wrote: > Hi all, > > As part of transitioning the jdk/jdk repository to Git with project Skara, we have created a set of rules that determine which mailing list(s) should be the default recipient of a review request, depending on which files are changed. The initial version of these rules was created by looking at historical commits and matching them with existing mailing list review threads. This has produced a reasonable basis, but it can most certainly be made better with some additional manual curating. > > Therefore, it would be very helpful if people with good knowledge of the various subsystems and source files that make up the JDK would be willing to take a look at these rules, and also suggest improvements where needed. In addition, lists like [1] would also be very useful insofar they exist. > > The current version of these rules is located in a JSON file in the Skara repository at [2]. In order to check the validity of the rules, there is also a CLI tool that can be used to apply it to either a subset of files or existing commits and produce a suggestion [3] [4]. If you are interested in helping out with curating these rules, these are the steps to get started: > > 1. Install the Skara CLI tools: https://wiki.openjdk.java.net/display/SKARA/CLI+Tools > 2. Locate a suitable clone of the jdk/jdk repository (either Mercurial or Git is fine) > 3. Change (cd) to the root of your jdk/jdk repository > 3. Run the ?debug mlrules? command on your favorite subset of files, for example like this (use the actual location of jdk.json on your system): > > $ git skara debug mlrules -v ~/git/skara/config/mailinglist/rules/jdk.json src/hotspot/share/jfr/ > Reading rules file... > src/hotspot/share/jfr/dcmd: [hotspot-jfr-dev] > src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp: [hotspot-jfr-dev] > src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.hpp: [hotspot-jfr-dev] > src/hotspot/share/jfr/instrumentation/jfrJvmtiAgent.cpp: [hotspot-jfr-dev, serviceability-dev] > ? > Final list suggestion is: [hotspot-jfr-dev, serviceability-dev] > > The command accepts multiple folder and/or file names to make it possible to simulate a potential change to a given set of files: > > $ git skara debug mlrules -v ../skara/config/mailinglist/rules/jdk.json doc/ide.md src/hotspot/cpu/x86/x86.ad src/hotspot/os/linux/gc/z/zNUMA_linux.cpp > Reading rules file... > doc: [build-dev] > src/hotspot/cpu: [hotspot-compiler-dev] > src/hotspot/os: [hotspot-runtime-dev, hotspot-gc-dev] > > Combined list suggestion: [build-dev, hotspot-compiler-dev, hotspot-gc-dev, hotspot-runtime-dev] > Final list suggestion is: [build-dev, hotspot-dev] > > If the suggestions look fine, all is well. If not, you are welcome to propose a change to the rules, preferably by editing the jdk.json file [6] and creating a pull request towards the Skara project as described in [5]. Coincidentally, this is the same way that future changes to the jdk/jdk repository will be integrated, so this exercise could also serve as a way of getting started with Git / Skara! > > Best regards, > Robin > > [1] https://openjdk.java.net/groups/2d/2dawtfiles.html > [2] https://git.openjdk.java.net/skara/blob/master/config/mailinglist/rules/jdk.json > > [3] > $ git skara debug mlrules -v ~/git/skara/config/mailinglist/rules/jdk.json src/java.desktop/unix/native > Reading rules file... > src/java.desktop/unix/native/common: [2d-dev] > src/java.desktop/unix/native/include: [] > src/java.desktop/unix/native/libawt: [2d-dev] > src/java.desktop/unix/native/libawt_headless: [awt-dev] > src/java.desktop/unix/native/libawt_xawt: [awt-dev] > src/java.desktop/unix/native/libfontmanager: [2d-dev] > src/java.desktop/unix/native/libjawt: [awt-dev] > src/java.desktop/unix/native/libsplashscreen: [awt-dev] > > Combined list suggestion: [2d-dev, awt-dev] > Final list suggestion is: [2d-dev, awt-dev] > > [4] > $ git skara debug mlrules -d 30 -v ~/git/skara/config/mailinglist/rules/jdk.json . > ... > ? [2d-dev, awt-dev, serviceability-dev] c32923e0: 8240487: Cleanup whitespace in .cc, .hh, .m, and .mm files > ? [awt-dev] 7f74c7dd: 8212226: SurfaceManager throws "Invalid Image variant" for MultiResolutionImage (Windows) > Suggested lists: [2d-dev, awt-dev] > Rules matching unmentioned lists [2d-dev]: > src/java.desktop/share/classes/sun/java2d/SunGraphics2D.java - [2d-dev: ^src/java.desktop/share/classes/sun/java2d/] > ? > > [5] https://wiki.openjdk.java.net/display/SKARA/Skara#Skara-Workflow > > [6] > The rules are made up of sets of regular expressions for the various mailing lists that are used for reviewing changes going into the JDK. If any rule matches, that mailing list will get a copy of the review request email. For directories containing files that belong to different subsystems, it?s usually a good idea to write the rules in a complementary fashion if possible, so that anything not explicitly mentioned gets a reasonable default. As an example, see these rules for a subset of awt / 2d / i18n files: > > ?awt-dev?: "src/java.desktop/share/classes/sun/awt/(?!font|sunhints|color/|font/|geom/|im/|image/|print/)? > ?2d-dev?: "src/java.desktop/share/classes/sun/awt/(font|sunhints|color/|font/|geom/|image/|print/)" > ?I18n-dev?: "src/java.desktop/share/classes/sun/awt/im/? > > In this example, anything not explicitly indicated as belonging to either 2d-dev or i18-dev will be matched by awt-dev. > From thomas.stuefe at gmail.com Thu Aug 27 15:43:40 2020 From: thomas.stuefe at gmail.com (=?UTF-8?Q?Thomas_St=C3=BCfe?=) Date: Thu, 27 Aug 2020 17:43:40 +0200 Subject: jdk/jdk repository transitions to Git, GitHub and Skara: September 5 In-Reply-To: <175b5b8d-a52e-bd2c-8277-306643689c0d@oracle.com> References: <4a562cb1-0de0-b2b0-9155-f821c0533291@oracle.com> <175b5b8d-a52e-bd2c-8277-306643689c0d@oracle.com> Message-ID: Hi Erik, On Thu, Aug 27, 2020 at 11:13 AM Erik Helin wrote: > On 8/27/20 10:24 AM, Thomas St?fe wrote: > > Hi Erik, > > Hi Thomas, hope you are doing well! > > Why thank you, I hope you guys do too :) > On 8/27/20 10:24 AM, Thomas St?fe wrote: > > Will jdk/sandbox be affected or will that continue to work after the > > transition (and continue being synced with jdk/jdk)? > > The Mercurial repositories jdk/sandbox [0] and jdk/jdk [1] will both > become read-only on Sep 4. There is already a read-only Git mirror for > the Mercurial jdk/sandbox repository available at: > > https://git.openjdk.java.net/jdk-sandbox > > This Git mirror is currently read-only, but on Sep 5 it will become > read-write (and will no longer be a mirror). All JDK Committers and > above [2] will be given direct write access to the Git jdk-sandbox > repository [4] on Sep 5. We won't give you direct write access prior to > Sep 5 as it might interfere with the mirroring. Note that you will not > be given direct write access to the jdk Git repository [3], instead you > will use so-called "pull requests" for contributing changes to the jdk > Git repository. See the "Workflow" section on the Skara wiki for more > details [5]. > > And yes, we will continue to automatically sync the master branch of the > Git jdk repository [3] to the master branch of the Git jdk-sandbox > repository [4]. > > If you have any more questions, just let me know! > > My current work involves working in a named branch at jdk/submit, roughly following this flow: - committing my changes locally, rather fine grained into my own branch - from time to time pushing up to the central hg sandbox repo - from time to time pulling in new changes and merging from the default branch - from time to time creating diffs for reviews I am currently trying to figure out how this approach will change with git and github. I know there are subtle differences in the branching concept between hg and git. I found https://medium.com/@tmvvr/git-for-longtime-mercurial-users-c41f37352fca, which is a good explanation, if somewhat short. Also good and short is https://github.com/sympy/sympy/wiki/Git-hg-rosetta-stone. However, many things are still vague and I guess this will only clear up once I switch. - You write committers have write access to jdk/sandbox, so I can continue to push my changes in my branch up into the central repository, yes? Will the default branch be protected against accidental pushes, like I believe we did for the hg sandbox? - In mercurial I can filter for changes local to my branch via -b (hg log -b ). Is this possible in git too, since there, a branch AFAIU is only a pointer to a single commit? I am sure more questions will come once the switch is reality... Thanks a lot! Cheers, Thomas > Thanks, > Erik > > [0]: https://hg.openjdk.java.net/jdk/sandbox > [1]: https://hg.openjdk.java.net/jdk/jdk > [2]: https://openjdk.java.net/census#jdk > [3]: https://git.openjdk.java.net/jdk > [4]: https://git.openjdk.java.net/jdk-sandbox > [5]: https://wiki.openjdk.java.net/display/skara#Skara-Workflow > > > Thanks, Thomas > > > > > > On Wed, Aug 12, 2020 at 8:57 AM Erik Helin > > wrote: > > > > Hi all, > > > > We are now getting closer to the jdk/jdk repository [0] > > transitioning to > > Git, GitHub and Skara. JEP 357 [0] and JEP 369 [1] were targeted to > JDK > > 16 at the end of May 2020 [2]. It was then also communicated that the > > jdk/jdk repository would transition "early September 2020" [3]. > > > > The exact target date for the transition of the jdk/jdk repository is > > now set to Saturday September 5, 2020. We aim to complete the > > transition > > during the weekend of September 5 - 6, 2020. Starting from September > 4 > > the Mercurial repository for jdk/jdk [0] will become read-only and > the > > Git repository for jdk/jdk [5] will become read-write on Monday > > September 7. > > > > If you are an OpenJDK Author, Committer or Reviewer, then please make > > sure you that you are ready for the transition by following the > > "Getting > > Started" guide on the Skara wiki [7]. In particular, make sure that > you > > associate your GitHub username and OpenJDK username, see the "Getting > > Started" guide for details. Feel free to try out the new tools and > make > > sure that everything works in the OpenJDK playground repository [8]. > > > > For those of you doing backports to jdk-updates repositories there > is a > > Skara CLI tool, git hg-export, that will export commits from an > OpenJDK > > Git repository in a format expected by hg and the OpenJDK Mercurial > > repositories [9]. A "clean" backport of a Git commit looks like the > > following: > > > > $ git clone https://git.openjdk.java.net/jdk > > $ git -C jdk hg-export | hg -R /path/to/hg/repo import > > > > As part of transitioning the jdk/jdk repository we will also > transition > > the jdk/client repository [6]. There is work ongoing that might > result > > in jdk/client being archived instead of transitioned, but that work > is > > not guaranteed to be done by September 5. We will send out more > details > > on this as we get closer. > > > > The jdk/submit [10] repository will not be transitioned, the > equivalent > > functionality is provided by the /test pull request command [11]. > > > > There are continuously updated read-only mirrors of the jdk/jdk [5], > > jdk/client [12] and jdk/sandbox [13] repositories available if you > want > > to create personal forks ahead of the transition. Note that the > > jdk/jdk15 [14] repository will stay on Mercurial as well as the > > jdk-updates/jdk15u [15] repository (at least for the time being). > > > > If you have any questions just send an email to > > skara-dev at openjdk.java.net ! > > > > Thanks, > > Erik and Robin > > > > [0]: https://hg.openjdk.java.net/jdk/jdk > > [1]: https://openjdk.java.net/jeps/357 > > [2]: https://openjdk.java.net/jeps/369 > > [3]: > > https://mail.openjdk.java.net/pipermail/jdk-dev/2020-May/004335.html > > [4]: > > https://mail.openjdk.java.net/pipermail/jdk-dev/2020-May/004322.html > > [5]: https://github.com/openjdk/jdk > > [6]: https://hg.openjdk.java.net/jdk/client > > [7]: > > > https://wiki.openjdk.java.net/display/SKARA/Skara#Skara-GettingStarted > > [8]: https://github.com/openjdk/playground > > [9]: https://wiki.openjdk.java.net/display/SKARA/git-hg-export > > [10]: https://hg.openjdk.java.net/jdk/submit > > [11]: > > > https://wiki.openjdk.java.net/display/SKARA/Pull+Request+Commands#PullRequestCommands-/test > > [12]: https://github.com/jdk/client > > [13]: https://github.com/jdk/jdk-sandbox > > [14]: https://hg.openjdk.java.net/jdk/jdk15 > > [15]: https://hg.openjdk.java.net/jdk-updates/jdk15u > > > From thomas.stuefe at gmail.com Thu Aug 27 15:45:30 2020 From: thomas.stuefe at gmail.com (=?UTF-8?Q?Thomas_St=C3=BCfe?=) Date: Thu, 27 Aug 2020 17:45:30 +0200 Subject: jdk/jdk repository transitions to Git, GitHub and Skara: September 5 In-Reply-To: References: <4a562cb1-0de0-b2b0-9155-f821c0533291@oracle.com> <175b5b8d-a52e-bd2c-8277-306643689c0d@oracle.com> Message-ID: On Thu, Aug 27, 2020 at 5:43 PM Thomas St?fe wrote: > Hi Erik, > > On Thu, Aug 27, 2020 at 11:13 AM Erik Helin wrote: > >> On 8/27/20 10:24 AM, Thomas St?fe wrote: >> > Hi Erik, >> >> Hi Thomas, hope you are doing well! >> >> > Why thank you, I hope you guys do too :) > > >> On 8/27/20 10:24 AM, Thomas St?fe wrote: >> > Will jdk/sandbox be affected or will that continue to work after the >> > transition (and continue being synced with jdk/jdk)? >> >> The Mercurial repositories jdk/sandbox [0] and jdk/jdk [1] will both >> become read-only on Sep 4. There is already a read-only Git mirror for >> the Mercurial jdk/sandbox repository available at: >> >> https://git.openjdk.java.net/jdk-sandbox >> >> This Git mirror is currently read-only, but on Sep 5 it will become >> read-write (and will no longer be a mirror). All JDK Committers and >> above [2] will be given direct write access to the Git jdk-sandbox >> repository [4] on Sep 5. We won't give you direct write access prior to >> Sep 5 as it might interfere with the mirroring. Note that you will not >> be given direct write access to the jdk Git repository [3], instead you >> will use so-called "pull requests" for contributing changes to the jdk >> Git repository. See the "Workflow" section on the Skara wiki for more >> details [5]. >> >> And yes, we will continue to automatically sync the master branch of the >> Git jdk repository [3] to the master branch of the Git jdk-sandbox >> repository [4]. >> >> If you have any more questions, just let me know! >> >> > My current work involves working in a named branch at jdk/submit, roughly > following this flow: > s/submit/sandbox keeps happening to me, I don't know why :( > - committing my changes locally, rather fine grained into my own branch > - from time to time pushing up to the central hg sandbox repo > - from time to time pulling in new changes and merging from the default > branch > - from time to time creating diffs for reviews > > I am currently trying to figure out how this approach will change with git > and github. I know there are subtle differences in the branching concept > between hg and git. I found > https://medium.com/@tmvvr/git-for-longtime-mercurial-users-c41f37352fca, > which is a good explanation, if somewhat short. Also good and short is > https://github.com/sympy/sympy/wiki/Git-hg-rosetta-stone. However, many > things are still vague and I guess this will only clear up once I switch. > > - You write committers have write access to jdk/sandbox, so I can continue > to push my changes in my branch up into the central repository, yes? Will > the default branch be protected against accidental pushes, like I believe > we did for the hg sandbox? > - In mercurial I can filter for changes local to my branch via -b (hg log > -b ). Is this possible in git too, since there, a branch AFAIU > is only a pointer to a single commit? > > I am sure more questions will come once the switch is reality... > > Thanks a lot! > > Cheers, Thomas > > > > >> Thanks, >> Erik >> >> [0]: https://hg.openjdk.java.net/jdk/sandbox >> [1]: https://hg.openjdk.java.net/jdk/jdk >> [2]: https://openjdk.java.net/census#jdk >> [3]: https://git.openjdk.java.net/jdk >> [4]: https://git.openjdk.java.net/jdk-sandbox >> [5]: https://wiki.openjdk.java.net/display/skara#Skara-Workflow >> >> > Thanks, Thomas >> > >> > >> > On Wed, Aug 12, 2020 at 8:57 AM Erik Helin > > > wrote: >> > >> > Hi all, >> > >> > We are now getting closer to the jdk/jdk repository [0] >> > transitioning to >> > Git, GitHub and Skara. JEP 357 [0] and JEP 369 [1] were targeted to >> JDK >> > 16 at the end of May 2020 [2]. It was then also communicated that >> the >> > jdk/jdk repository would transition "early September 2020" [3]. >> > >> > The exact target date for the transition of the jdk/jdk repository >> is >> > now set to Saturday September 5, 2020. We aim to complete the >> > transition >> > during the weekend of September 5 - 6, 2020. Starting from >> September 4 >> > the Mercurial repository for jdk/jdk [0] will become read-only and >> the >> > Git repository for jdk/jdk [5] will become read-write on Monday >> > September 7. >> > >> > If you are an OpenJDK Author, Committer or Reviewer, then please >> make >> > sure you that you are ready for the transition by following the >> > "Getting >> > Started" guide on the Skara wiki [7]. In particular, make sure that >> you >> > associate your GitHub username and OpenJDK username, see the >> "Getting >> > Started" guide for details. Feel free to try out the new tools and >> make >> > sure that everything works in the OpenJDK playground repository [8]. >> > >> > For those of you doing backports to jdk-updates repositories there >> is a >> > Skara CLI tool, git hg-export, that will export commits from an >> OpenJDK >> > Git repository in a format expected by hg and the OpenJDK Mercurial >> > repositories [9]. A "clean" backport of a Git commit looks like the >> > following: >> > >> > $ git clone https://git.openjdk.java.net/jdk >> > $ git -C jdk hg-export | hg -R /path/to/hg/repo import >> > >> > As part of transitioning the jdk/jdk repository we will also >> transition >> > the jdk/client repository [6]. There is work ongoing that might >> result >> > in jdk/client being archived instead of transitioned, but that work >> is >> > not guaranteed to be done by September 5. We will send out more >> details >> > on this as we get closer. >> > >> > The jdk/submit [10] repository will not be transitioned, the >> equivalent >> > functionality is provided by the /test pull request command [11]. >> > >> > There are continuously updated read-only mirrors of the jdk/jdk [5], >> > jdk/client [12] and jdk/sandbox [13] repositories available if you >> want >> > to create personal forks ahead of the transition. Note that the >> > jdk/jdk15 [14] repository will stay on Mercurial as well as the >> > jdk-updates/jdk15u [15] repository (at least for the time being). >> > >> > If you have any questions just send an email to >> > skara-dev at openjdk.java.net ! >> > >> > Thanks, >> > Erik and Robin >> > >> > [0]: https://hg.openjdk.java.net/jdk/jdk >> > [1]: https://openjdk.java.net/jeps/357 >> > [2]: https://openjdk.java.net/jeps/369 >> > [3]: >> > >> https://mail.openjdk.java.net/pipermail/jdk-dev/2020-May/004335.html >> > [4]: >> > >> https://mail.openjdk.java.net/pipermail/jdk-dev/2020-May/004322.html >> > [5]: https://github.com/openjdk/jdk >> > [6]: https://hg.openjdk.java.net/jdk/client >> > [7]: >> > >> https://wiki.openjdk.java.net/display/SKARA/Skara#Skara-GettingStarted >> > [8]: https://github.com/openjdk/playground >> > [9]: https://wiki.openjdk.java.net/display/SKARA/git-hg-export >> > [10]: https://hg.openjdk.java.net/jdk/submit >> > [11]: >> > >> https://wiki.openjdk.java.net/display/SKARA/Pull+Request+Commands#PullRequestCommands-/test >> > [12]: https://github.com/jdk/client >> > [13]: https://github.com/jdk/jdk-sandbox >> > [14]: https://hg.openjdk.java.net/jdk/jdk15 >> > [15]: https://hg.openjdk.java.net/jdk-updates/jdk15u >> > >> > From alex.buckley at oracle.com Thu Aug 27 16:05:47 2020 From: alex.buckley at oracle.com (Alex Buckley) Date: Thu, 27 Aug 2020 09:05:47 -0700 Subject: Request for assistance: Verify and update mailing list filter rules for jdk/jdk in preparation for Skara transition In-Reply-To: References: <568BB329-6F50-43B4-BE1D-3A9D7EA60F79@oracle.com> Message-ID: How does a contributor know which mailing list should be used for a given code change? The answer shouldn't be held in the institutional memory of Oracle's Java Platform Group. The answer should be written down in a public place. Currently, nothing on the OpenJDK web site gives the answer. (Some Group pages indicate which packages are maintained by the Group, but the information is incomplete and presented differently by each Group.) Consequently, I strongly support formalizing the association between the JDK Project's codebase and the mailing lists (proxies for Groups and Projects) that maintain it. Transitory errors in the association (such as "the hotspot interpreter belongs to runtime not hotspot compiler") can be fixed, and do not mean the association is fundamentally unreasonable or unnecessary. Whether the association should be operationalized in Skara tooling in exactly the way Robin described, is a separate topic. Whether the granularity of the association should be per file, per directory, per module, or a mix thereof, is also a separate topic. Alex On 8/27/2020 6:26 AM, David Holmes wrote: > In all seriousness I just don't think this is a reasonable or necessary > thing to do. When you create a PR you should specify the mailing lists > to be used, as you do today with a RFR. Trying to maintain a file by > file mapping is just a huge initial setup cost and a maintenance > nightmare. It is not necessary to try and automate this IMO. > > I wish this intent had been flagged/discussed some time ago. :( > > David > ----- > > On 27/08/2020 8:34 pm, Robin Westberg wrote: >> Hi all, >> >> As part of transitioning the jdk/jdk repository to Git with project >> Skara, we have created a set of rules that determine which mailing >> list(s) should be the default recipient of a review request, depending >> on which files are changed. The initial version of these rules was >> created by looking at historical commits and matching them with >> existing mailing list review threads. This has produced a reasonable >> basis, but it can most certainly be made better with some additional >> manual curating. >> >> Therefore, it would be very helpful if people with good knowledge of >> the various subsystems and source files that make up the JDK would be >> willing to take a look at these rules, and also suggest improvements >> where needed. In addition, lists like [1] would also be very useful >> insofar they exist. >> >> The current version of these rules is located in a JSON file in the >> Skara repository at [2]. In order to check the validity of the rules, >> there is also a CLI tool that can be used to apply it to either a >> subset of files or existing commits and produce a suggestion [3] [4]. >> If you are interested in helping out with curating these rules, these >> are the steps to get started: >> >> 1. Install the Skara CLI tools: >> https://wiki.openjdk.java.net/display/SKARA/CLI+Tools >> 2. Locate a suitable clone of the jdk/jdk repository (either Mercurial >> or Git is fine) >> 3. Change (cd) to the root of your jdk/jdk repository >> 3. Run the ?debug mlrules? command on your favorite subset of files, >> for example like this (use the actual location of jdk.json on your >> system): >> >> $ git skara debug mlrules -v >> ~/git/skara/config/mailinglist/rules/jdk.json src/hotspot/share/jfr/ >> Reading rules file... >> src/hotspot/share/jfr/dcmd: [hotspot-jfr-dev] >> src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp: >> [hotspot-jfr-dev] >> src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.hpp: >> [hotspot-jfr-dev] >> src/hotspot/share/jfr/instrumentation/jfrJvmtiAgent.cpp: >> [hotspot-jfr-dev, serviceability-dev] >> ? >> Final list suggestion is: [hotspot-jfr-dev, serviceability-dev] >> >> The command accepts multiple folder and/or file names to make it >> possible to simulate a potential change to a given set of files: >> >> $ git skara debug mlrules -v >> ../skara/config/mailinglist/rules/jdk.json doc/ide.md >> src/hotspot/cpu/x86/x86.ad src/hotspot/os/linux/gc/z/zNUMA_linux.cpp >> Reading rules file... >> doc: [build-dev] >> src/hotspot/cpu: [hotspot-compiler-dev] >> src/hotspot/os: [hotspot-runtime-dev, hotspot-gc-dev] >> >> Combined list suggestion: [build-dev, hotspot-compiler-dev, >> hotspot-gc-dev, hotspot-runtime-dev] >> Final list suggestion is: [build-dev, hotspot-dev] >> >> If the suggestions look fine, all is well. If not, you are welcome to >> propose a change to the rules, preferably by editing the jdk.json file >> [6] and creating a pull request towards the Skara project as described >> in [5]. Coincidentally, this is the same way that future changes to >> the jdk/jdk repository will be integrated, so this exercise could also >> serve as a way of getting started with Git / Skara! >> >> Best regards, >> Robin >> >> [1] https://openjdk.java.net/groups/2d/2dawtfiles.html >> [2] >> https://git.openjdk.java.net/skara/blob/master/config/mailinglist/rules/jdk.json >> >> >> [3] >> $ git skara debug mlrules -v >> ~/git/skara/config/mailinglist/rules/jdk.json >> src/java.desktop/unix/native >> Reading rules file... >> src/java.desktop/unix/native/common: [2d-dev] >> src/java.desktop/unix/native/include: [] >> src/java.desktop/unix/native/libawt: [2d-dev] >> src/java.desktop/unix/native/libawt_headless: [awt-dev] >> src/java.desktop/unix/native/libawt_xawt: [awt-dev] >> src/java.desktop/unix/native/libfontmanager: [2d-dev] >> src/java.desktop/unix/native/libjawt: [awt-dev] >> src/java.desktop/unix/native/libsplashscreen: [awt-dev] >> >> Combined list suggestion: [2d-dev, awt-dev] >> Final list suggestion is: [2d-dev, awt-dev] >> >> [4] >> $ git skara debug mlrules -d 30 -v >> ~/git/skara/config/mailinglist/rules/jdk.json . >> ... >> ? [2d-dev, awt-dev, serviceability-dev] c32923e0: 8240487: Cleanup >> whitespace in .cc, .hh, .m, and .mm files >> ? [awt-dev] 7f74c7dd: 8212226: SurfaceManager throws "Invalid Image >> variant" for MultiResolutionImage (Windows) >> ???? Suggested lists: [2d-dev, awt-dev] >> ???? Rules matching unmentioned lists [2d-dev]: >> ?????? src/java.desktop/share/classes/sun/java2d/SunGraphics2D.java - >> [2d-dev: ^src/java.desktop/share/classes/sun/java2d/] >> ? >> >> [5] https://wiki.openjdk.java.net/display/SKARA/Skara#Skara-Workflow >> >> [6] >> The rules are made up of sets of regular expressions for the various >> mailing lists that are used for reviewing changes going into the JDK. >> If any rule matches, that mailing list will get a copy of the review >> request email. For directories containing files that belong to >> different subsystems, it?s usually a good idea to write the rules in a >> complementary fashion if possible, so that anything not explicitly >> mentioned gets a reasonable default. As an example, see these rules >> for a subset of awt / 2d / i18n files: >> >> ?awt-dev?: >> "src/java.desktop/share/classes/sun/awt/(?!font|sunhints|color/|font/|geom/|im/|image/|print/)? >> >> ?2d-dev?: >> "src/java.desktop/share/classes/sun/awt/(font|sunhints|color/|font/|geom/|image/|print/)" >> >> ?I18n-dev?: "src/java.desktop/share/classes/sun/awt/im/? >> >> In this example, anything not explicitly indicated as belonging to >> either 2d-dev or i18-dev will be matched by awt-dev. >> From sgehwolf at redhat.com Thu Aug 27 16:38:35 2020 From: sgehwolf at redhat.com (Severin Gehwolf) Date: Thu, 27 Aug 2020 18:38:35 +0200 Subject: Request for assistance: Verify and update mailing list filter rules for jdk/jdk in preparation for Skara transition In-Reply-To: References: <568BB329-6F50-43B4-BE1D-3A9D7EA60F79@oracle.com> Message-ID: Hi David, Putting my helping-new-contributors-to-openjdk hat on... On Thu, 2020-08-27 at 23:26 +1000, David Holmes wrote: > In all seriousness I just don't think this is a reasonable or necessary > thing to do. When you create a PR you should specify the mailing lists > to be used, as you do today with a RFR. Trying to maintain a file by > file mapping is just a huge initial setup cost and a maintenance > nightmare. It is not necessary to try and automate this IMO. > > I wish this intent had been flagged/discussed some time ago. :( I believe this work is well-intended. It's not unreasonable to get asked where to post review threads to for new contributors. At least that's the experience I've had. If there is tooling available which - by the help of the more senior OpenJDK community - maps this out for a new contributor, this is a win to me. It might not be 100% accurate, but it'll likely be closer than a random guess from an outsider. The tooling can be wrong, but so could be a new contributor without help from somebody else. Besides, there are clear avenues outlined to get the tooling fixed and improved. Overall, this seems to be moving into the right direction for a better OpenJDK community experience. That's my opinion on it anyhow. Thanks, Severin > David > ----- > > On 27/08/2020 8:34 pm, Robin Westberg wrote: > > Hi all, > > > > As part of transitioning the jdk/jdk repository to Git with project Skara, we have created a set of rules that determine which mailing list(s) should be the default recipient of a review request, depending on which files are changed. The initial version of these rules was created by looking at historical commits and matching them with existing mailing list review threads. This has produced a reasonable basis, but it can most certainly be made better with some additional manual curating. > > > > Therefore, it would be very helpful if people with good knowledge of the various subsystems and source files that make up the JDK would be willing to take a look at these rules, and also suggest improvements where needed. In addition, lists like [1] would also be very useful insofar they exist. > > > > The current version of these rules is located in a JSON file in the Skara repository at [2]. In order to check the validity of the rules, there is also a CLI tool that can be used to apply it to either a subset of files or existing commits and produce a suggestion [3] [4]. If you are interested in helping out with curating these rules, these are the steps to get started: > > > > 1. Install the Skara CLI tools: https://wiki.openjdk.java.net/display/SKARA/CLI+Tools > > 2. Locate a suitable clone of the jdk/jdk repository (either Mercurial or Git is fine) > > 3. Change (cd) to the root of your jdk/jdk repository > > 3. Run the ?debug mlrules? command on your favorite subset of files, for example like this (use the actual location of jdk.json on your system): > > > > $ git skara debug mlrules -v ~/git/skara/config/mailinglist/rules/jdk.json src/hotspot/share/jfr/ > > Reading rules file... > > src/hotspot/share/jfr/dcmd: [hotspot-jfr-dev] > > src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp: [hotspot-jfr-dev] > > src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.hpp: [hotspot-jfr-dev] > > src/hotspot/share/jfr/instrumentation/jfrJvmtiAgent.cpp: [hotspot-jfr-dev, serviceability-dev] > > ? > > Final list suggestion is: [hotspot-jfr-dev, serviceability-dev] > > > > The command accepts multiple folder and/or file names to make it possible to simulate a potential change to a given set of files: > > > > $ git skara debug mlrules -v ../skara/config/mailinglist/rules/jdk.json doc/ide.md src/hotspot/cpu/x86/x86.ad src/hotspot/os/linux/gc/z/zNUMA_linux.cpp > > Reading rules file... > > doc: [build-dev] > > src/hotspot/cpu: [hotspot-compiler-dev] > > src/hotspot/os: [hotspot-runtime-dev, hotspot-gc-dev] > > > > Combined list suggestion: [build-dev, hotspot-compiler-dev, hotspot-gc-dev, hotspot-runtime-dev] > > Final list suggestion is: [build-dev, hotspot-dev] > > > > If the suggestions look fine, all is well. If not, you are welcome to propose a change to the rules, preferably by editing the jdk.json file [6] and creating a pull request towards the Skara project as described in [5]. Coincidentally, this is the same way that future changes to the jdk/jdk repository will be integrated, so this exercise could also serve as a way of getting started with Git / Skara! > > > > Best regards, > > Robin > > > > [1] https://openjdk.java.net/groups/2d/2dawtfiles.html > > [2] https://git.openjdk.java.net/skara/blob/master/config/mailinglist/rules/jdk.json > > > > [3] > > $ git skara debug mlrules -v ~/git/skara/config/mailinglist/rules/jdk.json src/java.desktop/unix/native > > Reading rules file... > > src/java.desktop/unix/native/common: [2d-dev] > > src/java.desktop/unix/native/include: [] > > src/java.desktop/unix/native/libawt: [2d-dev] > > src/java.desktop/unix/native/libawt_headless: [awt-dev] > > src/java.desktop/unix/native/libawt_xawt: [awt-dev] > > src/java.desktop/unix/native/libfontmanager: [2d-dev] > > src/java.desktop/unix/native/libjawt: [awt-dev] > > src/java.desktop/unix/native/libsplashscreen: [awt-dev] > > > > Combined list suggestion: [2d-dev, awt-dev] > > Final list suggestion is: [2d-dev, awt-dev] > > > > [4] > > $ git skara debug mlrules -d 30 -v ~/git/skara/config/mailinglist/rules/jdk.json . > > ... > > ? [2d-dev, awt-dev, serviceability-dev] c32923e0: 8240487: Cleanup whitespace in .cc, .hh, .m, and .mm files > > ? [awt-dev] 7f74c7dd: 8212226: SurfaceManager throws "Invalid Image variant" for MultiResolutionImage (Windows) > > Suggested lists: [2d-dev, awt-dev] > > Rules matching unmentioned lists [2d-dev]: > > src/java.desktop/share/classes/sun/java2d/SunGraphics2D.java - [2d-dev: ^src/java.desktop/share/classes/sun/java2d/] > > ? > > > > [5] https://wiki.openjdk.java.net/display/SKARA/Skara#Skara-Workflow > > > > [6] > > The rules are made up of sets of regular expressions for the various mailing lists that are used for reviewing changes going into the JDK. If any rule matches, that mailing list will get a copy of the review request email. For directories containing files that belong to different subsystems, it?s usually a good idea to write the rules in a complementary fashion if possible, so that anything not explicitly mentioned gets a reasonable default. As an example, see these rules for a subset of awt / 2d / i18n files: > > > > ?awt-dev?: "src/java.desktop/share/classes/sun/awt/(?!font|sunhints|color/|font/|geom/|im/|image/|print/)? > > ?2d-dev?: "src/java.desktop/share/classes/sun/awt/(font|sunhints|color/|font/|geom/|image/|print/)" > > ?I18n-dev?: "src/java.desktop/share/classes/sun/awt/im/? > > > > In this example, anything not explicitly indicated as belonging to either 2d-dev or i18-dev will be matched by awt-dev. > > From igor.ignatyev at oracle.com Thu Aug 27 16:53:49 2020 From: igor.ignatyev at oracle.com (Igor Ignatyev) Date: Thu, 27 Aug 2020 09:53:49 -0700 (PDT) Subject: Request for assistance: Verify and update mailing list filter rules for jdk/jdk in preparation for Skara transition In-Reply-To: References: <568BB329-6F50-43B4-BE1D-3A9D7EA60F79@oracle.com> Message-ID: <35347485-216D-42BC-A05A-8D974E3FA581@oracle.com> Hi Robin, although I really like the idea of having mapping b/w files and groups/components/subcomponents, I agree w/ David that in its *current* form it's unworkable. having the mapping in Skara repo is impractical, as it introduces additional overhead for maintenance, not to speak of possible desynchronization. Thus I suggest moving the mapping to jdk/jdk repo and updating Skara tooling accordingly. I also have a question regarding the format, why did you decide to invent your own format instead of using CODEOWNER-like format which fits the needs rather nicely and is used for similar purposes by github and gitlab? Thanks, -- Igor > On Aug 27, 2020, at 6:26 AM, David Holmes wrote: > > In all seriousness I just don't think this is a reasonable or necessary thing to do. When you create a PR you should specify the mailing lists to be used, as you do today with a RFR. Trying to maintain a file by file mapping is just a huge initial setup cost and a maintenance nightmare. It is not necessary to try and automate this IMO. > > I wish this intent had been flagged/discussed some time ago. :( > > David > ----- > > On 27/08/2020 8:34 pm, Robin Westberg wrote: >> Hi all, >> As part of transitioning the jdk/jdk repository to Git with project Skara, we have created a set of rules that determine which mailing list(s) should be the default recipient of a review request, depending on which files are changed. The initial version of these rules was created by looking at historical commits and matching them with existing mailing list review threads. This has produced a reasonable basis, but it can most certainly be made better with some additional manual curating. >> Therefore, it would be very helpful if people with good knowledge of the various subsystems and source files that make up the JDK would be willing to take a look at these rules, and also suggest improvements where needed. In addition, lists like [1] would also be very useful insofar they exist. >> The current version of these rules is located in a JSON file in the Skara repository at [2]. In order to check the validity of the rules, there is also a CLI tool that can be used to apply it to either a subset of files or existing commits and produce a suggestion [3] [4]. If you are interested in helping out with curating these rules, these are the steps to get started: >> 1. Install the Skara CLI tools: https://wiki.openjdk.java.net/display/SKARA/CLI+Tools >> 2. Locate a suitable clone of the jdk/jdk repository (either Mercurial or Git is fine) >> 3. Change (cd) to the root of your jdk/jdk repository >> 3. Run the ?debug mlrules? command on your favorite subset of files, for example like this (use the actual location of jdk.json on your system): >> $ git skara debug mlrules -v ~/git/skara/config/mailinglist/rules/jdk.json src/hotspot/share/jfr/ >> Reading rules file... >> src/hotspot/share/jfr/dcmd: [hotspot-jfr-dev] >> src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp: [hotspot-jfr-dev] >> src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.hpp: [hotspot-jfr-dev] >> src/hotspot/share/jfr/instrumentation/jfrJvmtiAgent.cpp: [hotspot-jfr-dev, serviceability-dev] >> ? >> Final list suggestion is: [hotspot-jfr-dev, serviceability-dev] >> The command accepts multiple folder and/or file names to make it possible to simulate a potential change to a given set of files: >> $ git skara debug mlrules -v ../skara/config/mailinglist/rules/jdk.json doc/ide.md src/hotspot/cpu/x86/x86.ad src/hotspot/os/linux/gc/z/zNUMA_linux.cpp >> Reading rules file... >> doc: [build-dev] >> src/hotspot/cpu: [hotspot-compiler-dev] >> src/hotspot/os: [hotspot-runtime-dev, hotspot-gc-dev] >> Combined list suggestion: [build-dev, hotspot-compiler-dev, hotspot-gc-dev, hotspot-runtime-dev] >> Final list suggestion is: [build-dev, hotspot-dev] >> If the suggestions look fine, all is well. If not, you are welcome to propose a change to the rules, preferably by editing the jdk.json file [6] and creating a pull request towards the Skara project as described in [5]. Coincidentally, this is the same way that future changes to the jdk/jdk repository will be integrated, so this exercise could also serve as a way of getting started with Git / Skara! >> Best regards, >> Robin >> [1] https://openjdk.java.net/groups/2d/2dawtfiles.html >> [2] https://git.openjdk.java.net/skara/blob/master/config/mailinglist/rules/jdk.json >> [3] >> $ git skara debug mlrules -v ~/git/skara/config/mailinglist/rules/jdk.json src/java.desktop/unix/native >> Reading rules file... >> src/java.desktop/unix/native/common: [2d-dev] >> src/java.desktop/unix/native/include: [] >> src/java.desktop/unix/native/libawt: [2d-dev] >> src/java.desktop/unix/native/libawt_headless: [awt-dev] >> src/java.desktop/unix/native/libawt_xawt: [awt-dev] >> src/java.desktop/unix/native/libfontmanager: [2d-dev] >> src/java.desktop/unix/native/libjawt: [awt-dev] >> src/java.desktop/unix/native/libsplashscreen: [awt-dev] >> Combined list suggestion: [2d-dev, awt-dev] >> Final list suggestion is: [2d-dev, awt-dev] >> [4] >> $ git skara debug mlrules -d 30 -v ~/git/skara/config/mailinglist/rules/jdk.json . >> ... >> ? [2d-dev, awt-dev, serviceability-dev] c32923e0: 8240487: Cleanup whitespace in .cc, .hh, .m, and .mm files >> ? [awt-dev] 7f74c7dd: 8212226: SurfaceManager throws "Invalid Image variant" for MultiResolutionImage (Windows) >> Suggested lists: [2d-dev, awt-dev] >> Rules matching unmentioned lists [2d-dev]: >> src/java.desktop/share/classes/sun/java2d/SunGraphics2D.java - [2d-dev: ^src/java.desktop/share/classes/sun/java2d/] >> ? >> [5] https://wiki.openjdk.java.net/display/SKARA/Skara#Skara-Workflow >> [6] >> The rules are made up of sets of regular expressions for the various mailing lists that are used for reviewing changes going into the JDK. If any rule matches, that mailing list will get a copy of the review request email. For directories containing files that belong to different subsystems, it?s usually a good idea to write the rules in a complementary fashion if possible, so that anything not explicitly mentioned gets a reasonable default. As an example, see these rules for a subset of awt / 2d / i18n files: >> ?awt-dev?: "src/java.desktop/share/classes/sun/awt/(?!font|sunhints|color/|font/|geom/|im/|image/|print/)? >> ?2d-dev?: "src/java.desktop/share/classes/sun/awt/(font|sunhints|color/|font/|geom/|image/|print/)" >> ?I18n-dev?: "src/java.desktop/share/classes/sun/awt/im/? >> In this example, anything not explicitly indicated as belonging to either 2d-dev or i18-dev will be matched by awt-dev. From joe.darcy at oracle.com Thu Aug 27 17:37:07 2020 From: joe.darcy at oracle.com (Joe Darcy) Date: Thu, 27 Aug 2020 10:37:07 -0700 Subject: Request for assistance: Verify and update mailing list filter rules for jdk/jdk in preparation for Skara transition In-Reply-To: <35347485-216D-42BC-A05A-8D974E3FA581@oracle.com> References: <568BB329-6F50-43B4-BE1D-3A9D7EA60F79@oracle.com> <35347485-216D-42BC-A05A-8D974E3FA581@oracle.com> Message-ID: <56e127e9-3802-a8d5-9a79-042166f02409@oracle.com> Hello, The mapping of changed-file-to-OpenJDK-mailing-list(s)-to-review-the-file can be non-obvious, both to new contributors and to experienced contributors working in an unfamiliar area. If an automated mapping gets this 95+% correct, with the ability for manual tweaking, that strikes me as an overall improvement over the current situation. The current mapping has various entries that should be changed, but that is why it is being sent out for review before the Skara transition :-) As a general comment, I would expect both the mapping and other aspects of the Skara tooling to get updated in response to feedback after jdk/jdk moves over. -Joe On 8/27/2020 9:53 AM, Igor Ignatyev wrote: > Hi Robin, > > although I really like the idea of having mapping b/w files and groups/components/subcomponents, I agree w/ David that in its *current* form it's unworkable. having the mapping in Skara repo is impractical, as it introduces additional overhead for maintenance, not to speak of possible desynchronization. Thus I suggest moving the mapping to jdk/jdk repo and updating Skara tooling accordingly. > > I also have a question regarding the format, why did you decide to invent your own format instead of using CODEOWNER-like format which fits the needs rather nicely and is used for similar purposes by github and gitlab? > > Thanks, > -- Igor > >> On Aug 27, 2020, at 6:26 AM, David Holmes wrote: >> >> In all seriousness I just don't think this is a reasonable or necessary thing to do. When you create a PR you should specify the mailing lists to be used, as you do today with a RFR. Trying to maintain a file by file mapping is just a huge initial setup cost and a maintenance nightmare. It is not necessary to try and automate this IMO. >> >> I wish this intent had been flagged/discussed some time ago. :( >> >> David >> ----- >> >> On 27/08/2020 8:34 pm, Robin Westberg wrote: >>> Hi all, >>> As part of transitioning the jdk/jdk repository to Git with project Skara, we have created a set of rules that determine which mailing list(s) should be the default recipient of a review request, depending on which files are changed. The initial version of these rules was created by looking at historical commits and matching them with existing mailing list review threads. This has produced a reasonable basis, but it can most certainly be made better with some additional manual curating. >>> Therefore, it would be very helpful if people with good knowledge of the various subsystems and source files that make up the JDK would be willing to take a look at these rules, and also suggest improvements where needed. In addition, lists like [1] would also be very useful insofar they exist. >>> The current version of these rules is located in a JSON file in the Skara repository at [2]. In order to check the validity of the rules, there is also a CLI tool that can be used to apply it to either a subset of files or existing commits and produce a suggestion [3] [4]. If you are interested in helping out with curating these rules, these are the steps to get started: >>> 1. Install the Skara CLI tools: https://wiki.openjdk.java.net/display/SKARA/CLI+Tools >>> 2. Locate a suitable clone of the jdk/jdk repository (either Mercurial or Git is fine) >>> 3. Change (cd) to the root of your jdk/jdk repository >>> 3. Run the ?debug mlrules? command on your favorite subset of files, for example like this (use the actual location of jdk.json on your system): >>> $ git skara debug mlrules -v ~/git/skara/config/mailinglist/rules/jdk.json src/hotspot/share/jfr/ >>> Reading rules file... >>> src/hotspot/share/jfr/dcmd: [hotspot-jfr-dev] >>> src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp: [hotspot-jfr-dev] >>> src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.hpp: [hotspot-jfr-dev] >>> src/hotspot/share/jfr/instrumentation/jfrJvmtiAgent.cpp: [hotspot-jfr-dev, serviceability-dev] >>> ? >>> Final list suggestion is: [hotspot-jfr-dev, serviceability-dev] >>> The command accepts multiple folder and/or file names to make it possible to simulate a potential change to a given set of files: >>> $ git skara debug mlrules -v ../skara/config/mailinglist/rules/jdk.json doc/ide.md src/hotspot/cpu/x86/x86.ad src/hotspot/os/linux/gc/z/zNUMA_linux.cpp >>> Reading rules file... >>> doc: [build-dev] >>> src/hotspot/cpu: [hotspot-compiler-dev] >>> src/hotspot/os: [hotspot-runtime-dev, hotspot-gc-dev] >>> Combined list suggestion: [build-dev, hotspot-compiler-dev, hotspot-gc-dev, hotspot-runtime-dev] >>> Final list suggestion is: [build-dev, hotspot-dev] >>> If the suggestions look fine, all is well. If not, you are welcome to propose a change to the rules, preferably by editing the jdk.json file [6] and creating a pull request towards the Skara project as described in [5]. Coincidentally, this is the same way that future changes to the jdk/jdk repository will be integrated, so this exercise could also serve as a way of getting started with Git / Skara! >>> Best regards, >>> Robin >>> [1] https://openjdk.java.net/groups/2d/2dawtfiles.html >>> [2] https://git.openjdk.java.net/skara/blob/master/config/mailinglist/rules/jdk.json >>> [3] >>> $ git skara debug mlrules -v ~/git/skara/config/mailinglist/rules/jdk.json src/java.desktop/unix/native >>> Reading rules file... >>> src/java.desktop/unix/native/common: [2d-dev] >>> src/java.desktop/unix/native/include: [] >>> src/java.desktop/unix/native/libawt: [2d-dev] >>> src/java.desktop/unix/native/libawt_headless: [awt-dev] >>> src/java.desktop/unix/native/libawt_xawt: [awt-dev] >>> src/java.desktop/unix/native/libfontmanager: [2d-dev] >>> src/java.desktop/unix/native/libjawt: [awt-dev] >>> src/java.desktop/unix/native/libsplashscreen: [awt-dev] >>> Combined list suggestion: [2d-dev, awt-dev] >>> Final list suggestion is: [2d-dev, awt-dev] >>> [4] >>> $ git skara debug mlrules -d 30 -v ~/git/skara/config/mailinglist/rules/jdk.json . >>> ... >>> ? [2d-dev, awt-dev, serviceability-dev] c32923e0: 8240487: Cleanup whitespace in .cc, .hh, .m, and .mm files >>> ? [awt-dev] 7f74c7dd: 8212226: SurfaceManager throws "Invalid Image variant" for MultiResolutionImage (Windows) >>> Suggested lists: [2d-dev, awt-dev] >>> Rules matching unmentioned lists [2d-dev]: >>> src/java.desktop/share/classes/sun/java2d/SunGraphics2D.java - [2d-dev: ^src/java.desktop/share/classes/sun/java2d/] >>> ? >>> [5] https://wiki.openjdk.java.net/display/SKARA/Skara#Skara-Workflow >>> [6] >>> The rules are made up of sets of regular expressions for the various mailing lists that are used for reviewing changes going into the JDK. If any rule matches, that mailing list will get a copy of the review request email. For directories containing files that belong to different subsystems, it?s usually a good idea to write the rules in a complementary fashion if possible, so that anything not explicitly mentioned gets a reasonable default. As an example, see these rules for a subset of awt / 2d / i18n files: >>> ?awt-dev?: "src/java.desktop/share/classes/sun/awt/(?!font|sunhints|color/|font/|geom/|im/|image/|print/)? >>> ?2d-dev?: "src/java.desktop/share/classes/sun/awt/(font|sunhints|color/|font/|geom/|image/|print/)" >>> ?I18n-dev?: "src/java.desktop/share/classes/sun/awt/im/? >>> In this example, anything not explicitly indicated as belonging to either 2d-dev or i18-dev will be matched by awt-dev. From jesper.wilhelmsson at oracle.com Thu Aug 27 19:32:58 2020 From: jesper.wilhelmsson at oracle.com (Jesper Wilhelmsson) Date: Thu, 27 Aug 2020 21:32:58 +0200 Subject: Request for assistance: Verify and update mailing list filter rules for jdk/jdk in preparation for Skara transition In-Reply-To: <56e127e9-3802-a8d5-9a79-042166f02409@oracle.com> References: <568BB329-6F50-43B4-BE1D-3A9D7EA60F79@oracle.com> <35347485-216D-42BC-A05A-8D974E3FA581@oracle.com> <56e127e9-3802-a8d5-9a79-042166f02409@oracle.com> Message-ID: <121BF6EC-0C94-4362-B907-7B63F75E88EC@oracle.com> Hi Robin et al. There is a mapping available already on our internal wiki that you can use/could have used as a starting point, search for "How to know who owns what code". I intend to move this mapping to the Developers' Guide fairly soon so that it's available to the whole community. Automating the selection of mailing lists is good iff the author of a change is programmatically required to verify that the selected lists is correct. For the user who don't have a clue as to what list to send to verifying won't make any difference, but not being forced to verify will allow the user who do know to become lazy and trust the automatic selection. An automated system can never be 100% correct since changes to the same file can be done for different reasons and require review on different lists, so regardless of where the initial set of addresses come from the author must be able to edit these to add or remove lists to fit the change in question. /Jesper > On 27 Aug 2020, at 19:37, Joe Darcy wrote: > > Hello, > > The mapping of changed-file-to-OpenJDK-mailing-list(s)-to-review-the-file can be non-obvious, both to new contributors and to experienced contributors working in an unfamiliar area. If an automated mapping gets this 95+% correct, with the ability for manual tweaking, that strikes me as an overall improvement over the current situation. > > The current mapping has various entries that should be changed, but that is why it is being sent out for review before the Skara transition :-) > > As a general comment, I would expect both the mapping and other aspects of the Skara tooling to get updated in response to feedback after jdk/jdk moves over. > > -Joe > > On 8/27/2020 9:53 AM, Igor Ignatyev wrote: >> Hi Robin, >> >> although I really like the idea of having mapping b/w files and groups/components/subcomponents, I agree w/ David that in its *current* form it's unworkable. having the mapping in Skara repo is impractical, as it introduces additional overhead for maintenance, not to speak of possible desynchronization. Thus I suggest moving the mapping to jdk/jdk repo and updating Skara tooling accordingly. >> >> I also have a question regarding the format, why did you decide to invent your own format instead of using CODEOWNER-like format which fits the needs rather nicely and is used for similar purposes by github and gitlab? >> >> Thanks, >> -- Igor >> >>> On Aug 27, 2020, at 6:26 AM, David Holmes wrote: >>> >>> In all seriousness I just don't think this is a reasonable or necessary thing to do. When you create a PR you should specify the mailing lists to be used, as you do today with a RFR. Trying to maintain a file by file mapping is just a huge initial setup cost and a maintenance nightmare. It is not necessary to try and automate this IMO. >>> >>> I wish this intent had been flagged/discussed some time ago. :( >>> >>> David >>> ----- >>> >>> On 27/08/2020 8:34 pm, Robin Westberg wrote: >>>> Hi all, >>>> As part of transitioning the jdk/jdk repository to Git with project Skara, we have created a set of rules that determine which mailing list(s) should be the default recipient of a review request, depending on which files are changed. The initial version of these rules was created by looking at historical commits and matching them with existing mailing list review threads. This has produced a reasonable basis, but it can most certainly be made better with some additional manual curating. >>>> Therefore, it would be very helpful if people with good knowledge of the various subsystems and source files that make up the JDK would be willing to take a look at these rules, and also suggest improvements where needed. In addition, lists like [1] would also be very useful insofar they exist. >>>> The current version of these rules is located in a JSON file in the Skara repository at [2]. In order to check the validity of the rules, there is also a CLI tool that can be used to apply it to either a subset of files or existing commits and produce a suggestion [3] [4]. If you are interested in helping out with curating these rules, these are the steps to get started: >>>> 1. Install the Skara CLI tools: https://wiki.openjdk.java.net/display/SKARA/CLI+Tools >>>> 2. Locate a suitable clone of the jdk/jdk repository (either Mercurial or Git is fine) >>>> 3. Change (cd) to the root of your jdk/jdk repository >>>> 3. Run the ?debug mlrules? command on your favorite subset of files, for example like this (use the actual location of jdk.json on your system): >>>> $ git skara debug mlrules -v ~/git/skara/config/mailinglist/rules/jdk.json src/hotspot/share/jfr/ >>>> Reading rules file... >>>> src/hotspot/share/jfr/dcmd: [hotspot-jfr-dev] >>>> src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp: [hotspot-jfr-dev] >>>> src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.hpp: [hotspot-jfr-dev] >>>> src/hotspot/share/jfr/instrumentation/jfrJvmtiAgent.cpp: [hotspot-jfr-dev, serviceability-dev] >>>> ? >>>> Final list suggestion is: [hotspot-jfr-dev, serviceability-dev] >>>> The command accepts multiple folder and/or file names to make it possible to simulate a potential change to a given set of files: >>>> $ git skara debug mlrules -v ../skara/config/mailinglist/rules/jdk.json doc/ide.md src/hotspot/cpu/x86/x86.ad src/hotspot/os/linux/gc/z/zNUMA_linux.cpp >>>> Reading rules file... >>>> doc: [build-dev] >>>> src/hotspot/cpu: [hotspot-compiler-dev] >>>> src/hotspot/os: [hotspot-runtime-dev, hotspot-gc-dev] >>>> Combined list suggestion: [build-dev, hotspot-compiler-dev, hotspot-gc-dev, hotspot-runtime-dev] >>>> Final list suggestion is: [build-dev, hotspot-dev] >>>> If the suggestions look fine, all is well. If not, you are welcome to propose a change to the rules, preferably by editing the jdk.json file [6] and creating a pull request towards the Skara project as described in [5]. Coincidentally, this is the same way that future changes to the jdk/jdk repository will be integrated, so this exercise could also serve as a way of getting started with Git / Skara! >>>> Best regards, >>>> Robin >>>> [1] https://openjdk.java.net/groups/2d/2dawtfiles.html >>>> [2] https://git.openjdk.java.net/skara/blob/master/config/mailinglist/rules/jdk.json >>>> [3] >>>> $ git skara debug mlrules -v ~/git/skara/config/mailinglist/rules/jdk.json src/java.desktop/unix/native >>>> Reading rules file... >>>> src/java.desktop/unix/native/common: [2d-dev] >>>> src/java.desktop/unix/native/include: [] >>>> src/java.desktop/unix/native/libawt: [2d-dev] >>>> src/java.desktop/unix/native/libawt_headless: [awt-dev] >>>> src/java.desktop/unix/native/libawt_xawt: [awt-dev] >>>> src/java.desktop/unix/native/libfontmanager: [2d-dev] >>>> src/java.desktop/unix/native/libjawt: [awt-dev] >>>> src/java.desktop/unix/native/libsplashscreen: [awt-dev] >>>> Combined list suggestion: [2d-dev, awt-dev] >>>> Final list suggestion is: [2d-dev, awt-dev] >>>> [4] >>>> $ git skara debug mlrules -d 30 -v ~/git/skara/config/mailinglist/rules/jdk.json . >>>> ... >>>> ? [2d-dev, awt-dev, serviceability-dev] c32923e0: 8240487: Cleanup whitespace in .cc, .hh, .m, and .mm files >>>> ? [awt-dev] 7f74c7dd: 8212226: SurfaceManager throws "Invalid Image variant" for MultiResolutionImage (Windows) >>>> Suggested lists: [2d-dev, awt-dev] >>>> Rules matching unmentioned lists [2d-dev]: >>>> src/java.desktop/share/classes/sun/java2d/SunGraphics2D.java - [2d-dev: ^src/java.desktop/share/classes/sun/java2d/] >>>> ? >>>> [5] https://wiki.openjdk.java.net/display/SKARA/Skara#Skara-Workflow >>>> [6] >>>> The rules are made up of sets of regular expressions for the various mailing lists that are used for reviewing changes going into the JDK. If any rule matches, that mailing list will get a copy of the review request email. For directories containing files that belong to different subsystems, it?s usually a good idea to write the rules in a complementary fashion if possible, so that anything not explicitly mentioned gets a reasonable default. As an example, see these rules for a subset of awt / 2d / i18n files: >>>> ?awt-dev?: "src/java.desktop/share/classes/sun/awt/(?!font|sunhints|color/|font/|geom/|im/|image/|print/)? >>>> ?2d-dev?: "src/java.desktop/share/classes/sun/awt/(font|sunhints|color/|font/|geom/|image/|print/)" >>>> ?I18n-dev?: "src/java.desktop/share/classes/sun/awt/im/? >>>> In this example, anything not explicitly indicated as belonging to either 2d-dev or i18-dev will be matched by awt-dev. From david.holmes at oracle.com Thu Aug 27 22:00:30 2020 From: david.holmes at oracle.com (David Holmes) Date: Fri, 28 Aug 2020 08:00:30 +1000 Subject: Request for assistance: Verify and update mailing list filter rules for jdk/jdk in preparation for Skara transition In-Reply-To: <121BF6EC-0C94-4362-B907-7B63F75E88EC@oracle.com> References: <568BB329-6F50-43B4-BE1D-3A9D7EA60F79@oracle.com> <35347485-216D-42BC-A05A-8D974E3FA581@oracle.com> <56e127e9-3802-a8d5-9a79-042166f02409@oracle.com> <121BF6EC-0C94-4362-B907-7B63F75E88EC@oracle.com> Message-ID: <238f38b5-35c2-f78e-d054-4fd7e0943a1c@oracle.com> To expand further on my comments. An initial coarse mapping of file to mailing-list is a good thing and yes it addresses the new-contributor problem (or at least assists with it). And as Jesper states we have that mapping already written down here at Oracle. But what has been produced is unnecessarily complicated IMO and results in many unnecessary cross-postings. Rather than going through a long complex mapping and culling the inappropriate ones, it would have been easier IMO to add in missing ones to a coarser starting list. I see many issues with the proposed mapping generated e.g. - why do build-dev care about manpage edits? - why does compiler-dev (javac) care about hotspot changes or core-libs changes? I monitor core-libs-dev and also review there and it is very rare to see something reviewed on core-libs-dev that is also reviewed on compiler-dev, yet the rules include src/java.base/share/classes/java/lang/ for compiler-dev! I'm all for aiding the developer selecting the right set of MLs, but that has to be a guided choice where the developer has the control IMO (and Jesper's :) ). At the moment the developer will be able to add to the list of MLs in a PR but not remove the ones produced by this mapping - though Erik D. has stated that he will look into that. Though I'm concerned that the only practical way to produce a PR will be via the GUI rather than the CLI. Cheers, David ----- On 28/08/2020 5:32 am, Jesper Wilhelmsson wrote: > Hi Robin et al. > > There is a mapping available already on our internal wiki that you can use/could have used as a starting point, search for "How to know who owns what code". > > I intend to move this mapping to the Developers' Guide fairly soon so that it's available to the whole community. > > Automating the selection of mailing lists is good iff the author of a change is programmatically required to verify that the selected lists is correct. For the user who don't have a clue as to what list to send to verifying won't make any difference, but not being forced to verify will allow the user who do know to become lazy and trust the automatic selection. > > An automated system can never be 100% correct since changes to the same file can be done for different reasons and require review on different lists, so regardless of where the initial set of addresses come from the author must be able to edit these to add or remove lists to fit the change in question. > > /Jesper > >> On 27 Aug 2020, at 19:37, Joe Darcy wrote: >> >> Hello, >> >> The mapping of changed-file-to-OpenJDK-mailing-list(s)-to-review-the-file can be non-obvious, both to new contributors and to experienced contributors working in an unfamiliar area. If an automated mapping gets this 95+% correct, with the ability for manual tweaking, that strikes me as an overall improvement over the current situation. >> >> The current mapping has various entries that should be changed, but that is why it is being sent out for review before the Skara transition :-) >> >> As a general comment, I would expect both the mapping and other aspects of the Skara tooling to get updated in response to feedback after jdk/jdk moves over. >> >> -Joe >> >> On 8/27/2020 9:53 AM, Igor Ignatyev wrote: >>> Hi Robin, >>> >>> although I really like the idea of having mapping b/w files and groups/components/subcomponents, I agree w/ David that in its *current* form it's unworkable. having the mapping in Skara repo is impractical, as it introduces additional overhead for maintenance, not to speak of possible desynchronization. Thus I suggest moving the mapping to jdk/jdk repo and updating Skara tooling accordingly. >>> >>> I also have a question regarding the format, why did you decide to invent your own format instead of using CODEOWNER-like format which fits the needs rather nicely and is used for similar purposes by github and gitlab? >>> >>> Thanks, >>> -- Igor >>> >>>> On Aug 27, 2020, at 6:26 AM, David Holmes wrote: >>>> >>>> In all seriousness I just don't think this is a reasonable or necessary thing to do. When you create a PR you should specify the mailing lists to be used, as you do today with a RFR. Trying to maintain a file by file mapping is just a huge initial setup cost and a maintenance nightmare. It is not necessary to try and automate this IMO. >>>> >>>> I wish this intent had been flagged/discussed some time ago. :( >>>> >>>> David >>>> ----- >>>> >>>> On 27/08/2020 8:34 pm, Robin Westberg wrote: >>>>> Hi all, >>>>> As part of transitioning the jdk/jdk repository to Git with project Skara, we have created a set of rules that determine which mailing list(s) should be the default recipient of a review request, depending on which files are changed. The initial version of these rules was created by looking at historical commits and matching them with existing mailing list review threads. This has produced a reasonable basis, but it can most certainly be made better with some additional manual curating. >>>>> Therefore, it would be very helpful if people with good knowledge of the various subsystems and source files that make up the JDK would be willing to take a look at these rules, and also suggest improvements where needed. In addition, lists like [1] would also be very useful insofar they exist. >>>>> The current version of these rules is located in a JSON file in the Skara repository at [2]. In order to check the validity of the rules, there is also a CLI tool that can be used to apply it to either a subset of files or existing commits and produce a suggestion [3] [4]. If you are interested in helping out with curating these rules, these are the steps to get started: >>>>> 1. Install the Skara CLI tools: https://wiki.openjdk.java.net/display/SKARA/CLI+Tools >>>>> 2. Locate a suitable clone of the jdk/jdk repository (either Mercurial or Git is fine) >>>>> 3. Change (cd) to the root of your jdk/jdk repository >>>>> 3. Run the ?debug mlrules? command on your favorite subset of files, for example like this (use the actual location of jdk.json on your system): >>>>> $ git skara debug mlrules -v ~/git/skara/config/mailinglist/rules/jdk.json src/hotspot/share/jfr/ >>>>> Reading rules file... >>>>> src/hotspot/share/jfr/dcmd: [hotspot-jfr-dev] >>>>> src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp: [hotspot-jfr-dev] >>>>> src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.hpp: [hotspot-jfr-dev] >>>>> src/hotspot/share/jfr/instrumentation/jfrJvmtiAgent.cpp: [hotspot-jfr-dev, serviceability-dev] >>>>> ? >>>>> Final list suggestion is: [hotspot-jfr-dev, serviceability-dev] >>>>> The command accepts multiple folder and/or file names to make it possible to simulate a potential change to a given set of files: >>>>> $ git skara debug mlrules -v ../skara/config/mailinglist/rules/jdk.json doc/ide.md src/hotspot/cpu/x86/x86.ad src/hotspot/os/linux/gc/z/zNUMA_linux.cpp >>>>> Reading rules file... >>>>> doc: [build-dev] >>>>> src/hotspot/cpu: [hotspot-compiler-dev] >>>>> src/hotspot/os: [hotspot-runtime-dev, hotspot-gc-dev] >>>>> Combined list suggestion: [build-dev, hotspot-compiler-dev, hotspot-gc-dev, hotspot-runtime-dev] >>>>> Final list suggestion is: [build-dev, hotspot-dev] >>>>> If the suggestions look fine, all is well. If not, you are welcome to propose a change to the rules, preferably by editing the jdk.json file [6] and creating a pull request towards the Skara project as described in [5]. Coincidentally, this is the same way that future changes to the jdk/jdk repository will be integrated, so this exercise could also serve as a way of getting started with Git / Skara! >>>>> Best regards, >>>>> Robin >>>>> [1] https://openjdk.java.net/groups/2d/2dawtfiles.html >>>>> [2] https://git.openjdk.java.net/skara/blob/master/config/mailinglist/rules/jdk.json >>>>> [3] >>>>> $ git skara debug mlrules -v ~/git/skara/config/mailinglist/rules/jdk.json src/java.desktop/unix/native >>>>> Reading rules file... >>>>> src/java.desktop/unix/native/common: [2d-dev] >>>>> src/java.desktop/unix/native/include: [] >>>>> src/java.desktop/unix/native/libawt: [2d-dev] >>>>> src/java.desktop/unix/native/libawt_headless: [awt-dev] >>>>> src/java.desktop/unix/native/libawt_xawt: [awt-dev] >>>>> src/java.desktop/unix/native/libfontmanager: [2d-dev] >>>>> src/java.desktop/unix/native/libjawt: [awt-dev] >>>>> src/java.desktop/unix/native/libsplashscreen: [awt-dev] >>>>> Combined list suggestion: [2d-dev, awt-dev] >>>>> Final list suggestion is: [2d-dev, awt-dev] >>>>> [4] >>>>> $ git skara debug mlrules -d 30 -v ~/git/skara/config/mailinglist/rules/jdk.json . >>>>> ... >>>>> ? [2d-dev, awt-dev, serviceability-dev] c32923e0: 8240487: Cleanup whitespace in .cc, .hh, .m, and .mm files >>>>> ? [awt-dev] 7f74c7dd: 8212226: SurfaceManager throws "Invalid Image variant" for MultiResolutionImage (Windows) >>>>> Suggested lists: [2d-dev, awt-dev] >>>>> Rules matching unmentioned lists [2d-dev]: >>>>> src/java.desktop/share/classes/sun/java2d/SunGraphics2D.java - [2d-dev: ^src/java.desktop/share/classes/sun/java2d/] >>>>> ? >>>>> [5] https://wiki.openjdk.java.net/display/SKARA/Skara#Skara-Workflow >>>>> [6] >>>>> The rules are made up of sets of regular expressions for the various mailing lists that are used for reviewing changes going into the JDK. If any rule matches, that mailing list will get a copy of the review request email. For directories containing files that belong to different subsystems, it?s usually a good idea to write the rules in a complementary fashion if possible, so that anything not explicitly mentioned gets a reasonable default. As an example, see these rules for a subset of awt / 2d / i18n files: >>>>> ?awt-dev?: "src/java.desktop/share/classes/sun/awt/(?!font|sunhints|color/|font/|geom/|im/|image/|print/)? >>>>> ?2d-dev?: "src/java.desktop/share/classes/sun/awt/(font|sunhints|color/|font/|geom/|image/|print/)" >>>>> ?I18n-dev?: "src/java.desktop/share/classes/sun/awt/im/? >>>>> In this example, anything not explicitly indicated as belonging to either 2d-dev or i18-dev will be matched by awt-dev. > From thomas.stuefe at gmail.com Thu Aug 27 22:44:14 2020 From: thomas.stuefe at gmail.com (=?UTF-8?Q?Thomas_St=C3=BCfe?=) Date: Fri, 28 Aug 2020 00:44:14 +0200 Subject: Request for assistance: Verify and update mailing list filter rules for jdk/jdk in preparation for Skara transition In-Reply-To: <568BB329-6F50-43B4-BE1D-3A9D7EA60F79@oracle.com> References: <568BB329-6F50-43B4-BE1D-3A9D7EA60F79@oracle.com> Message-ID: Hi Robin, FWIW I agree with David and Jesper. IMHO any automated system will not be sufficient. It should only generate coarse grained proposals, and the developer should be able to manually cull, extend or completely overwrite them. Especially for broader changes which only touch a few lines per file, e.g. cleanups, I would really dislike auto-crossposting to a large number of lists. Also, there are many cases where the correct list is not clear - e.g. changes inside hotspot/share/jfr may be better suited for hotspot-runtime or hotspot-dev instead of jfr, depending on what is changed. This is especially true for changes to os-port files. I think that the json files are way too expansive, and fear the effort to maintain them would outgrow the effort to direct newcomers to the new mailing list. Like Igor I also would prefer some sort of notation in-tree instead of a separate control file in a different repo (how would that work with different jdk repositories?). Maybe a simple stupid mechanism with the ability to redefine targets at deeper folders or at files would be more concise. For example, pragmatically everything inside "hotspot" could be runtime, unless "hotspot/share/gc", which would be gc, "hotspot/share/compiler" would be compiler, "hotspot/share/jfr" would be jfr, hotspot/os/ could be port... I don't even see a need for regular expressions tbh. Cheers, Thomas On Thu, Aug 27, 2020 at 12:35 PM Robin Westberg wrote: > Hi all, > > As part of transitioning the jdk/jdk repository to Git with project Skara, > we have created a set of rules that determine which mailing list(s) should > be the default recipient of a review request, depending on which files are > changed. The initial version of these rules was created by looking at > historical commits and matching them with existing mailing list review > threads. This has produced a reasonable basis, but it can most certainly be > made better with some additional manual curating. > > Therefore, it would be very helpful if people with good knowledge of the > various subsystems and source files that make up the JDK would be willing > to take a look at these rules, and also suggest improvements where needed. > In addition, lists like [1] would also be very useful insofar they exist. > > The current version of these rules is located in a JSON file in the Skara > repository at [2]. In order to check the validity of the rules, there is > also a CLI tool that can be used to apply it to either a subset of files or > existing commits and produce a suggestion [3] [4]. If you are interested in > helping out with curating these rules, these are the steps to get started: > > 1. Install the Skara CLI tools: > https://wiki.openjdk.java.net/display/SKARA/CLI+Tools > 2. Locate a suitable clone of the jdk/jdk repository (either Mercurial or > Git is fine) > 3. Change (cd) to the root of your jdk/jdk repository > 3. Run the ?debug mlrules? command on your favorite subset of files, for > example like this (use the actual location of jdk.json on your system): > > $ git skara debug mlrules -v ~/git/skara/config/mailinglist/rules/jdk.json > src/hotspot/share/jfr/ > Reading rules file... > src/hotspot/share/jfr/dcmd: [hotspot-jfr-dev] > src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp: > [hotspot-jfr-dev] > src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.hpp: > [hotspot-jfr-dev] > src/hotspot/share/jfr/instrumentation/jfrJvmtiAgent.cpp: [hotspot-jfr-dev, > serviceability-dev] > ? > Final list suggestion is: [hotspot-jfr-dev, serviceability-dev] > > The command accepts multiple folder and/or file names to make it possible > to simulate a potential change to a given set of files: > > $ git skara debug mlrules -v ../skara/config/mailinglist/rules/jdk.json > doc/ide.md src/hotspot/cpu/x86/x86.ad > src/hotspot/os/linux/gc/z/zNUMA_linux.cpp > Reading rules file... > doc: [build-dev] > src/hotspot/cpu: [hotspot-compiler-dev] > src/hotspot/os: [hotspot-runtime-dev, hotspot-gc-dev] > > Combined list suggestion: [build-dev, hotspot-compiler-dev, > hotspot-gc-dev, hotspot-runtime-dev] > Final list suggestion is: [build-dev, hotspot-dev] > > If the suggestions look fine, all is well. If not, you are welcome to > propose a change to the rules, preferably by editing the jdk.json file [6] > and creating a pull request towards the Skara project as described in [5]. > Coincidentally, this is the same way that future changes to the jdk/jdk > repository will be integrated, so this exercise could also serve as a way > of getting started with Git / Skara! > > Best regards, > Robin > > [1] https://openjdk.java.net/groups/2d/2dawtfiles.html > [2] > https://git.openjdk.java.net/skara/blob/master/config/mailinglist/rules/jdk.json > > [3] > $ git skara debug mlrules -v ~/git/skara/config/mailinglist/rules/jdk.json > src/java.desktop/unix/native > Reading rules file... > src/java.desktop/unix/native/common: [2d-dev] > src/java.desktop/unix/native/include: [] > src/java.desktop/unix/native/libawt: [2d-dev] > src/java.desktop/unix/native/libawt_headless: [awt-dev] > src/java.desktop/unix/native/libawt_xawt: [awt-dev] > src/java.desktop/unix/native/libfontmanager: [2d-dev] > src/java.desktop/unix/native/libjawt: [awt-dev] > src/java.desktop/unix/native/libsplashscreen: [awt-dev] > > Combined list suggestion: [2d-dev, awt-dev] > Final list suggestion is: [2d-dev, awt-dev] > > [4] > $ git skara debug mlrules -d 30 -v > ~/git/skara/config/mailinglist/rules/jdk.json . > ... > ? [2d-dev, awt-dev, serviceability-dev] c32923e0: 8240487: Cleanup > whitespace in .cc, .hh, .m, and .mm files > ? [awt-dev] 7f74c7dd: 8212226: SurfaceManager throws "Invalid Image > variant" for MultiResolutionImage (Windows) > Suggested lists: [2d-dev, awt-dev] > Rules matching unmentioned lists [2d-dev]: > src/java.desktop/share/classes/sun/java2d/SunGraphics2D.java - > [2d-dev: ^src/java.desktop/share/classes/sun/java2d/] > ? > > [5] https://wiki.openjdk.java.net/display/SKARA/Skara#Skara-Workflow > > [6] > The rules are made up of sets of regular expressions for the various > mailing lists that are used for reviewing changes going into the JDK. If > any rule matches, that mailing list will get a copy of the review request > email. For directories containing files that belong to different > subsystems, it?s usually a good idea to write the rules in a complementary > fashion if possible, so that anything not explicitly mentioned gets a > reasonable default. As an example, see these rules for a subset of awt / 2d > / i18n files: > > ?awt-dev?: > "src/java.desktop/share/classes/sun/awt/(?!font|sunhints|color/|font/|geom/|im/|image/|print/)? > ?2d-dev?: > "src/java.desktop/share/classes/sun/awt/(font|sunhints|color/|font/|geom/|image/|print/)" > ?I18n-dev?: "src/java.desktop/share/classes/sun/awt/im/? > > In this example, anything not explicitly indicated as belonging to either > 2d-dev or i18-dev will be matched by awt-dev. > > From david.holmes at oracle.com Fri Aug 28 00:43:07 2020 From: david.holmes at oracle.com (David Holmes) Date: Fri, 28 Aug 2020 10:43:07 +1000 Subject: Request for assistance: Verify and update mailing list filter rules for jdk/jdk in preparation for Skara transition In-Reply-To: References: <568BB329-6F50-43B4-BE1D-3A9D7EA60F79@oracle.com> Message-ID: On 28/08/2020 8:44 am, Thomas St?fe wrote: > Hi Robin, > > FWIW I agree with David and Jesper. > > IMHO any automated system will not be sufficient. It should only generate > coarse grained proposals, and the developer should be able to manually > cull, extend or completely overwrite them. Especially for broader changes > which only touch a few lines per file, e.g. cleanups, I would really > dislike auto-crossposting to a large number of lists. Also, there are many > cases where the correct list is not clear - e.g. changes inside > hotspot/share/jfr may be better suited for hotspot-runtime or hotspot-dev > instead of jfr, depending on what is changed. This is especially true for > changes to os-port files. > > I think that the json files are way too expansive, and fear the effort to > maintain them would outgrow the effort to direct newcomers to the new > mailing list. > > Like Igor I also would prefer some sort of notation in-tree instead of a > separate control file in a different repo (how would that work with > different jdk repositories?). > > Maybe a simple stupid mechanism with the ability to redefine targets at > deeper folders or at files would be more concise. For example, > pragmatically everything inside "hotspot" could be runtime, unless > "hotspot/share/gc", which would be gc, "hotspot/share/compiler" would be > compiler, "hotspot/share/jfr" would be jfr, hotspot/os/ could be > port... I don't even see a need for regular expressions tbh. There's also serviceability-dev (where the line with runtime is often very blurred). The os and cpu directories are very tricky to classify on a file basis as the the files do not clearly delineate functional areas that map to mailing lists. In many cases it is the nature of the change that dictates which MLs should be getting the RFR. And we don't really have any guidelines for when to use hotspot-dev versus one or more hotspot-x-dev lists. There is a subjectivity here that is not amenable to automated classification without reorganising files/directories in a way that reflects the ML granularity (and I certainly would not want to see that kind of churn). Also we don't have xxx_port mailing lists for all xxx, and those lists are intended for discussion of porting projects, not mainline issues that affect platform specific code per-se. Though Aarch64 is blurring that distinction these days (just an observation not a criticism). Cheers, David > Cheers, Thomas > > On Thu, Aug 27, 2020 at 12:35 PM Robin Westberg > wrote: > >> Hi all, >> >> As part of transitioning the jdk/jdk repository to Git with project Skara, >> we have created a set of rules that determine which mailing list(s) should >> be the default recipient of a review request, depending on which files are >> changed. The initial version of these rules was created by looking at >> historical commits and matching them with existing mailing list review >> threads. This has produced a reasonable basis, but it can most certainly be >> made better with some additional manual curating. >> >> Therefore, it would be very helpful if people with good knowledge of the >> various subsystems and source files that make up the JDK would be willing >> to take a look at these rules, and also suggest improvements where needed. >> In addition, lists like [1] would also be very useful insofar they exist. >> >> The current version of these rules is located in a JSON file in the Skara >> repository at [2]. In order to check the validity of the rules, there is >> also a CLI tool that can be used to apply it to either a subset of files or >> existing commits and produce a suggestion [3] [4]. If you are interested in >> helping out with curating these rules, these are the steps to get started: >> >> 1. Install the Skara CLI tools: >> https://wiki.openjdk.java.net/display/SKARA/CLI+Tools >> 2. Locate a suitable clone of the jdk/jdk repository (either Mercurial or >> Git is fine) >> 3. Change (cd) to the root of your jdk/jdk repository >> 3. Run the ?debug mlrules? command on your favorite subset of files, for >> example like this (use the actual location of jdk.json on your system): >> >> $ git skara debug mlrules -v ~/git/skara/config/mailinglist/rules/jdk.json >> src/hotspot/share/jfr/ >> Reading rules file... >> src/hotspot/share/jfr/dcmd: [hotspot-jfr-dev] >> src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp: >> [hotspot-jfr-dev] >> src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.hpp: >> [hotspot-jfr-dev] >> src/hotspot/share/jfr/instrumentation/jfrJvmtiAgent.cpp: [hotspot-jfr-dev, >> serviceability-dev] >> ? >> Final list suggestion is: [hotspot-jfr-dev, serviceability-dev] >> >> The command accepts multiple folder and/or file names to make it possible >> to simulate a potential change to a given set of files: >> >> $ git skara debug mlrules -v ../skara/config/mailinglist/rules/jdk.json >> doc/ide.md src/hotspot/cpu/x86/x86.ad >> src/hotspot/os/linux/gc/z/zNUMA_linux.cpp >> Reading rules file... >> doc: [build-dev] >> src/hotspot/cpu: [hotspot-compiler-dev] >> src/hotspot/os: [hotspot-runtime-dev, hotspot-gc-dev] >> >> Combined list suggestion: [build-dev, hotspot-compiler-dev, >> hotspot-gc-dev, hotspot-runtime-dev] >> Final list suggestion is: [build-dev, hotspot-dev] >> >> If the suggestions look fine, all is well. If not, you are welcome to >> propose a change to the rules, preferably by editing the jdk.json file [6] >> and creating a pull request towards the Skara project as described in [5]. >> Coincidentally, this is the same way that future changes to the jdk/jdk >> repository will be integrated, so this exercise could also serve as a way >> of getting started with Git / Skara! >> >> Best regards, >> Robin >> >> [1] https://openjdk.java.net/groups/2d/2dawtfiles.html >> [2] >> https://git.openjdk.java.net/skara/blob/master/config/mailinglist/rules/jdk.json >> >> [3] >> $ git skara debug mlrules -v ~/git/skara/config/mailinglist/rules/jdk.json >> src/java.desktop/unix/native >> Reading rules file... >> src/java.desktop/unix/native/common: [2d-dev] >> src/java.desktop/unix/native/include: [] >> src/java.desktop/unix/native/libawt: [2d-dev] >> src/java.desktop/unix/native/libawt_headless: [awt-dev] >> src/java.desktop/unix/native/libawt_xawt: [awt-dev] >> src/java.desktop/unix/native/libfontmanager: [2d-dev] >> src/java.desktop/unix/native/libjawt: [awt-dev] >> src/java.desktop/unix/native/libsplashscreen: [awt-dev] >> >> Combined list suggestion: [2d-dev, awt-dev] >> Final list suggestion is: [2d-dev, awt-dev] >> >> [4] >> $ git skara debug mlrules -d 30 -v >> ~/git/skara/config/mailinglist/rules/jdk.json . >> ... >> ? [2d-dev, awt-dev, serviceability-dev] c32923e0: 8240487: Cleanup >> whitespace in .cc, .hh, .m, and .mm files >> ? [awt-dev] 7f74c7dd: 8212226: SurfaceManager throws "Invalid Image >> variant" for MultiResolutionImage (Windows) >> Suggested lists: [2d-dev, awt-dev] >> Rules matching unmentioned lists [2d-dev]: >> src/java.desktop/share/classes/sun/java2d/SunGraphics2D.java - >> [2d-dev: ^src/java.desktop/share/classes/sun/java2d/] >> ? >> >> [5] https://wiki.openjdk.java.net/display/SKARA/Skara#Skara-Workflow >> >> [6] >> The rules are made up of sets of regular expressions for the various >> mailing lists that are used for reviewing changes going into the JDK. If >> any rule matches, that mailing list will get a copy of the review request >> email. For directories containing files that belong to different >> subsystems, it?s usually a good idea to write the rules in a complementary >> fashion if possible, so that anything not explicitly mentioned gets a >> reasonable default. As an example, see these rules for a subset of awt / 2d >> / i18n files: >> >> ?awt-dev?: >> "src/java.desktop/share/classes/sun/awt/(?!font|sunhints|color/|font/|geom/|im/|image/|print/)? >> ?2d-dev?: >> "src/java.desktop/share/classes/sun/awt/(font|sunhints|color/|font/|geom/|image/|print/)" >> ?I18n-dev?: "src/java.desktop/share/classes/sun/awt/im/? >> >> In this example, anything not explicitly indicated as belonging to either >> 2d-dev or i18-dev will be matched by awt-dev. >> >> From thomas.stuefe at gmail.com Fri Aug 28 06:46:06 2020 From: thomas.stuefe at gmail.com (=?UTF-8?Q?Thomas_St=C3=BCfe?=) Date: Fri, 28 Aug 2020 08:46:06 +0200 Subject: Request for assistance: Verify and update mailing list filter rules for jdk/jdk in preparation for Skara transition In-Reply-To: References: <568BB329-6F50-43B4-BE1D-3A9D7EA60F79@oracle.com> Message-ID: Maybe this shows also that we have too many mailing lists? Seems to me like an electrical solution to an organizational problem. There are a number of lists I am never sure about, so I usually crosspost to them-and-some-other-list. Examples are jfr-dev (which intersects with runtime a lot), ppc-aix-port-dev, bsd-port-dev - all the porter lists really apart from aarch64 as David pointed out - and a number of others. I also subscribe to all of them, so to me they don't serve the purpose of a mail filter. All of the devs I know do the same but that may be just my bubble. IMHO if a mailing list has a lot of unique traffic, and serves as an exclusion filter for a lot of recipients, it makes sense. I see hs-gc and hs-compiler like this. But if all recipients subscribe to all neighboring lists too, I don't really see the point. Directing attention can also be done with terms in subject headers (e.g. "[Windows]", "NMT", "CDS", "Metaspace"). Using these I never had the problem waking up the right people. All this is messy because we humans are messy, and that is fine. I just think culling the list of MLs a bit could simplify semi-automatic ML selection. Cheers, Thomas On Fri, Aug 28, 2020 at 2:45 AM David Holmes wrote: > On 28/08/2020 8:44 am, Thomas St?fe wrote: > > Hi Robin, > > > > FWIW I agree with David and Jesper. > > > > IMHO any automated system will not be sufficient. It should only generate > > coarse grained proposals, and the developer should be able to manually > > cull, extend or completely overwrite them. Especially for broader changes > > which only touch a few lines per file, e.g. cleanups, I would really > > dislike auto-crossposting to a large number of lists. Also, there are > many > > cases where the correct list is not clear - e.g. changes inside > > hotspot/share/jfr may be better suited for hotspot-runtime or hotspot-dev > > instead of jfr, depending on what is changed. This is especially true for > > changes to os-port files. > > > > I think that the json files are way too expansive, and fear the effort to > > maintain them would outgrow the effort to direct newcomers to the new > > mailing list. > > > > Like Igor I also would prefer some sort of notation in-tree instead of a > > separate control file in a different repo (how would that work with > > different jdk repositories?). > > > > Maybe a simple stupid mechanism with the ability to redefine targets at > > deeper folders or at files would be more concise. For example, > > pragmatically everything inside "hotspot" could be runtime, unless > > "hotspot/share/gc", which would be gc, "hotspot/share/compiler" would be > > compiler, "hotspot/share/jfr" would be jfr, hotspot/os/ could be > > > port... I don't even see a need for regular expressions tbh. > > There's also serviceability-dev (where the line with runtime is often > very blurred). > > The os and cpu directories are very tricky to classify on a file basis > as the the files do not clearly delineate functional areas that map to > mailing lists. In many cases it is the nature of the change that > dictates which MLs should be getting the RFR. And we don't really have > any guidelines for when to use hotspot-dev versus one or more > hotspot-x-dev lists. There is a subjectivity here that is not amenable > to automated classification without reorganising files/directories in a > way that reflects the ML granularity (and I certainly would not want to > see that kind of churn). > > Also we don't have xxx_port mailing lists for all xxx, and those lists > are intended for discussion of porting projects, not mainline issues > that affect platform specific code per-se. Though Aarch64 is blurring > that distinction these days (just an observation not a criticism). > > Cheers, > David > > > Cheers, Thomas > > > > On Thu, Aug 27, 2020 at 12:35 PM Robin Westberg < > robin.westberg at oracle.com> > > wrote: > > > >> Hi all, > >> > >> As part of transitioning the jdk/jdk repository to Git with project > Skara, > >> we have created a set of rules that determine which mailing list(s) > should > >> be the default recipient of a review request, depending on which files > are > >> changed. The initial version of these rules was created by looking at > >> historical commits and matching them with existing mailing list review > >> threads. This has produced a reasonable basis, but it can most > certainly be > >> made better with some additional manual curating. > >> > >> Therefore, it would be very helpful if people with good knowledge of the > >> various subsystems and source files that make up the JDK would be > willing > >> to take a look at these rules, and also suggest improvements where > needed. > >> In addition, lists like [1] would also be very useful insofar they > exist. > >> > >> The current version of these rules is located in a JSON file in the > Skara > >> repository at [2]. In order to check the validity of the rules, there is > >> also a CLI tool that can be used to apply it to either a subset of > files or > >> existing commits and produce a suggestion [3] [4]. If you are > interested in > >> helping out with curating these rules, these are the steps to get > started: > >> > >> 1. Install the Skara CLI tools: > >> https://wiki.openjdk.java.net/display/SKARA/CLI+Tools > >> 2. Locate a suitable clone of the jdk/jdk repository (either Mercurial > or > >> Git is fine) > >> 3. Change (cd) to the root of your jdk/jdk repository > >> 3. Run the ?debug mlrules? command on your favorite subset of files, for > >> example like this (use the actual location of jdk.json on your system): > >> > >> $ git skara debug mlrules -v > ~/git/skara/config/mailinglist/rules/jdk.json > >> src/hotspot/share/jfr/ > >> Reading rules file... > >> src/hotspot/share/jfr/dcmd: [hotspot-jfr-dev] > >> src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp: > >> [hotspot-jfr-dev] > >> src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.hpp: > >> [hotspot-jfr-dev] > >> src/hotspot/share/jfr/instrumentation/jfrJvmtiAgent.cpp: > [hotspot-jfr-dev, > >> serviceability-dev] > >> ? > >> Final list suggestion is: [hotspot-jfr-dev, serviceability-dev] > >> > >> The command accepts multiple folder and/or file names to make it > possible > >> to simulate a potential change to a given set of files: > >> > >> $ git skara debug mlrules -v ../skara/config/mailinglist/rules/jdk.json > >> doc/ide.md src/hotspot/cpu/x86/x86.ad > >> src/hotspot/os/linux/gc/z/zNUMA_linux.cpp > >> Reading rules file... > >> doc: [build-dev] > >> src/hotspot/cpu: [hotspot-compiler-dev] > >> src/hotspot/os: [hotspot-runtime-dev, hotspot-gc-dev] > >> > >> Combined list suggestion: [build-dev, hotspot-compiler-dev, > >> hotspot-gc-dev, hotspot-runtime-dev] > >> Final list suggestion is: [build-dev, hotspot-dev] > >> > >> If the suggestions look fine, all is well. If not, you are welcome to > >> propose a change to the rules, preferably by editing the jdk.json file > [6] > >> and creating a pull request towards the Skara project as described in > [5]. > >> Coincidentally, this is the same way that future changes to the jdk/jdk > >> repository will be integrated, so this exercise could also serve as a > way > >> of getting started with Git / Skara! > >> > >> Best regards, > >> Robin > >> > >> [1] https://openjdk.java.net/groups/2d/2dawtfiles.html > >> [2] > >> > https://git.openjdk.java.net/skara/blob/master/config/mailinglist/rules/jdk.json > >> > >> [3] > >> $ git skara debug mlrules -v > ~/git/skara/config/mailinglist/rules/jdk.json > >> src/java.desktop/unix/native > >> Reading rules file... > >> src/java.desktop/unix/native/common: [2d-dev] > >> src/java.desktop/unix/native/include: [] > >> src/java.desktop/unix/native/libawt: [2d-dev] > >> src/java.desktop/unix/native/libawt_headless: [awt-dev] > >> src/java.desktop/unix/native/libawt_xawt: [awt-dev] > >> src/java.desktop/unix/native/libfontmanager: [2d-dev] > >> src/java.desktop/unix/native/libjawt: [awt-dev] > >> src/java.desktop/unix/native/libsplashscreen: [awt-dev] > >> > >> Combined list suggestion: [2d-dev, awt-dev] > >> Final list suggestion is: [2d-dev, awt-dev] > >> > >> [4] > >> $ git skara debug mlrules -d 30 -v > >> ~/git/skara/config/mailinglist/rules/jdk.json . > >> ... > >> ? [2d-dev, awt-dev, serviceability-dev] c32923e0: 8240487: Cleanup > >> whitespace in .cc, .hh, .m, and .mm files > >> ? [awt-dev] 7f74c7dd: 8212226: SurfaceManager throws "Invalid Image > >> variant" for MultiResolutionImage (Windows) > >> Suggested lists: [2d-dev, awt-dev] > >> Rules matching unmentioned lists [2d-dev]: > >> src/java.desktop/share/classes/sun/java2d/SunGraphics2D.java - > >> [2d-dev: ^src/java.desktop/share/classes/sun/java2d/] > >> ? > >> > >> [5] https://wiki.openjdk.java.net/display/SKARA/Skara#Skara-Workflow > >> > >> [6] > >> The rules are made up of sets of regular expressions for the various > >> mailing lists that are used for reviewing changes going into the JDK. If > >> any rule matches, that mailing list will get a copy of the review > request > >> email. For directories containing files that belong to different > >> subsystems, it?s usually a good idea to write the rules in a > complementary > >> fashion if possible, so that anything not explicitly mentioned gets a > >> reasonable default. As an example, see these rules for a subset of awt > / 2d > >> / i18n files: > >> > >> ?awt-dev?: > >> > "src/java.desktop/share/classes/sun/awt/(?!font|sunhints|color/|font/|geom/|im/|image/|print/)? > >> ?2d-dev?: > >> > "src/java.desktop/share/classes/sun/awt/(font|sunhints|color/|font/|geom/|image/|print/)" > >> ?I18n-dev?: "src/java.desktop/share/classes/sun/awt/im/? > >> > >> In this example, anything not explicitly indicated as belonging to > either > >> 2d-dev or i18-dev will be matched by awt-dev. > >> > >> > From doug.simon at oracle.com Fri Aug 28 09:24:35 2020 From: doug.simon at oracle.com (Doug Simon) Date: Fri, 28 Aug 2020 11:24:35 +0200 Subject: Request for assistance: Verify and update mailing list filter rules for jdk/jdk in preparation for Skara transition In-Reply-To: References: <568BB329-6F50-43B4-BE1D-3A9D7EA60F79@oracle.com> Message-ID: Is there a reliable way to infer mailing lists from OpenJDK authors? If so, you could use git blame to derive a set of mailing lists by git blaming around the changed lines. GitHub already does something like this by suggesting reviewers on a PR: https://www.dropbox.com/s/qog88q5br5m0dsh/Screen%20Shot%202020-08-28%20at%2011.21.11.png?dl=0 -Doug > On 28 Aug 2020, at 08:46, Thomas St?fe wrote: > > Maybe this shows also that we have too many mailing lists? Seems to me like > an electrical solution to an organizational problem. > > There are a number of lists I am never sure about, so I usually crosspost > to them-and-some-other-list. Examples are jfr-dev (which intersects with > runtime a lot), ppc-aix-port-dev, bsd-port-dev - all the porter lists > really apart from aarch64 as David pointed out - and a number of others. I > also subscribe to all of them, so to me they don't serve the purpose of a > mail filter. All of the devs I know do the same but that may be just my > bubble. > > IMHO if a mailing list has a lot of unique traffic, and serves as an > exclusion filter for a lot of recipients, it makes sense. I see hs-gc and > hs-compiler like this. But if all recipients subscribe to all neighboring > lists too, I don't really see the point. Directing attention can also be > done with terms in subject headers (e.g. "[Windows]", "NMT", "CDS", > "Metaspace"). Using these I never had the problem waking up the right > people. > > All this is messy because we humans are messy, and that is fine. I just > think culling the list of MLs a bit could simplify semi-automatic ML > selection. > > Cheers, Thomas > > > On Fri, Aug 28, 2020 at 2:45 AM David Holmes > wrote: > >> On 28/08/2020 8:44 am, Thomas St?fe wrote: >>> Hi Robin, >>> >>> FWIW I agree with David and Jesper. >>> >>> IMHO any automated system will not be sufficient. It should only generate >>> coarse grained proposals, and the developer should be able to manually >>> cull, extend or completely overwrite them. Especially for broader changes >>> which only touch a few lines per file, e.g. cleanups, I would really >>> dislike auto-crossposting to a large number of lists. Also, there are >> many >>> cases where the correct list is not clear - e.g. changes inside >>> hotspot/share/jfr may be better suited for hotspot-runtime or hotspot-dev >>> instead of jfr, depending on what is changed. This is especially true for >>> changes to os-port files. >>> >>> I think that the json files are way too expansive, and fear the effort to >>> maintain them would outgrow the effort to direct newcomers to the new >>> mailing list. >>> >>> Like Igor I also would prefer some sort of notation in-tree instead of a >>> separate control file in a different repo (how would that work with >>> different jdk repositories?). >>> >>> Maybe a simple stupid mechanism with the ability to redefine targets at >>> deeper folders or at files would be more concise. For example, >>> pragmatically everything inside "hotspot" could be runtime, unless >>> "hotspot/share/gc", which would be gc, "hotspot/share/compiler" would be >>> compiler, "hotspot/share/jfr" would be jfr, hotspot/os/ could be >> >>> port... I don't even see a need for regular expressions tbh. >> >> There's also serviceability-dev (where the line with runtime is often >> very blurred). >> >> The os and cpu directories are very tricky to classify on a file basis >> as the the files do not clearly delineate functional areas that map to >> mailing lists. In many cases it is the nature of the change that >> dictates which MLs should be getting the RFR. And we don't really have >> any guidelines for when to use hotspot-dev versus one or more >> hotspot-x-dev lists. There is a subjectivity here that is not amenable >> to automated classification without reorganising files/directories in a >> way that reflects the ML granularity (and I certainly would not want to >> see that kind of churn). >> >> Also we don't have xxx_port mailing lists for all xxx, and those lists >> are intended for discussion of porting projects, not mainline issues >> that affect platform specific code per-se. Though Aarch64 is blurring >> that distinction these days (just an observation not a criticism). >> >> Cheers, >> David >> >>> Cheers, Thomas >>> >>> On Thu, Aug 27, 2020 at 12:35 PM Robin Westberg < >> robin.westberg at oracle.com> >>> wrote: >>> >>>> Hi all, >>>> >>>> As part of transitioning the jdk/jdk repository to Git with project >> Skara, >>>> we have created a set of rules that determine which mailing list(s) >> should >>>> be the default recipient of a review request, depending on which files >> are >>>> changed. The initial version of these rules was created by looking at >>>> historical commits and matching them with existing mailing list review >>>> threads. This has produced a reasonable basis, but it can most >> certainly be >>>> made better with some additional manual curating. >>>> >>>> Therefore, it would be very helpful if people with good knowledge of the >>>> various subsystems and source files that make up the JDK would be >> willing >>>> to take a look at these rules, and also suggest improvements where >> needed. >>>> In addition, lists like [1] would also be very useful insofar they >> exist. >>>> >>>> The current version of these rules is located in a JSON file in the >> Skara >>>> repository at [2]. In order to check the validity of the rules, there is >>>> also a CLI tool that can be used to apply it to either a subset of >> files or >>>> existing commits and produce a suggestion [3] [4]. If you are >> interested in >>>> helping out with curating these rules, these are the steps to get >> started: >>>> >>>> 1. Install the Skara CLI tools: >>>> https://wiki.openjdk.java.net/display/SKARA/CLI+Tools >>>> 2. Locate a suitable clone of the jdk/jdk repository (either Mercurial >> or >>>> Git is fine) >>>> 3. Change (cd) to the root of your jdk/jdk repository >>>> 3. Run the ?debug mlrules? command on your favorite subset of files, for >>>> example like this (use the actual location of jdk.json on your system): >>>> >>>> $ git skara debug mlrules -v >> ~/git/skara/config/mailinglist/rules/jdk.json >>>> src/hotspot/share/jfr/ >>>> Reading rules file... >>>> src/hotspot/share/jfr/dcmd: [hotspot-jfr-dev] >>>> src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp: >>>> [hotspot-jfr-dev] >>>> src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.hpp: >>>> [hotspot-jfr-dev] >>>> src/hotspot/share/jfr/instrumentation/jfrJvmtiAgent.cpp: >> [hotspot-jfr-dev, >>>> serviceability-dev] >>>> ? >>>> Final list suggestion is: [hotspot-jfr-dev, serviceability-dev] >>>> >>>> The command accepts multiple folder and/or file names to make it >> possible >>>> to simulate a potential change to a given set of files: >>>> >>>> $ git skara debug mlrules -v ../skara/config/mailinglist/rules/jdk.json >>>> doc/ide.md src/hotspot/cpu/x86/x86.ad >>>> src/hotspot/os/linux/gc/z/zNUMA_linux.cpp >>>> Reading rules file... >>>> doc: [build-dev] >>>> src/hotspot/cpu: [hotspot-compiler-dev] >>>> src/hotspot/os: [hotspot-runtime-dev, hotspot-gc-dev] >>>> >>>> Combined list suggestion: [build-dev, hotspot-compiler-dev, >>>> hotspot-gc-dev, hotspot-runtime-dev] >>>> Final list suggestion is: [build-dev, hotspot-dev] >>>> >>>> If the suggestions look fine, all is well. If not, you are welcome to >>>> propose a change to the rules, preferably by editing the jdk.json file >> [6] >>>> and creating a pull request towards the Skara project as described in >> [5]. >>>> Coincidentally, this is the same way that future changes to the jdk/jdk >>>> repository will be integrated, so this exercise could also serve as a >> way >>>> of getting started with Git / Skara! >>>> >>>> Best regards, >>>> Robin >>>> >>>> [1] https://openjdk.java.net/groups/2d/2dawtfiles.html >>>> [2] >>>> >> https://git.openjdk.java.net/skara/blob/master/config/mailinglist/rules/jdk.json >>>> >>>> [3] >>>> $ git skara debug mlrules -v >> ~/git/skara/config/mailinglist/rules/jdk.json >>>> src/java.desktop/unix/native >>>> Reading rules file... >>>> src/java.desktop/unix/native/common: [2d-dev] >>>> src/java.desktop/unix/native/include: [] >>>> src/java.desktop/unix/native/libawt: [2d-dev] >>>> src/java.desktop/unix/native/libawt_headless: [awt-dev] >>>> src/java.desktop/unix/native/libawt_xawt: [awt-dev] >>>> src/java.desktop/unix/native/libfontmanager: [2d-dev] >>>> src/java.desktop/unix/native/libjawt: [awt-dev] >>>> src/java.desktop/unix/native/libsplashscreen: [awt-dev] >>>> >>>> Combined list suggestion: [2d-dev, awt-dev] >>>> Final list suggestion is: [2d-dev, awt-dev] >>>> >>>> [4] >>>> $ git skara debug mlrules -d 30 -v >>>> ~/git/skara/config/mailinglist/rules/jdk.json . >>>> ... >>>> ? [2d-dev, awt-dev, serviceability-dev] c32923e0: 8240487: Cleanup >>>> whitespace in .cc, .hh, .m, and .mm files >>>> ? [awt-dev] 7f74c7dd: 8212226: SurfaceManager throws "Invalid Image >>>> variant" for MultiResolutionImage (Windows) >>>> Suggested lists: [2d-dev, awt-dev] >>>> Rules matching unmentioned lists [2d-dev]: >>>> src/java.desktop/share/classes/sun/java2d/SunGraphics2D.java - >>>> [2d-dev: ^src/java.desktop/share/classes/sun/java2d/] >>>> ? >>>> >>>> [5] https://wiki.openjdk.java.net/display/SKARA/Skara#Skara-Workflow >>>> >>>> [6] >>>> The rules are made up of sets of regular expressions for the various >>>> mailing lists that are used for reviewing changes going into the JDK. If >>>> any rule matches, that mailing list will get a copy of the review >> request >>>> email. For directories containing files that belong to different >>>> subsystems, it?s usually a good idea to write the rules in a >> complementary >>>> fashion if possible, so that anything not explicitly mentioned gets a >>>> reasonable default. As an example, see these rules for a subset of awt >> / 2d >>>> / i18n files: >>>> >>>> ?awt-dev?: >>>> >> "src/java.desktop/share/classes/sun/awt/(?!font|sunhints|color/|font/|geom/|im/|image/|print/)? >>>> ?2d-dev?: >>>> >> "src/java.desktop/share/classes/sun/awt/(font|sunhints|color/|font/|geom/|image/|print/)" >>>> ?I18n-dev?: "src/java.desktop/share/classes/sun/awt/im/? >>>> >>>> In this example, anything not explicitly indicated as belonging to >> either >>>> 2d-dev or i18-dev will be matched by awt-dev. >>>> >>>> >> From erik.helin at oracle.com Fri Aug 28 14:20:08 2020 From: erik.helin at oracle.com (Erik Helin) Date: Fri, 28 Aug 2020 16:20:08 +0200 Subject: Request for assistance: Verify and update mailing list filter rules for jdk/jdk in preparation for Skara transition In-Reply-To: <568BB329-6F50-43B4-BE1D-3A9D7EA60F79@oracle.com> References: <568BB329-6F50-43B4-BE1D-3A9D7EA60F79@oracle.com> Message-ID: Hi all, Thanks for all the feedback, based on this discussion we have been able to make a number of improvements in this area! But to begin with, it would probably have been good to clarify the intended use of this list of rules a bit more clearly: The intent of these rules is to create a conservative ?minimal? initial set of lists that quite likely would want to be included when sending out the review request. A good example of this would be the fairly well known rule that ?all Makefile changes should be reviewed on build-dev? which is readily encoded in this format as ?build-dev?: ?make/?. However, files that are shared between several lists and where you select lists based on what actually changed should not be on here. You may for example have noticed the absence of the various ProblemList.txt files - they certainly fit that criteria. But these are the two clear opposites, there are of course many places in the jdk source tree where this is much more of a gray area. It is also quite likely that the original list that we posted here was dauntingly verbose - it was our hope that it would be reasonably straightforward for a subject matter expert to quickly delete a lot of the ?noise?. Based on the change suggestions received so far, it would appear to not have been that unreasonable: the latest version has dropped over a hundred lines while still improving accuracy by a fair bit. Ideally there should probably only be a handful of rules for any given list, which is already true for most, but the rules for lists like ?core-libs-dev? are certainly not there yet. We should also mention how the initial list was created - it was *not* crated manually by us :) Instead we parsed the RFR e-mails for thousands of commits pushed to the jdk/jdk repository. This allowed us to create a program that could see the files that were changed by a commit and the lists that that the RFR e-mail were sent to. We then manually curated the list, but realized that domain experts would make a better job of the curation (hence the "request for assitance" e-mail). We have also validated our approach by comparing the results of the rules engine for selecting mailing lists with the last 30 days of RFR e-mails for patches targeting the jdk/jdk repository. So far it seems like the rules engine perform equally or better than humans at selecting mailing lists, but it could also be that we are missing some nuances in RFR e-mails that look like they have forgotten to CC at least one mailing list. Still, if you are an experienced contributor, you may not want to have these suggestions added only to have to replace them manually with the correct lists. To help with that, we have adjusted the ?git pr create? command-line tool to display the suggestions before the PR is created, and provide the option to override them. If you create a PR from the command-line you can now use the --cc flag: $ git pr create --cc=hotspot-dev,build-dev Furthermore, the "git pr create" command will now ask the user to verify the mailing lists before creating the pull request: $ git pr create The following mailing lists will be CC:d for the "RFR" e-mail: - build-dev at openjdk.java.net - hotspot-dev at openjdk.java.net Do you want to proceed with this mailing list selection? [Y/n]: A user can opt-in to always use the inferred mailing lists by speciyfing --cc=auto. This means that it is now *opt-in* to use the mailing lists inferred from the patch when creating a PR from the command-line. When creating a PR from the GitHub web UI, it?s also possible to override these suggestions by adding a ?/cc? command at the end of the PR body. There is also a window of a few minutes to issue a command to edit the suggestions after they have been displayed, but before any email is sent to any list. The semantics of the ?/cc? command have also been changed, to ensure that it always overrides the automatic choices. We would also like to reply to a few of the additional questions raised: Q: Shouldn't this file with the rules be placed in the jdk/jdk repository? A: Yes, we think so too, but we started out by having it in the skara repository. The Skara tooling does not care where the file resides, we can easily update the tooling once/if we move the file into the jdk/jdk repository. Q: How will the file be maintained? A: We imagine that this will be a collective effort once the file has landed in the jdk/jdk repository. If a contributor makes a large change that moves a lot of files around, then it seems fitting to also consider if the rules for choosing mailing lists should perhaps be updated. Q: Why not use the CODEOWNERS file format that GitHub already supports? A: This is something we considered but rejected for several reasons. The first and primary reason is that the rule file is not meant to convey ownership, it is merely stating the mailing lists that should be notified when certain files change. Secondly we will run into problems with GitHub _also_ sending e-mails if we use the CODEOWNERS format, something we would not want. Lastly the rules file also support specifying mailing lists groups that should be coalesced into a single mailing list. Q: Doesn't other OpenJDK projects that already have transitioned have this problem? A: No, for all other OpenJDK projects there is only one "primary" mailing list. For example skara-dev for Skara, amber-dev for Amber and so on. Q: Do we have too many mailing lists? A: Perhaps, but it is not our intent to propose any changes to the number of mailing lists we have. Q: Will the rules engine will be 100% correct every time? A: No, but neither are humans when they choose mailing lists. The goal of the rules engine, as stated at the start of this e-mail, is to choose a reasonable minimal set of mailing lists that a patch should be sent to. A contributor can always override the choice via the CLI or use the `/cc` pull request command. Q: Is the automatic selection of mailing lists opt-in or opt-out? A: It is currently opt-in if you create a PR from the command-line and opt-out if you create a PR via a web browser. We believe that many experienced contributors will use the CLI tools and there have an easy way to control the selected mailing lists. In constrast many newcomers are likely to create pull requests via a web browser. As stated above, there is a "cooldown" period after a PR has been created when the PR author has time to fine-tune the selected mailing lists regardless of how the PR was created. Q: Shouldn't the information about to which mailing list to send a patch be on the wiki instead? A: We strongly prefer to have it in a format and place where the information can be processed by programs. This way we can use the information to automate and improve upon our workflows. Again, thanks everyone for the great feedback and to everyone who helped out tweaking the rules! Best regards, Erik and Robin On 8/27/20 12:34 PM, Robin Westberg wrote: > Hi all, > > As part of transitioning the jdk/jdk repository to Git with project Skara, we have created a set of rules that determine which mailing list(s) should be the default recipient of a review request, depending on which files are changed. The initial version of these rules was created by looking at historical commits and matching them with existing mailing list review threads. This has produced a reasonable basis, but it can most certainly be made better with some additional manual curating. > > Therefore, it would be very helpful if people with good knowledge of the various subsystems and source files that make up the JDK would be willing to take a look at these rules, and also suggest improvements where needed. In addition, lists like [1] would also be very useful insofar they exist. > > The current version of these rules is located in a JSON file in the Skara repository at [2]. In order to check the validity of the rules, there is also a CLI tool that can be used to apply it to either a subset of files or existing commits and produce a suggestion [3] [4]. If you are interested in helping out with curating these rules, these are the steps to get started: > > 1. Install the Skara CLI tools: https://wiki.openjdk.java.net/display/SKARA/CLI+Tools > 2. Locate a suitable clone of the jdk/jdk repository (either Mercurial or Git is fine) > 3. Change (cd) to the root of your jdk/jdk repository > 3. Run the ?debug mlrules? command on your favorite subset of files, for example like this (use the actual location of jdk.json on your system): > > $ git skara debug mlrules -v ~/git/skara/config/mailinglist/rules/jdk.json src/hotspot/share/jfr/ > Reading rules file... > src/hotspot/share/jfr/dcmd: [hotspot-jfr-dev] > src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp: [hotspot-jfr-dev] > src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.hpp: [hotspot-jfr-dev] > src/hotspot/share/jfr/instrumentation/jfrJvmtiAgent.cpp: [hotspot-jfr-dev, serviceability-dev] > ? > Final list suggestion is: [hotspot-jfr-dev, serviceability-dev] > > The command accepts multiple folder and/or file names to make it possible to simulate a potential change to a given set of files: > > $ git skara debug mlrules -v ../skara/config/mailinglist/rules/jdk.json doc/ide.md src/hotspot/cpu/x86/x86.ad src/hotspot/os/linux/gc/z/zNUMA_linux.cpp > Reading rules file... > doc: [build-dev] > src/hotspot/cpu: [hotspot-compiler-dev] > src/hotspot/os: [hotspot-runtime-dev, hotspot-gc-dev] > > Combined list suggestion: [build-dev, hotspot-compiler-dev, hotspot-gc-dev, hotspot-runtime-dev] > Final list suggestion is: [build-dev, hotspot-dev] > > If the suggestions look fine, all is well. If not, you are welcome to propose a change to the rules, preferably by editing the jdk.json file [6] and creating a pull request towards the Skara project as described in [5]. Coincidentally, this is the same way that future changes to the jdk/jdk repository will be integrated, so this exercise could also serve as a way of getting started with Git / Skara! > > Best regards, > Robin > > [1] https://openjdk.java.net/groups/2d/2dawtfiles.html > [2] https://git.openjdk.java.net/skara/blob/master/config/mailinglist/rules/jdk.json > > [3] > $ git skara debug mlrules -v ~/git/skara/config/mailinglist/rules/jdk.json src/java.desktop/unix/native > Reading rules file... > src/java.desktop/unix/native/common: [2d-dev] > src/java.desktop/unix/native/include: [] > src/java.desktop/unix/native/libawt: [2d-dev] > src/java.desktop/unix/native/libawt_headless: [awt-dev] > src/java.desktop/unix/native/libawt_xawt: [awt-dev] > src/java.desktop/unix/native/libfontmanager: [2d-dev] > src/java.desktop/unix/native/libjawt: [awt-dev] > src/java.desktop/unix/native/libsplashscreen: [awt-dev] > > Combined list suggestion: [2d-dev, awt-dev] > Final list suggestion is: [2d-dev, awt-dev] > > [4] > $ git skara debug mlrules -d 30 -v ~/git/skara/config/mailinglist/rules/jdk.json . > ... > ? [2d-dev, awt-dev, serviceability-dev] c32923e0: 8240487: Cleanup whitespace in .cc, .hh, .m, and .mm files > ? [awt-dev] 7f74c7dd: 8212226: SurfaceManager throws "Invalid Image variant" for MultiResolutionImage (Windows) > Suggested lists: [2d-dev, awt-dev] > Rules matching unmentioned lists [2d-dev]: > src/java.desktop/share/classes/sun/java2d/SunGraphics2D.java - [2d-dev: ^src/java.desktop/share/classes/sun/java2d/] > ? > > [5] https://wiki.openjdk.java.net/display/SKARA/Skara#Skara-Workflow > > [6] > The rules are made up of sets of regular expressions for the various mailing lists that are used for reviewing changes going into the JDK. If any rule matches, that mailing list will get a copy of the review request email. For directories containing files that belong to different subsystems, it?s usually a good idea to write the rules in a complementary fashion if possible, so that anything not explicitly mentioned gets a reasonable default. As an example, see these rules for a subset of awt / 2d / i18n files: > > ?awt-dev?: "src/java.desktop/share/classes/sun/awt/(?!font|sunhints|color/|font/|geom/|im/|image/|print/)? > ?2d-dev?: "src/java.desktop/share/classes/sun/awt/(font|sunhints|color/|font/|geom/|image/|print/)" > ?I18n-dev?: "src/java.desktop/share/classes/sun/awt/im/? > > In this example, anything not explicitly indicated as belonging to either 2d-dev or i18-dev will be matched by awt-dev. > From magnus.ihse.bursie at oracle.com Fri Aug 28 15:01:23 2020 From: magnus.ihse.bursie at oracle.com (Magnus Ihse Bursie) Date: Fri, 28 Aug 2020 17:01:23 +0200 Subject: Request for assistance: Verify and update mailing list filter rules for jdk/jdk in preparation for Skara transition In-Reply-To: References: <568BB329-6F50-43B4-BE1D-3A9D7EA60F79@oracle.com> Message-ID: <605e58e9-3fb5-d07d-6a1e-4817ad7d374d@oracle.com> On 2020-08-28 16:20, Erik Helin wrote: > Hi all, > > Thanks for all the feedback, based on this discussion we have been > able to make a number of improvements in this area! > > But to begin with, it would probably have been good to clarify the > intended use of this list of rules a bit more clearly: The intent of > these rules is to create a conservative ?minimal? initial set of lists > that quite likely would want to be included when sending out the > review request. A good example of this would be the fairly well known > rule that ?all Makefile changes should be reviewed on build-dev? which > is readily encoded in this format as ?build-dev?: ?make/?. However, > files that are shared between several lists and where you select lists > based on what actually changed should not be on here. You may for > example have noticed the absence of the various ProblemList.txt files > - they certainly fit that criteria. But these are the two clear > opposites, there are of course many places in the jdk source tree > where this is much more of a gray area. > > It is also quite likely that the original list that we posted here was > dauntingly verbose - it was our hope that it would be reasonably > straightforward for a subject matter expert to quickly delete a lot of > the ?noise?. Based on the change suggestions received so far, it would > appear to not have been that unreasonable: the latest version has > dropped over a hundred lines while still improving accuracy by a fair > bit. Ideally there should probably only be a handful of rules for any > given list, which is already true for most, but the rules for lists > like ?core-libs-dev? are certainly not there yet. > > We should also mention how the initial list was created - it was *not* > crated manually by us :) Instead we parsed the RFR e-mails for > thousands of commits pushed to the jdk/jdk repository. This allowed us > to create a program that could see the files that were changed by a > commit and the lists that that the RFR e-mail were sent to. We then > manually curated the list, but realized that domain experts would make > a better job of the curation (hence the "request for assitance" e-mail). > > We have also validated our approach by comparing the results of the > rules engine for selecting mailing lists with the last 30 days of RFR > e-mails for patches targeting the jdk/jdk repository. So far it seems > like the rules engine perform equally or better than humans at > selecting mailing lists, but it could also be that we are missing some > nuances in RFR e-mails that look like they have forgotten to CC at > least one mailing list. > > Still, if you are an experienced contributor, you may not want to have > these suggestions added only to have to replace them manually with the > correct lists. To help with that, we have adjusted the ?git pr create? > command-line tool to display the suggestions before the PR is created, > and provide the option to override them. If you create a PR from the > command-line you can now use the --cc flag: > > ? $ git pr create --cc=hotspot-dev,build-dev > > Furthermore, the "git pr create" command will now ask the user to > verify the mailing lists before creating the pull request: > > ? $ git pr create > ? The following mailing lists will be CC:d for the "RFR" e-mail: > ? - build-dev at openjdk.java.net > ? - hotspot-dev at openjdk.java.net > > ? Do you want to proceed with this mailing list selection? [Y/n]: > > A user can opt-in to always use the inferred mailing lists by speciyfing > --cc=auto. This means that it is now *opt-in* to use the mailing lists > inferred from the patch when creating a PR from the command-line. > > When creating a PR from the GitHub web UI, it?s also possible to > override these suggestions by adding a ?/cc? command at the end of the > PR body. There is also a window of a few minutes to issue a command to > edit the suggestions after they have been displayed, but before any > email is sent to any list. The semantics of the ?/cc? command have > also been changed, to ensure that it always overrides the automatic > choices. Erik, I think this all sounds great! While a lot of the developers know about the rules for cc:ing build-dev for making changes, not everyone does. And from time to time, even the most experienced developers forget to include build-dev. So I've been waiting for something like this for a very long time... With the latest changes you describe, I also think you have managed to strike a good balance between ease-of-use and power user control. I'm not sure the rules are really all the way yet, but I don't think they have to be perfect for this to be helpful. Let's get this thing started, and if we get suprises with omissions or too many included lists, we can adjust the rules as we go. In fact, fixing problems with the correspondence between code are and mailing lists will be sooo much easier to do if all you need to do is to edit a single text file, instead of re-educating a horde of stubborn-minded JDK developers! :-o /Magnus > > We would also like to reply to a few of the additional questions raised: > > Q: Shouldn't this file with the rules be placed in the jdk/jdk > ?? repository? > A: Yes, we think so too, but we started out by having it in the skara > ?? repository. The Skara tooling does not care where the file resides, > ?? we can easily update the tooling once/if we move the file into the > ?? jdk/jdk repository. > > Q: How will the file be maintained? > A: We imagine that this will be a collective effort once the file has > ?? landed in the jdk/jdk repository. If a contributor makes a large > ?? change that moves a lot of files around, then it seems fitting to > ?? also consider if the rules for choosing mailing lists should perhaps > ?? be updated. > > Q: Why not use the CODEOWNERS file format that GitHub already supports? > A: This is something we considered but rejected for several reasons. The > ?? first and primary reason is that the rule file is not meant to > ?? convey ownership, it is merely stating the mailing lists that should > ?? be notified when certain files change. Secondly we will run into > ?? problems with GitHub _also_ sending e-mails if we use the CODEOWNERS > ?? format, something we would not want. Lastly the rules file also > ?? support specifying mailing lists groups that should be coalesced into > ?? a single mailing list. > > Q: Doesn't other OpenJDK projects that already have transitioned have > ?? this problem? > A: No, for all other OpenJDK projects there is only one "primary" > ?? mailing list. For example skara-dev for Skara, amber-dev for Amber > ?? and so on. > > Q: Do we have too many mailing lists? > A: Perhaps, but it is not our intent to propose any changes to the > ?? number of mailing lists we have. > > Q: Will the rules engine will be 100% correct every time? > A: No, but neither are humans when they choose mailing lists. The goal > ?? of the rules engine, as stated at the start of this e-mail, is to > ?? choose a reasonable minimal set of mailing lists that a patch should > ?? be sent to. A contributor can always override the choice via the CLI > ?? or use the `/cc` pull request command. > > Q: Is the automatic selection of mailing lists opt-in or opt-out? > A: It is currently opt-in if you create a PR from the command-line and > ?? opt-out if you create a PR via a web browser. We believe that many > ?? experienced contributors will use the CLI tools and there have an > ?? easy way to control the selected mailing lists. In constrast many > ?? newcomers are likely to create pull requests via a web browser. As > ?? stated above, there is a "cooldown" period after a PR has been > ?? created when the PR author has time to fine-tune the selected mailing > ?? lists regardless of how the PR was created. > > Q: Shouldn't the information about to which mailing list to send a patch > ?? be on the wiki instead? > A: We strongly prefer to have it in a format and place where the > ?? information can be processed by programs. This way we can use the > ?? information to automate and improve upon our workflows. > > Again, thanks everyone for the great feedback and to everyone who > helped out tweaking the rules! > > Best regards, > Erik and Robin > > On 8/27/20 12:34 PM, Robin Westberg wrote: >> Hi all, >> >> As part of transitioning the jdk/jdk repository to Git with project >> Skara, we have created a set of rules that determine which mailing >> list(s) should be the default recipient of a review request, >> depending on which files are changed. The initial version of these >> rules was created by looking at historical commits and matching them >> with existing mailing list review threads. This has produced a >> reasonable basis, but it can most certainly be made better with some >> additional manual curating. >> >> Therefore, it would be very helpful if people with good knowledge of >> the various subsystems and source files that make up the JDK would be >> willing to take a look at these rules, and also suggest improvements >> where needed. In addition, lists like [1] would also be very useful >> insofar they exist. >> >> The current version of these rules is located in a JSON file in the >> Skara repository at [2]. In order to check the validity of the rules, >> there is also a CLI tool that can be used to apply it to either a >> subset of files or existing commits and produce a suggestion [3] [4]. >> If you are interested in helping out with curating these rules, these >> are the steps to get started: >> >> 1. Install the Skara CLI tools: >> https://wiki.openjdk.java.net/display/SKARA/CLI+Tools >> 2. Locate a suitable clone of the jdk/jdk repository (either >> Mercurial or Git is fine) >> 3. Change (cd) to the root of your jdk/jdk repository >> 3. Run the ?debug mlrules? command on your favorite subset of files, >> for example like this (use the actual location of jdk.json on your >> system): >> >> $ git skara debug mlrules -v >> ~/git/skara/config/mailinglist/rules/jdk.json src/hotspot/share/jfr/ >> Reading rules file... >> src/hotspot/share/jfr/dcmd: [hotspot-jfr-dev] >> src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp: >> [hotspot-jfr-dev] >> src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.hpp: >> [hotspot-jfr-dev] >> src/hotspot/share/jfr/instrumentation/jfrJvmtiAgent.cpp: >> [hotspot-jfr-dev, serviceability-dev] >> ? >> Final list suggestion is: [hotspot-jfr-dev, serviceability-dev] >> >> The command accepts multiple folder and/or file names to make it >> possible to simulate a potential change to a given set of files: >> >> $ git skara debug mlrules -v >> ../skara/config/mailinglist/rules/jdk.json doc/ide.md >> src/hotspot/cpu/x86/x86.ad src/hotspot/os/linux/gc/z/zNUMA_linux.cpp >> Reading rules file... >> doc: [build-dev] >> src/hotspot/cpu: [hotspot-compiler-dev] >> src/hotspot/os: [hotspot-runtime-dev, hotspot-gc-dev] >> >> Combined list suggestion: [build-dev, hotspot-compiler-dev, >> hotspot-gc-dev, hotspot-runtime-dev] >> Final list suggestion is: [build-dev, hotspot-dev] >> >> If the suggestions look fine, all is well. If not, you are welcome to >> propose a change to the rules, preferably by editing the jdk.json >> file [6] and creating a pull request towards the Skara project as >> described in [5]. Coincidentally, this is the same way that future >> changes to the jdk/jdk repository will be integrated, so this >> exercise could also serve as a way of getting started with Git / Skara! >> >> Best regards, >> Robin >> >> [1] https://openjdk.java.net/groups/2d/2dawtfiles.html >> [2] >> https://git.openjdk.java.net/skara/blob/master/config/mailinglist/rules/jdk.json >> >> [3] >> $ git skara debug mlrules -v >> ~/git/skara/config/mailinglist/rules/jdk.json >> src/java.desktop/unix/native >> Reading rules file... >> src/java.desktop/unix/native/common: [2d-dev] >> src/java.desktop/unix/native/include: [] >> src/java.desktop/unix/native/libawt: [2d-dev] >> src/java.desktop/unix/native/libawt_headless: [awt-dev] >> src/java.desktop/unix/native/libawt_xawt: [awt-dev] >> src/java.desktop/unix/native/libfontmanager: [2d-dev] >> src/java.desktop/unix/native/libjawt: [awt-dev] >> src/java.desktop/unix/native/libsplashscreen: [awt-dev] >> >> Combined list suggestion: [2d-dev, awt-dev] >> Final list suggestion is: [2d-dev, awt-dev] >> >> [4] >> $ git skara debug mlrules -d 30 -v >> ~/git/skara/config/mailinglist/rules/jdk.json . >> ... >> ? [2d-dev, awt-dev, serviceability-dev] c32923e0: 8240487: Cleanup >> whitespace in .cc, .hh, .m, and .mm files >> ? [awt-dev] 7f74c7dd: 8212226: SurfaceManager throws "Invalid Image >> variant" for MultiResolutionImage (Windows) >> ???? Suggested lists: [2d-dev, awt-dev] >> ???? Rules matching unmentioned lists [2d-dev]: >> src/java.desktop/share/classes/sun/java2d/SunGraphics2D.java - >> [2d-dev: ^src/java.desktop/share/classes/sun/java2d/] >> ? >> >> [5] https://wiki.openjdk.java.net/display/SKARA/Skara#Skara-Workflow >> >> [6] >> The rules are made up of sets of regular expressions for the various >> mailing lists that are used for reviewing changes going into the JDK. >> If any rule matches, that mailing list will get a copy of the review >> request email. For directories containing files that belong to >> different subsystems, it?s usually a good idea to write the rules in >> a complementary fashion if possible, so that anything not explicitly >> mentioned gets a reasonable default. As an example, see these rules >> for a subset of awt / 2d / i18n files: >> >> ?awt-dev?: >> "src/java.desktop/share/classes/sun/awt/(?!font|sunhints|color/|font/|geom/|im/|image/|print/)? >> ?2d-dev?: >> "src/java.desktop/share/classes/sun/awt/(font|sunhints|color/|font/|geom/|image/|print/)" >> ?I18n-dev?: "src/java.desktop/share/classes/sun/awt/im/? >> >> In this example, anything not explicitly indicated as belonging to >> either 2d-dev or i18-dev will be matched by awt-dev. >> From joe.darcy at oracle.com Sat Aug 29 00:07:27 2020 From: joe.darcy at oracle.com (Joe Darcy) Date: Fri, 28 Aug 2020 17:07:27 -0700 Subject: Request for assistance: Verify and update mailing list filter rules for jdk/jdk in preparation for Skara transition In-Reply-To: References: <568BB329-6F50-43B4-BE1D-3A9D7EA60F79@oracle.com> Message-ID: Hello, A few general comments on this effort. There are both type I and type II errors today in terms of RFR mails -- extraneous/off-topic mailing lists being included and mailing lists that should be added being left off. Both kinds of errors occur today, fetch-a-different-OpenJDK-mail-alias threads and omitting build-dev for make changes being common examples, and no doubt both kinds of errors will occur in the future, hopefully with reduced frequency. The mapping of ??? files modified -> set of appropriate mailing lists should be regular enough to (mostly) capture with automation, letting developers adjust accordingly when the defaults are not ideal. I think that information is much better kept in some repo than in a wiki, to better support tooling. The mapping is not carved in stone and should expect to be tuned as we start using it in earnest. Cheers, -Joe On 8/28/2020 7:20 AM, Erik Helin wrote: > Hi all, > > Thanks for all the feedback, based on this discussion we have been > able to make a number of improvements in this area! > > But to begin with, it would probably have been good to clarify the > intended use of this list of rules a bit more clearly: The intent of > these rules is to create a conservative ?minimal? initial set of lists > that quite likely would want to be included when sending out the > review request. A good example of this would be the fairly well known > rule that ?all Makefile changes should be reviewed on build-dev? which > is readily encoded in this format as ?build-dev?: ?make/?. However, > files that are shared between several lists and where you select lists > based on what actually changed should not be on here. You may for > example have noticed the absence of the various ProblemList.txt files > - they certainly fit that criteria. But these are the two clear > opposites, there are of course many places in the jdk source tree > where this is much more of a gray area. > > It is also quite likely that the original list that we posted here was > dauntingly verbose - it was our hope that it would be reasonably > straightforward for a subject matter expert to quickly delete a lot of > the ?noise?. Based on the change suggestions received so far, it would > appear to not have been that unreasonable: the latest version has > dropped over a hundred lines while still improving accuracy by a fair > bit. Ideally there should probably only be a handful of rules for any > given list, which is already true for most, but the rules for lists > like ?core-libs-dev? are certainly not there yet. > > We should also mention how the initial list was created - it was *not* > crated manually by us :) Instead we parsed the RFR e-mails for > thousands of commits pushed to the jdk/jdk repository. This allowed us > to create a program that could see the files that were changed by a > commit and the lists that that the RFR e-mail were sent to. We then > manually curated the list, but realized that domain experts would make > a better job of the curation (hence the "request for assitance" e-mail). > > We have also validated our approach by comparing the results of the > rules engine for selecting mailing lists with the last 30 days of RFR > e-mails for patches targeting the jdk/jdk repository. So far it seems > like the rules engine perform equally or better than humans at > selecting mailing lists, but it could also be that we are missing some > nuances in RFR e-mails that look like they have forgotten to CC at > least one mailing list. > > Still, if you are an experienced contributor, you may not want to have > these suggestions added only to have to replace them manually with the > correct lists. To help with that, we have adjusted the ?git pr create? > command-line tool to display the suggestions before the PR is created, > and provide the option to override them. If you create a PR from the > command-line you can now use the --cc flag: > > ? $ git pr create --cc=hotspot-dev,build-dev > > Furthermore, the "git pr create" command will now ask the user to > verify the mailing lists before creating the pull request: > > ? $ git pr create > ? The following mailing lists will be CC:d for the "RFR" e-mail: > ? - build-dev at openjdk.java.net > ? - hotspot-dev at openjdk.java.net > > ? Do you want to proceed with this mailing list selection? [Y/n]: > > A user can opt-in to always use the inferred mailing lists by speciyfing > --cc=auto. This means that it is now *opt-in* to use the mailing lists > inferred from the patch when creating a PR from the command-line. > > When creating a PR from the GitHub web UI, it?s also possible to > override these suggestions by adding a ?/cc? command at the end of the > PR body. There is also a window of a few minutes to issue a command to > edit the suggestions after they have been displayed, but before any > email is sent to any list. The semantics of the ?/cc? command have > also been changed, to ensure that it always overrides the automatic > choices. > > We would also like to reply to a few of the additional questions raised: > > Q: Shouldn't this file with the rules be placed in the jdk/jdk > ?? repository? > A: Yes, we think so too, but we started out by having it in the skara > ?? repository. The Skara tooling does not care where the file resides, > ?? we can easily update the tooling once/if we move the file into the > ?? jdk/jdk repository. > > Q: How will the file be maintained? > A: We imagine that this will be a collective effort once the file has > ?? landed in the jdk/jdk repository. If a contributor makes a large > ?? change that moves a lot of files around, then it seems fitting to > ?? also consider if the rules for choosing mailing lists should perhaps > ?? be updated. > > Q: Why not use the CODEOWNERS file format that GitHub already supports? > A: This is something we considered but rejected for several reasons. The > ?? first and primary reason is that the rule file is not meant to > ?? convey ownership, it is merely stating the mailing lists that should > ?? be notified when certain files change. Secondly we will run into > ?? problems with GitHub _also_ sending e-mails if we use the CODEOWNERS > ?? format, something we would not want. Lastly the rules file also > ?? support specifying mailing lists groups that should be coalesced into > ?? a single mailing list. > > Q: Doesn't other OpenJDK projects that already have transitioned have > ?? this problem? > A: No, for all other OpenJDK projects there is only one "primary" > ?? mailing list. For example skara-dev for Skara, amber-dev for Amber > ?? and so on. > > Q: Do we have too many mailing lists? > A: Perhaps, but it is not our intent to propose any changes to the > ?? number of mailing lists we have. > > Q: Will the rules engine will be 100% correct every time? > A: No, but neither are humans when they choose mailing lists. The goal > ?? of the rules engine, as stated at the start of this e-mail, is to > ?? choose a reasonable minimal set of mailing lists that a patch should > ?? be sent to. A contributor can always override the choice via the CLI > ?? or use the `/cc` pull request command. > > Q: Is the automatic selection of mailing lists opt-in or opt-out? > A: It is currently opt-in if you create a PR from the command-line and > ?? opt-out if you create a PR via a web browser. We believe that many > ?? experienced contributors will use the CLI tools and there have an > ?? easy way to control the selected mailing lists. In constrast many > ?? newcomers are likely to create pull requests via a web browser. As > ?? stated above, there is a "cooldown" period after a PR has been > ?? created when the PR author has time to fine-tune the selected mailing > ?? lists regardless of how the PR was created. > > Q: Shouldn't the information about to which mailing list to send a patch > ?? be on the wiki instead? > A: We strongly prefer to have it in a format and place where the > ?? information can be processed by programs. This way we can use the > ?? information to automate and improve upon our workflows. > > Again, thanks everyone for the great feedback and to everyone who > helped out tweaking the rules! > > Best regards, > Erik and Robin > > From erik.helin at oracle.com Sat Aug 29 10:54:16 2020 From: erik.helin at oracle.com (Erik Helin) Date: Sat, 29 Aug 2020 12:54:16 +0200 Subject: jdk/jdk repository transitions to Git, GitHub and Skara: September 5 In-Reply-To: References: <4a562cb1-0de0-b2b0-9155-f821c0533291@oracle.com> <175b5b8d-a52e-bd2c-8277-306643689c0d@oracle.com> Message-ID: On 8/27/20 5:43 PM, Thomas St?fe wrote: > My current work involves working in a named branch at jdk/sandbox, > roughly following this flow: > - committing my changes locally, rather fine grained into my own branch > - from time to time pushing up to the central hg sandbox repo > - from time to time pulling in new changes and merging from the default > branch > - from time to time creating diffs for reviews > > I am currently trying to figure out how this approach will change with > git and github. I know there are subtle differences in the branching > concept between hg and git. I found > https://medium.com/@tmvvr/git-for-longtime-mercurial-users-c41f37352fca, > which is a good explanation, if somewhat short. Also good and short is > https://github.com/sympy/sympy/wiki/Git-hg-rosetta-stone. However, many > things are still vague and I guess this will only clear up once I switch. You are going to want to use a personal fork [0] instead of using the sandbox when working with Git, GitHub and Skara. A personal fork allows to keep essentially the same workflows as above, but also grants you the ability to create pull requests [1]. As noted on the Skara wiki, we highly recommend that you read chapters 1 - 3 of the excellent Pro Git book [2]. > - You write committers have write access to jdk/sandbox, so I can > continue to push my changes in my branch up into the central repository, > yes? Will the default branch be protected against accidental pushes, > like I believe we did for the hg sandbox? Yes, this will stay the same. However, as stated above, you are much more likely to use your personal fork instead of the sandbox. The sandbox can still be beneficial to use for e.g. ad-hoc collaboration. > - In mercurial I can filter for changes local?to my branch via -b (hg > log -b ). Is this possible in git too, since there, a > branch AFAIU is only a pointer to a single commit? Yes :) With git it is `git log master..`. Again, we strongly recommend reading through chapter 1 -3 of the Pro Git book [2]. > I am sure more questions will come once the switch is reality... You are more than welcome to ask questions. Me and Robin will also hang out in #openjdk on irc.oftc.net on Sep 7 for a bit quicker turn-around time on questions and answers :) There is also an extensive FAQ available on the Skara wiki [3]. Thanks, Erik [0]: https://wiki.openjdk.java.net/display/skara#Skara-Personalforks [1]: https://wiki.openjdk.java.net/display/skara#Skara-Pullrequests [2]: https://git-scm.com/book/en/v2 [3]: https://wiki.openjdk.java.net/display/SKARA/FAQ > Thanks a lot! > > Cheers, Thomas > > > Thanks, > Erik > > [0]: https://hg.openjdk.java.net/jdk/sandbox > [1]: https://hg.openjdk.java.net/jdk/jdk > [2]: https://openjdk.java.net/census#jdk > [3]: https://git.openjdk.java.net/jdk > [4]: https://git.openjdk.java.net/jdk-sandbox > [5]: https://wiki.openjdk.java.net/display/skara#Skara-Workflow > > > Thanks, Thomas > > > > > > On Wed, Aug 12, 2020 at 8:57 AM Erik Helin > > >> wrote: > > > >? ? ?Hi all, > > > >? ? ?We are now getting closer to the jdk/jdk repository [0] > >? ? ?transitioning to > >? ? ?Git, GitHub and Skara. JEP 357 [0] and JEP 369 [1] were > targeted to JDK > >? ? ?16 at the end of May 2020 [2]. It was then also communicated > that the > >? ? ?jdk/jdk repository would transition "early September 2020" [3]. > > > >? ? ?The exact target date for the transition of the jdk/jdk > repository is > >? ? ?now set to Saturday September 5, 2020. We aim to complete the > >? ? ?transition > >? ? ?during the weekend of September 5 - 6, 2020. Starting from > September 4 > >? ? ?the Mercurial repository for jdk/jdk [0] will become > read-only and the > >? ? ?Git repository for jdk/jdk [5] will become read-write on Monday > >? ? ?September 7. > > > >? ? ?If you are an OpenJDK Author, Committer or Reviewer, then > please make > >? ? ?sure you that you are ready for the transition by following the > >? ? ?"Getting > >? ? ?Started" guide on the Skara wiki [7]. In particular, make > sure that you > >? ? ?associate your GitHub username and OpenJDK username, see the > "Getting > >? ? ?Started" guide for details. Feel free to try out the new > tools and make > >? ? ?sure that everything works in the OpenJDK playground > repository [8]. > > > >? ? ?For those of you doing backports to jdk-updates repositories > there is a > >? ? ?Skara CLI tool, git hg-export, that will export commits from > an OpenJDK > >? ? ?Git repository in a format expected by hg and the OpenJDK > Mercurial > >? ? ?repositories [9]. A "clean" backport of a Git commit looks > like the > >? ? ?following: > > > >? ? ?$ git clone https://git.openjdk.java.net/jdk > >? ? ?$ git -C jdk hg-export | hg -R /path/to/hg/repo import > > > >? ? ?As part of transitioning the jdk/jdk repository we will also > transition > >? ? ?the jdk/client repository [6]. There is work ongoing that > might result > >? ? ?in jdk/client being archived instead of transitioned, but > that work is > >? ? ?not guaranteed to be done by September 5. We will send out > more details > >? ? ?on this as we get closer. > > > >? ? ?The jdk/submit [10] repository will not be transitioned, the > equivalent > >? ? ?functionality is provided by the /test pull request command [11]. > > > >? ? ?There are continuously updated read-only mirrors of the > jdk/jdk [5], > >? ? ?jdk/client [12] and jdk/sandbox [13] repositories available > if you want > >? ? ?to create personal forks ahead of the transition. Note that the > >? ? ?jdk/jdk15 [14] repository will stay on Mercurial as well as the > >? ? ?jdk-updates/jdk15u [15] repository (at least for the time being). > > > >? ? ?If you have any questions just send an email to > > skara-dev at openjdk.java.net > >! > > > >? ? ?Thanks, > >? ? ?Erik and Robin > > > >? ? ?[0]: https://hg.openjdk.java.net/jdk/jdk > >? ? ?[1]: https://openjdk.java.net/jeps/357 > >? ? ?[2]: https://openjdk.java.net/jeps/369 > >? ? ?[3]: > > https://mail.openjdk.java.net/pipermail/jdk-dev/2020-May/004335.html > >? ? ?[4]: > > https://mail.openjdk.java.net/pipermail/jdk-dev/2020-May/004322.html > >? ? ?[5]: https://github.com/openjdk/jdk > >? ? ?[6]: https://hg.openjdk.java.net/jdk/client > >? ? ?[7]: > > > https://wiki.openjdk.java.net/display/SKARA/Skara#Skara-GettingStarted > >? ? ?[8]: https://github.com/openjdk/playground > >? ? ?[9]: https://wiki.openjdk.java.net/display/SKARA/git-hg-export > >? ? ?[10]: https://hg.openjdk.java.net/jdk/submit > >? ? ?[11]: > > > https://wiki.openjdk.java.net/display/SKARA/Pull+Request+Commands#PullRequestCommands-/test > >? ? ?[12]: https://github.com/jdk/client > >? ? ?[13]: https://github.com/jdk/jdk-sandbox > >? ? ?[14]: https://hg.openjdk.java.net/jdk/jdk15 > >? ? ?[15]: https://hg.openjdk.java.net/jdk-updates/jdk15u > > > From erik.helin at oracle.com Sat Aug 29 13:43:33 2020 From: erik.helin at oracle.com (Erik Helin) Date: Sat, 29 Aug 2020 15:43:33 +0200 Subject: jdk/jdk repository transitions to Git, GitHub and Skara: September 5 In-Reply-To: <4a562cb1-0de0-b2b0-9155-f821c0533291@oracle.com> References: <4a562cb1-0de0-b2b0-9155-f821c0533291@oracle.com> Message-ID: Hi all, a reminder that we are now one week away from the jdk/jdk repository [0] transition to Git, GitHub and Skara on September 5. As Phil communicated on the client lists [1] the plan is still to retire the jdk/client repository [2] (please see Phil's e-mail for further details). This means that on September 4 the following Mercurial repositories will become read-only: - jdk/jdk [0] - jdk/sandbox [3] - jdk/submit [4] During the weekend of September 5 - 6 the following Git repositories will become read-write: - jdk [5] - jdk-sandbox [6] As previously communicated, the functionality of the jdk/submit repository [4] has been replaced with the /test pull request command [7]. We have also gotten a few questions in response to the previous e-mail that we would like to summarize here: Q: Will the content or the commit hashes of the Git jdk repository [5] change during the transition? A: No, the content and commit hashes of the Git jdk repository are stable. The "only" thing that will happen during the transition is that you will be able to create pull requests towards the Git jdk repository. Q: Can I go ahead and create my personal fork of the jdk repository now? A: Yes, absolutely! This is a good idea to do prior to Sep 5-6 to make sure that you can create pull requests once the Git jdk repository is ready. Q: What happens to patches that are under review at the time of transition? A: If you have a patch that is under review on Friday Sep 4 then you are going to have to create a pull request for that patch, even though it is already under review. "RFR" e-mail threads will *not* be automatically converted into pull requests. Q: Will I be able to push directly to the Git jdk repository? A: No, contributions will be done using pull requests. See the "Workflow" [9] section on the Skara wiki for more details. Q: I'm new to Git and GitHub, do you recommend any resources to get up to speed? A: Yes! Please see the Skara wiki's "Getting Started" guide [8] that also has pointers to additional resources for learning more about Git, GitHub and Skara. Q: How do I become a member of the OpenJDK group on GitHub? A: Once you have associated your OpenJDK username and your GitHub username [10] you will get an invite via e-mail to join the OpenJDK group on GitHub [11]. Q: What if I need some help with getting started on Monday Sep 7? A: Me and Robin will hang out on IRC in #openjdk on irc.oftc.net. As always, if you have any questions, feel free to send an e-mail to skara-dev at openjdk.java.net. Thanks, Erik and Robin [0]: https://hg.openjdk.java.net/jdk/jdk [1]: https://mail.openjdk.java.net/pipermail/2d-dev/2020-August/011004.html [2]: https://hg.openjdk.java.net/jdk/client [3]: https://hg.openjdk.java.net/jdk/sandbox [4]: https://hg.openjdk.java.net/jdk/submit [5]: https://git.openjdk.java.net/jdk [6]: https://git.openjdk.java.net/jdk-sandbox [7]: https://wiki.openjdk.java.net/display/SKARA/Pull+Request+Commands#PullRequestCommands-/test [8]: https://wiki.openjdk.java.net/display/SKARA/#Skara-GettingStarted [9]: https://wiki.openjdk.java.net/display/SKARA/#Skara-Workflow [10]: https://wiki.openjdk.java.net/display/SKARA/#Skara-AssociatingyourGitHubaccountandyourOpenJDKusername [11]: https://github.com/orgs/openjdk/people On 8/12/20 8:54 AM, Erik Helin wrote: > Hi all, > > We are now getting closer to the jdk/jdk repository [0] transitioning to > Git, GitHub and Skara. JEP 357 [0] and JEP 369 [1] were targeted to JDK > 16 at the end of May 2020 [2]. It was then also communicated that the > jdk/jdk repository would transition "early September 2020" [3]. > > The exact target date for the transition of the jdk/jdk repository is > now set to Saturday September 5, 2020. We aim to complete the transition > during the weekend of September 5 - 6, 2020. Starting from September 4 > the Mercurial repository for jdk/jdk [0] will become read-only and the > Git repository for jdk/jdk [5] will become read-write on Monday > September 7. > > If you are an OpenJDK Author, Committer or Reviewer, then please make > sure you that you are ready for the transition by following the "Getting > Started" guide on the Skara wiki [7]. In particular, make sure that you > associate your GitHub username and OpenJDK username, see the "Getting > Started" guide for details. Feel free to try out the new tools and make > sure that everything works in the OpenJDK playground repository [8]. > > For those of you doing backports to jdk-updates repositories there is a > Skara CLI tool, git hg-export, that will export commits from an OpenJDK > Git repository in a format expected by hg and the OpenJDK Mercurial > repositories [9]. A "clean" backport of a Git commit looks like the > following: > > $ git clone https://git.openjdk.java.net/jdk > $ git -C jdk hg-export | hg -R /path/to/hg/repo import > > As part of transitioning the jdk/jdk repository we will also transition > the jdk/client repository [6]. There is work ongoing that might result > in jdk/client being archived instead of transitioned, but that work is > not guaranteed to be done by September 5. We will send out more details > on this as we get closer. > > The jdk/submit [10] repository will not be transitioned, the equivalent > functionality is provided by the /test pull request command [11]. > > There are continuously updated read-only mirrors of the jdk/jdk [5], > jdk/client [12] and jdk/sandbox [13] repositories available if you want > to create personal forks ahead of the transition. Note that the > jdk/jdk15 [14] repository will stay on Mercurial as well as the > jdk-updates/jdk15u [15] repository (at least for the time being). > > If you have any questions just send an email to skara-dev at openjdk.java.net! > > Thanks, > Erik and Robin > > [0]: https://hg.openjdk.java.net/jdk/jdk > [1]: https://openjdk.java.net/jeps/357 > [2]: https://openjdk.java.net/jeps/369 > [3]: https://mail.openjdk.java.net/pipermail/jdk-dev/2020-May/004335.html > [4]: https://mail.openjdk.java.net/pipermail/jdk-dev/2020-May/004322.html > [5]: https://github.com/openjdk/jdk > [6]: https://hg.openjdk.java.net/jdk/client > [7]: https://wiki.openjdk.java.net/display/SKARA/Skara#Skara-GettingStarted > [8]: https://github.com/openjdk/playground > [9]: https://wiki.openjdk.java.net/display/SKARA/git-hg-export > [10]: https://hg.openjdk.java.net/jdk/submit > [11]: > https://wiki.openjdk.java.net/display/SKARA/Pull+Request+Commands#PullRequestCommands-/test > > [12]: https://github.com/jdk/client > [13]: https://github.com/jdk/jdk-sandbox > [14]: https://hg.openjdk.java.net/jdk/jdk15 > [15]: https://hg.openjdk.java.net/jdk-updates/jdk15u From philip.race at oracle.com Sat Aug 29 16:34:49 2020 From: philip.race at oracle.com (Philip Race) Date: Sat, 29 Aug 2020 09:34:49 -0700 Subject: Request for assistance: Verify and update mailing list filter rules for jdk/jdk in preparation for Skara transition In-Reply-To: <56e127e9-3802-a8d5-9a79-042166f02409@oracle.com> References: <568BB329-6F50-43B4-BE1D-3A9D7EA60F79@oracle.com> <35347485-216D-42BC-A05A-8D974E3FA581@oracle.com> <56e127e9-3802-a8d5-9a79-042166f02409@oracle.com> Message-ID: <5F4A83A9.1000207@oracle.com> I have some questions which at least tangentially relate to the list mappings which raise what to me are tricky problems but maybe they've already been thought through and solved. First, what is the minimum number of reviewers required a fix for the JDK project ? Second, how can we have that by default adjusted depending on mailing list, with the ability to either raise or lower that number according to the judgement of the fixer. In the client area 2 reviewers is the big rule, only one has to be a Capital R reviewer, but for trivial and urgent fixes we allow just one reviewer. Third, if a fix is cross-posted to (say) build-dev and 2d-dev, how do you ensure it gets both a build reviewer and a 2D reviewer's approval before pushing ? That is after all the point of the cross-posting. -phil. On 8/27/20, 10:37 AM, Joe Darcy wrote: > Hello, > > The mapping of > changed-file-to-OpenJDK-mailing-list(s)-to-review-the-file can be > non-obvious, both to new contributors and to experienced contributors > working in an unfamiliar area. If an automated mapping gets this 95+% > correct, with the ability for manual tweaking, that strikes me as an > overall improvement over the current situation. > > The current mapping has various entries that should be changed, but > that is why it is being sent out for review before the Skara > transition :-) > > As a general comment, I would expect both the mapping and other > aspects of the Skara tooling to get updated in response to feedback > after jdk/jdk moves over. > > -Joe > > On 8/27/2020 9:53 AM, Igor Ignatyev wrote: >> Hi Robin, >> >> although I really like the idea of having mapping b/w files and >> groups/components/subcomponents, I agree w/ David that in its >> *current* form it's unworkable. having the mapping in Skara repo is >> impractical, as it introduces additional overhead for maintenance, >> not to speak of possible desynchronization. Thus I suggest moving the >> mapping to jdk/jdk repo and updating Skara tooling accordingly. >> >> I also have a question regarding the format, why did you decide to >> invent your own format instead of using CODEOWNER-like format which >> fits the needs rather nicely and is used for similar purposes by >> github and gitlab? >> >> Thanks, >> -- Igor >> >>> On Aug 27, 2020, at 6:26 AM, David Holmes >>> wrote: >>> >>> In all seriousness I just don't think this is a reasonable or >>> necessary thing to do. When you create a PR you should specify the >>> mailing lists to be used, as you do today with a RFR. Trying to >>> maintain a file by file mapping is just a huge initial setup cost >>> and a maintenance nightmare. It is not necessary to try and automate >>> this IMO. >>> >>> I wish this intent had been flagged/discussed some time ago. :( >>> >>> David >>> ----- >>> >>> On 27/08/2020 8:34 pm, Robin Westberg wrote: >>>> Hi all, >>>> As part of transitioning the jdk/jdk repository to Git with project >>>> Skara, we have created a set of rules that determine which mailing >>>> list(s) should be the default recipient of a review request, >>>> depending on which files are changed. The initial version of these >>>> rules was created by looking at historical commits and matching >>>> them with existing mailing list review threads. This has produced a >>>> reasonable basis, but it can most certainly be made better with >>>> some additional manual curating. >>>> Therefore, it would be very helpful if people with good knowledge >>>> of the various subsystems and source files that make up the JDK >>>> would be willing to take a look at these rules, and also suggest >>>> improvements where needed. In addition, lists like [1] would also >>>> be very useful insofar they exist. >>>> The current version of these rules is located in a JSON file in the >>>> Skara repository at [2]. In order to check the validity of the >>>> rules, there is also a CLI tool that can be used to apply it to >>>> either a subset of files or existing commits and produce a >>>> suggestion [3] [4]. If you are interested in helping out with >>>> curating these rules, these are the steps to get started: >>>> 1. Install the Skara CLI tools: >>>> https://wiki.openjdk.java.net/display/SKARA/CLI+Tools >>>> 2. Locate a suitable clone of the jdk/jdk repository (either >>>> Mercurial or Git is fine) >>>> 3. Change (cd) to the root of your jdk/jdk repository >>>> 3. Run the ?debug mlrules? command on your favorite subset of >>>> files, for example like this (use the actual location of jdk.json >>>> on your system): >>>> $ git skara debug mlrules -v >>>> ~/git/skara/config/mailinglist/rules/jdk.json src/hotspot/share/jfr/ >>>> Reading rules file... >>>> src/hotspot/share/jfr/dcmd: [hotspot-jfr-dev] >>>> src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp: >>>> [hotspot-jfr-dev] >>>> src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.hpp: >>>> [hotspot-jfr-dev] >>>> src/hotspot/share/jfr/instrumentation/jfrJvmtiAgent.cpp: >>>> [hotspot-jfr-dev, serviceability-dev] >>>> ? >>>> Final list suggestion is: [hotspot-jfr-dev, serviceability-dev] >>>> The command accepts multiple folder and/or file names to make it >>>> possible to simulate a potential change to a given set of files: >>>> $ git skara debug mlrules -v >>>> ../skara/config/mailinglist/rules/jdk.json doc/ide.md >>>> src/hotspot/cpu/x86/x86.ad src/hotspot/os/linux/gc/z/zNUMA_linux.cpp >>>> Reading rules file... >>>> doc: [build-dev] >>>> src/hotspot/cpu: [hotspot-compiler-dev] >>>> src/hotspot/os: [hotspot-runtime-dev, hotspot-gc-dev] >>>> Combined list suggestion: [build-dev, hotspot-compiler-dev, >>>> hotspot-gc-dev, hotspot-runtime-dev] >>>> Final list suggestion is: [build-dev, hotspot-dev] >>>> If the suggestions look fine, all is well. If not, you are welcome >>>> to propose a change to the rules, preferably by editing the >>>> jdk.json file [6] and creating a pull request towards the Skara >>>> project as described in [5]. Coincidentally, this is the same way >>>> that future changes to the jdk/jdk repository will be integrated, >>>> so this exercise could also serve as a way of getting started with >>>> Git / Skara! >>>> Best regards, >>>> Robin >>>> [1] https://openjdk.java.net/groups/2d/2dawtfiles.html >>>> [2] >>>> https://git.openjdk.java.net/skara/blob/master/config/mailinglist/rules/jdk.json >>>> [3] >>>> $ git skara debug mlrules -v >>>> ~/git/skara/config/mailinglist/rules/jdk.json >>>> src/java.desktop/unix/native >>>> Reading rules file... >>>> src/java.desktop/unix/native/common: [2d-dev] >>>> src/java.desktop/unix/native/include: [] >>>> src/java.desktop/unix/native/libawt: [2d-dev] >>>> src/java.desktop/unix/native/libawt_headless: [awt-dev] >>>> src/java.desktop/unix/native/libawt_xawt: [awt-dev] >>>> src/java.desktop/unix/native/libfontmanager: [2d-dev] >>>> src/java.desktop/unix/native/libjawt: [awt-dev] >>>> src/java.desktop/unix/native/libsplashscreen: [awt-dev] >>>> Combined list suggestion: [2d-dev, awt-dev] >>>> Final list suggestion is: [2d-dev, awt-dev] >>>> [4] >>>> $ git skara debug mlrules -d 30 -v >>>> ~/git/skara/config/mailinglist/rules/jdk.json . >>>> ... >>>> ? [2d-dev, awt-dev, serviceability-dev] c32923e0: 8240487: Cleanup >>>> whitespace in .cc, .hh, .m, and .mm files >>>> ? [awt-dev] 7f74c7dd: 8212226: SurfaceManager throws "Invalid Image >>>> variant" for MultiResolutionImage (Windows) >>>> Suggested lists: [2d-dev, awt-dev] >>>> Rules matching unmentioned lists [2d-dev]: >>>> src/java.desktop/share/classes/sun/java2d/SunGraphics2D.java >>>> - [2d-dev: ^src/java.desktop/share/classes/sun/java2d/] >>>> ? >>>> [5] https://wiki.openjdk.java.net/display/SKARA/Skara#Skara-Workflow >>>> [6] >>>> The rules are made up of sets of regular expressions for the >>>> various mailing lists that are used for reviewing changes going >>>> into the JDK. If any rule matches, that mailing list will get a >>>> copy of the review request email. For directories containing files >>>> that belong to different subsystems, it?s usually a good idea to >>>> write the rules in a complementary fashion if possible, so that >>>> anything not explicitly mentioned gets a reasonable default. As an >>>> example, see these rules for a subset of awt / 2d / i18n files: >>>> ?awt-dev?: >>>> "src/java.desktop/share/classes/sun/awt/(?!font|sunhints|color/|font/|geom/|im/|image/|print/)? >>>> ?2d-dev?: >>>> "src/java.desktop/share/classes/sun/awt/(font|sunhints|color/|font/|geom/|image/|print/)" >>>> ?I18n-dev?: "src/java.desktop/share/classes/sun/awt/im/? >>>> In this example, anything not explicitly indicated as belonging to >>>> either 2d-dev or i18-dev will be matched by awt-dev. From david.holmes at oracle.com Mon Aug 31 05:17:45 2020 From: david.holmes at oracle.com (David Holmes) Date: Mon, 31 Aug 2020 15:17:45 +1000 Subject: Request for assistance: Verify and update mailing list filter rules for jdk/jdk in preparation for Skara transition In-Reply-To: References: <568BB329-6F50-43B4-BE1D-3A9D7EA60F79@oracle.com> Message-ID: <917bba1c-1e22-0944-11fe-27529e9e06e1@oracle.com> Hi Erik, This updated process seems far better to me - thanks. David On 29/08/2020 12:20 am, Erik Helin wrote: > Hi all, > > Thanks for all the feedback, based on this discussion we have been able > to make a number of improvements in this area! > > But to begin with, it would probably have been good to clarify the > intended use of this list of rules a bit more clearly: The intent of > these rules is to create a conservative ?minimal? initial set of lists > that quite likely would want to be included when sending out the review > request. A good example of this would be the fairly well known rule that > ?all Makefile changes should be reviewed on build-dev? which is readily > encoded in this format as ?build-dev?: ?make/?. However, files that are > shared between several lists and where you select lists based on what > actually changed should not be on here. You may for example have noticed > the absence of the various ProblemList.txt files - they certainly fit > that criteria. But these are the two clear opposites, there are of > course many places in the jdk source tree where this is much more of a > gray area. > > It is also quite likely that the original list that we posted here was > dauntingly verbose - it was our hope that it would be reasonably > straightforward for a subject matter expert to quickly delete a lot of > the ?noise?. Based on the change suggestions received so far, it would > appear to not have been that unreasonable: the latest version has > dropped over a hundred lines while still improving accuracy by a fair > bit. Ideally there should probably only be a handful of rules for any > given list, which is already true for most, but the rules for lists like > ?core-libs-dev? are certainly not there yet. > > We should also mention how the initial list was created - it was *not* > crated manually by us :) Instead we parsed the RFR e-mails for thousands > of commits pushed to the jdk/jdk repository. This allowed us to create a > program that could see the files that were changed by a commit and the > lists that that the RFR e-mail were sent to. We then manually curated > the list, but realized that domain experts would make a better job of > the curation (hence the "request for assitance" e-mail). > > We have also validated our approach by comparing the results of the > rules engine for selecting mailing lists with the last 30 days of RFR > e-mails for patches targeting the jdk/jdk repository. So far it seems > like the rules engine perform equally or better than humans at selecting > mailing lists, but it could also be that we are missing some nuances in > RFR e-mails that look like they have forgotten to CC at least one > mailing list. > > Still, if you are an experienced contributor, you may not want to have > these suggestions added only to have to replace them manually with the > correct lists. To help with that, we have adjusted the ?git pr create? > command-line tool to display the suggestions before the PR is created, > and provide the option to override them. If you create a PR from the > command-line you can now use the --cc flag: > > ? $ git pr create --cc=hotspot-dev,build-dev > > Furthermore, the "git pr create" command will now ask the user to verify > the mailing lists before creating the pull request: > > ? $ git pr create > ? The following mailing lists will be CC:d for the "RFR" e-mail: > ? - build-dev at openjdk.java.net > ? - hotspot-dev at openjdk.java.net > > ? Do you want to proceed with this mailing list selection? [Y/n]: > > A user can opt-in to always use the inferred mailing lists by speciyfing > --cc=auto. This means that it is now *opt-in* to use the mailing lists > inferred from the patch when creating a PR from the command-line. > > When creating a PR from the GitHub web UI, it?s also possible to > override these suggestions by adding a ?/cc? command at the end of the > PR body. There is also a window of a few minutes to issue a command to > edit the suggestions after they have been displayed, but before any > email is sent to any list. The semantics of the ?/cc? command have also > been changed, to ensure that it always overrides the automatic choices. > > We would also like to reply to a few of the additional questions raised: > > Q: Shouldn't this file with the rules be placed in the jdk/jdk > ?? repository? > A: Yes, we think so too, but we started out by having it in the skara > ?? repository. The Skara tooling does not care where the file resides, > ?? we can easily update the tooling once/if we move the file into the > ?? jdk/jdk repository. > > Q: How will the file be maintained? > A: We imagine that this will be a collective effort once the file has > ?? landed in the jdk/jdk repository. If a contributor makes a large > ?? change that moves a lot of files around, then it seems fitting to > ?? also consider if the rules for choosing mailing lists should perhaps > ?? be updated. > > Q: Why not use the CODEOWNERS file format that GitHub already supports? > A: This is something we considered but rejected for several reasons. The > ?? first and primary reason is that the rule file is not meant to > ?? convey ownership, it is merely stating the mailing lists that should > ?? be notified when certain files change. Secondly we will run into > ?? problems with GitHub _also_ sending e-mails if we use the CODEOWNERS > ?? format, something we would not want. Lastly the rules file also > ?? support specifying mailing lists groups that should be coalesced into > ?? a single mailing list. > > Q: Doesn't other OpenJDK projects that already have transitioned have > ?? this problem? > A: No, for all other OpenJDK projects there is only one "primary" > ?? mailing list. For example skara-dev for Skara, amber-dev for Amber > ?? and so on. > > Q: Do we have too many mailing lists? > A: Perhaps, but it is not our intent to propose any changes to the > ?? number of mailing lists we have. > > Q: Will the rules engine will be 100% correct every time? > A: No, but neither are humans when they choose mailing lists. The goal > ?? of the rules engine, as stated at the start of this e-mail, is to > ?? choose a reasonable minimal set of mailing lists that a patch should > ?? be sent to. A contributor can always override the choice via the CLI > ?? or use the `/cc` pull request command. > > Q: Is the automatic selection of mailing lists opt-in or opt-out? > A: It is currently opt-in if you create a PR from the command-line and > ?? opt-out if you create a PR via a web browser. We believe that many > ?? experienced contributors will use the CLI tools and there have an > ?? easy way to control the selected mailing lists. In constrast many > ?? newcomers are likely to create pull requests via a web browser. As > ?? stated above, there is a "cooldown" period after a PR has been > ?? created when the PR author has time to fine-tune the selected mailing > ?? lists regardless of how the PR was created. > > Q: Shouldn't the information about to which mailing list to send a patch > ?? be on the wiki instead? > A: We strongly prefer to have it in a format and place where the > ?? information can be processed by programs. This way we can use the > ?? information to automate and improve upon our workflows. > > Again, thanks everyone for the great feedback and to everyone who helped > out tweaking the rules! > > Best regards, > Erik and Robin > > On 8/27/20 12:34 PM, Robin Westberg wrote: >> Hi all, >> >> As part of transitioning the jdk/jdk repository to Git with project >> Skara, we have created a set of rules that determine which mailing >> list(s) should be the default recipient of a review request, depending >> on which files are changed. The initial version of these rules was >> created by looking at historical commits and matching them with >> existing mailing list review threads. This has produced a reasonable >> basis, but it can most certainly be made better with some additional >> manual curating. >> >> Therefore, it would be very helpful if people with good knowledge of >> the various subsystems and source files that make up the JDK would be >> willing to take a look at these rules, and also suggest improvements >> where needed. In addition, lists like [1] would also be very useful >> insofar they exist. >> >> The current version of these rules is located in a JSON file in the >> Skara repository at [2]. In order to check the validity of the rules, >> there is also a CLI tool that can be used to apply it to either a >> subset of files or existing commits and produce a suggestion [3] [4]. >> If you are interested in helping out with curating these rules, these >> are the steps to get started: >> >> 1. Install the Skara CLI tools: >> https://wiki.openjdk.java.net/display/SKARA/CLI+Tools >> 2. Locate a suitable clone of the jdk/jdk repository (either Mercurial >> or Git is fine) >> 3. Change (cd) to the root of your jdk/jdk repository >> 3. Run the ?debug mlrules? command on your favorite subset of files, >> for example like this (use the actual location of jdk.json on your >> system): >> >> $ git skara debug mlrules -v >> ~/git/skara/config/mailinglist/rules/jdk.json src/hotspot/share/jfr/ >> Reading rules file... >> src/hotspot/share/jfr/dcmd: [hotspot-jfr-dev] >> src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp: >> [hotspot-jfr-dev] >> src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.hpp: >> [hotspot-jfr-dev] >> src/hotspot/share/jfr/instrumentation/jfrJvmtiAgent.cpp: >> [hotspot-jfr-dev, serviceability-dev] >> ? >> Final list suggestion is: [hotspot-jfr-dev, serviceability-dev] >> >> The command accepts multiple folder and/or file names to make it >> possible to simulate a potential change to a given set of files: >> >> $ git skara debug mlrules -v >> ../skara/config/mailinglist/rules/jdk.json doc/ide.md >> src/hotspot/cpu/x86/x86.ad src/hotspot/os/linux/gc/z/zNUMA_linux.cpp >> Reading rules file... >> doc: [build-dev] >> src/hotspot/cpu: [hotspot-compiler-dev] >> src/hotspot/os: [hotspot-runtime-dev, hotspot-gc-dev] >> >> Combined list suggestion: [build-dev, hotspot-compiler-dev, >> hotspot-gc-dev, hotspot-runtime-dev] >> Final list suggestion is: [build-dev, hotspot-dev] >> >> If the suggestions look fine, all is well. If not, you are welcome to >> propose a change to the rules, preferably by editing the jdk.json file >> [6] and creating a pull request towards the Skara project as described >> in [5]. Coincidentally, this is the same way that future changes to >> the jdk/jdk repository will be integrated, so this exercise could also >> serve as a way of getting started with Git / Skara! >> >> Best regards, >> Robin >> >> [1] https://openjdk.java.net/groups/2d/2dawtfiles.html >> [2] >> https://git.openjdk.java.net/skara/blob/master/config/mailinglist/rules/jdk.json >> >> >> [3] >> $ git skara debug mlrules -v >> ~/git/skara/config/mailinglist/rules/jdk.json >> src/java.desktop/unix/native >> Reading rules file... >> src/java.desktop/unix/native/common: [2d-dev] >> src/java.desktop/unix/native/include: [] >> src/java.desktop/unix/native/libawt: [2d-dev] >> src/java.desktop/unix/native/libawt_headless: [awt-dev] >> src/java.desktop/unix/native/libawt_xawt: [awt-dev] >> src/java.desktop/unix/native/libfontmanager: [2d-dev] >> src/java.desktop/unix/native/libjawt: [awt-dev] >> src/java.desktop/unix/native/libsplashscreen: [awt-dev] >> >> Combined list suggestion: [2d-dev, awt-dev] >> Final list suggestion is: [2d-dev, awt-dev] >> >> [4] >> $ git skara debug mlrules -d 30 -v >> ~/git/skara/config/mailinglist/rules/jdk.json . >> ... >> ? [2d-dev, awt-dev, serviceability-dev] c32923e0: 8240487: Cleanup >> whitespace in .cc, .hh, .m, and .mm files >> ? [awt-dev] 7f74c7dd: 8212226: SurfaceManager throws "Invalid Image >> variant" for MultiResolutionImage (Windows) >> ???? Suggested lists: [2d-dev, awt-dev] >> ???? Rules matching unmentioned lists [2d-dev]: >> ?????? src/java.desktop/share/classes/sun/java2d/SunGraphics2D.java - >> [2d-dev: ^src/java.desktop/share/classes/sun/java2d/] >> ? >> >> [5] https://wiki.openjdk.java.net/display/SKARA/Skara#Skara-Workflow >> >> [6] >> The rules are made up of sets of regular expressions for the various >> mailing lists that are used for reviewing changes going into the JDK. >> If any rule matches, that mailing list will get a copy of the review >> request email. For directories containing files that belong to >> different subsystems, it?s usually a good idea to write the rules in a >> complementary fashion if possible, so that anything not explicitly >> mentioned gets a reasonable default. As an example, see these rules >> for a subset of awt / 2d / i18n files: >> >> ?awt-dev?: >> "src/java.desktop/share/classes/sun/awt/(?!font|sunhints|color/|font/|geom/|im/|image/|print/)? >> >> ?2d-dev?: >> "src/java.desktop/share/classes/sun/awt/(font|sunhints|color/|font/|geom/|image/|print/)" >> >> ?I18n-dev?: "src/java.desktop/share/classes/sun/awt/im/? >> >> In this example, anything not explicitly indicated as belonging to >> either 2d-dev or i18-dev will be matched by awt-dev. >> From kevin.rushforth at oracle.com Mon Aug 31 13:11:42 2020 From: kevin.rushforth at oracle.com (Kevin Rushforth) Date: Mon, 31 Aug 2020 06:11:42 -0700 Subject: Request for assistance: Verify and update mailing list filter rules for jdk/jdk in preparation for Skara transition In-Reply-To: <5F4A83A9.1000207@oracle.com> References: <568BB329-6F50-43B4-BE1D-3A9D7EA60F79@oracle.com> <35347485-216D-42BC-A05A-8D974E3FA581@oracle.com> <56e127e9-3802-a8d5-9a79-042166f02409@oracle.com> <5F4A83A9.1000207@oracle.com> Message-ID: <52ac2d88-a088-f579-ecf4-b851a97f9607@oracle.com> The minimum number of reviewers will remain at 1. Any "R"eviewer can raise the minimum usnig the `/reviewers` command, for example: /reviewers 2 This will then require 2 reviewers. We use this for JavaFX and it has worked well. Having certain areas (e.g., 2d, swing, awt) default to `/reviewers 2` might be a useful RFE for Skara (Erik or Robin can comment as to whether they thing this is feasible). I can't think of any good way for automated tooling to be able to recognize that the "right sort" of reviewers with the right expertise (someone from 2D someone from build, etc) have reviewed it. -- Kevin On 8/29/2020 9:34 AM, Philip Race wrote: > I have some questions which at least tangentially relate to the list > mappings which raise > what to me are tricky problems but maybe they've already been thought > through and solved. > > First, what is the minimum number of reviewers required a fix for the > JDK project ? > > Second, how can we have that by default adjusted depending on mailing > list, with the > ability to either raise or lower that number according to the > judgement of the fixer. > In the client area 2 reviewers is the big rule, only one has to be a > Capital R reviewer, > but for trivial and urgent fixes we allow just one reviewer. > > Third, if a fix is cross-posted to (say) build-dev and 2d-dev, how do > you ensure it > gets both a build reviewer and a 2D reviewer's approval before pushing > ? That > is after all the point of the cross-posting. > > -phil. > > On 8/27/20, 10:37 AM, Joe Darcy wrote: >> Hello, >> >> The mapping of >> changed-file-to-OpenJDK-mailing-list(s)-to-review-the-file can be >> non-obvious, both to new contributors and to experienced contributors >> working in an unfamiliar area. If an automated mapping gets this 95+% >> correct, with the ability for manual tweaking, that strikes me as an >> overall improvement over the current situation. >> >> The current mapping has various entries that should be changed, but >> that is why it is being sent out for review before the Skara >> transition :-) >> >> As a general comment, I would expect both the mapping and other >> aspects of the Skara tooling to get updated in response to feedback >> after jdk/jdk moves over. >> >> -Joe >> >> On 8/27/2020 9:53 AM, Igor Ignatyev wrote: >>> Hi Robin, >>> >>> although I really like the idea of having mapping b/w files and >>> groups/components/subcomponents, I agree w/ David that in its >>> *current* form it's unworkable. having the mapping in Skara repo is >>> impractical, as it introduces additional overhead for maintenance, >>> not to speak of possible desynchronization. Thus I suggest moving >>> the mapping to jdk/jdk repo and updating Skara tooling accordingly. >>> >>> I also have a question regarding the format, why did you decide to >>> invent your own format instead of using CODEOWNER-like format which >>> fits the needs rather nicely and is used for similar purposes by >>> github and gitlab? >>> >>> Thanks, >>> -- Igor >>> >>>> On Aug 27, 2020, at 6:26 AM, David Holmes >>>> wrote: >>>> >>>> In all seriousness I just don't think this is a reasonable or >>>> necessary thing to do. When you create a PR you should specify the >>>> mailing lists to be used, as you do today with a RFR. Trying to >>>> maintain a file by file mapping is just a huge initial setup cost >>>> and a maintenance nightmare. It is not necessary to try and >>>> automate this IMO. >>>> >>>> I wish this intent had been flagged/discussed some time ago. :( >>>> >>>> David >>>> ----- >>>> >>>> On 27/08/2020 8:34 pm, Robin Westberg wrote: >>>>> Hi all, >>>>> As part of transitioning the jdk/jdk repository to Git with >>>>> project Skara, we have created a set of rules that determine which >>>>> mailing list(s) should be the default recipient of a review >>>>> request, depending on which files are changed. The initial version >>>>> of these rules was created by looking at historical commits and >>>>> matching them with existing mailing list review threads. This has >>>>> produced a reasonable basis, but it can most certainly be made >>>>> better with some additional manual curating. >>>>> Therefore, it would be very helpful if people with good knowledge >>>>> of the various subsystems and source files that make up the JDK >>>>> would be willing to take a look at these rules, and also suggest >>>>> improvements where needed. In addition, lists like [1] would also >>>>> be very useful insofar they exist. >>>>> The current version of these rules is located in a JSON file in >>>>> the Skara repository at [2]. In order to check the validity of the >>>>> rules, there is also a CLI tool that can be used to apply it to >>>>> either a subset of files or existing commits and produce a >>>>> suggestion [3] [4]. If you are interested in helping out with >>>>> curating these rules, these are the steps to get started: >>>>> 1. Install the Skara CLI tools: >>>>> https://wiki.openjdk.java.net/display/SKARA/CLI+Tools >>>>> 2. Locate a suitable clone of the jdk/jdk repository (either >>>>> Mercurial or Git is fine) >>>>> 3. Change (cd) to the root of your jdk/jdk repository >>>>> 3. Run the ?debug mlrules? command on your favorite subset of >>>>> files, for example like this (use the actual location of jdk.json >>>>> on your system): >>>>> $ git skara debug mlrules -v >>>>> ~/git/skara/config/mailinglist/rules/jdk.json src/hotspot/share/jfr/ >>>>> Reading rules file... >>>>> src/hotspot/share/jfr/dcmd: [hotspot-jfr-dev] >>>>> src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp: >>>>> [hotspot-jfr-dev] >>>>> src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.hpp: >>>>> [hotspot-jfr-dev] >>>>> src/hotspot/share/jfr/instrumentation/jfrJvmtiAgent.cpp: >>>>> [hotspot-jfr-dev, serviceability-dev] >>>>> ? >>>>> Final list suggestion is: [hotspot-jfr-dev, serviceability-dev] >>>>> The command accepts multiple folder and/or file names to make it >>>>> possible to simulate a potential change to a given set of files: >>>>> $ git skara debug mlrules -v >>>>> ../skara/config/mailinglist/rules/jdk.json doc/ide.md >>>>> src/hotspot/cpu/x86/x86.ad src/hotspot/os/linux/gc/z/zNUMA_linux.cpp >>>>> Reading rules file... >>>>> doc: [build-dev] >>>>> src/hotspot/cpu: [hotspot-compiler-dev] >>>>> src/hotspot/os: [hotspot-runtime-dev, hotspot-gc-dev] >>>>> Combined list suggestion: [build-dev, hotspot-compiler-dev, >>>>> hotspot-gc-dev, hotspot-runtime-dev] >>>>> Final list suggestion is: [build-dev, hotspot-dev] >>>>> If the suggestions look fine, all is well. If not, you are welcome >>>>> to propose a change to the rules, preferably by editing the >>>>> jdk.json file [6] and creating a pull request towards the Skara >>>>> project as described in [5]. Coincidentally, this is the same way >>>>> that future changes to the jdk/jdk repository will be integrated, >>>>> so this exercise could also serve as a way of getting started with >>>>> Git / Skara! >>>>> Best regards, >>>>> Robin >>>>> [1] https://openjdk.java.net/groups/2d/2dawtfiles.html >>>>> [2] >>>>> https://git.openjdk.java.net/skara/blob/master/config/mailinglist/rules/jdk.json >>>>> [3] >>>>> $ git skara debug mlrules -v >>>>> ~/git/skara/config/mailinglist/rules/jdk.json >>>>> src/java.desktop/unix/native >>>>> Reading rules file... >>>>> src/java.desktop/unix/native/common: [2d-dev] >>>>> src/java.desktop/unix/native/include: [] >>>>> src/java.desktop/unix/native/libawt: [2d-dev] >>>>> src/java.desktop/unix/native/libawt_headless: [awt-dev] >>>>> src/java.desktop/unix/native/libawt_xawt: [awt-dev] >>>>> src/java.desktop/unix/native/libfontmanager: [2d-dev] >>>>> src/java.desktop/unix/native/libjawt: [awt-dev] >>>>> src/java.desktop/unix/native/libsplashscreen: [awt-dev] >>>>> Combined list suggestion: [2d-dev, awt-dev] >>>>> Final list suggestion is: [2d-dev, awt-dev] >>>>> [4] >>>>> $ git skara debug mlrules -d 30 -v >>>>> ~/git/skara/config/mailinglist/rules/jdk.json . >>>>> ... >>>>> ? [2d-dev, awt-dev, serviceability-dev] c32923e0: 8240487: Cleanup >>>>> whitespace in .cc, .hh, .m, and .mm files >>>>> ? [awt-dev] 7f74c7dd: 8212226: SurfaceManager throws "Invalid >>>>> Image variant" for MultiResolutionImage (Windows) >>>>> ???? Suggested lists: [2d-dev, awt-dev] >>>>> ???? Rules matching unmentioned lists [2d-dev]: >>>>> src/java.desktop/share/classes/sun/java2d/SunGraphics2D.java - >>>>> [2d-dev: ^src/java.desktop/share/classes/sun/java2d/] >>>>> ? >>>>> [5] https://wiki.openjdk.java.net/display/SKARA/Skara#Skara-Workflow >>>>> [6] >>>>> The rules are made up of sets of regular expressions for the >>>>> various mailing lists that are used for reviewing changes going >>>>> into the JDK. If any rule matches, that mailing list will get a >>>>> copy of the review request email. For directories containing files >>>>> that belong to different subsystems, it?s usually a good idea to >>>>> write the rules in a complementary fashion if possible, so that >>>>> anything not explicitly mentioned gets a reasonable default. As an >>>>> example, see these rules for a subset of awt / 2d / i18n files: >>>>> ?awt-dev?: >>>>> "src/java.desktop/share/classes/sun/awt/(?!font|sunhints|color/|font/|geom/|im/|image/|print/)? >>>>> ?2d-dev?: >>>>> "src/java.desktop/share/classes/sun/awt/(font|sunhints|color/|font/|geom/|image/|print/)" >>>>> ?I18n-dev?: "src/java.desktop/share/classes/sun/awt/im/? >>>>> In this example, anything not explicitly indicated as belonging to >>>>> either 2d-dev or i18-dev will be matched by awt-dev. From philip.race at oracle.com Mon Aug 31 14:04:48 2020 From: philip.race at oracle.com (Philip Race) Date: Mon, 31 Aug 2020 07:04:48 -0700 Subject: Request for assistance: Verify and update mailing list filter rules for jdk/jdk in preparation for Skara transition In-Reply-To: <52ac2d88-a088-f579-ecf4-b851a97f9607@oracle.com> References: <568BB329-6F50-43B4-BE1D-3A9D7EA60F79@oracle.com> <35347485-216D-42BC-A05A-8D974E3FA581@oracle.com> <56e127e9-3802-a8d5-9a79-042166f02409@oracle.com> <5F4A83A9.1000207@oracle.com> <52ac2d88-a088-f579-ecf4-b851a97f9607@oracle.com> Message-ID: <5F4D0380.4040200@oracle.com> On 8/31/20, 6:11 AM, Kevin Rushforth wrote: > The minimum number of reviewers will remain at 1. Any "R"eviewer can > raise the minimum usnig the `/reviewers` command, for example: > > /reviewers 2 > > This will then require 2 reviewers. We use this for JavaFX and it has > worked well. Having certain areas (e.g., 2d, swing, awt) default to > `/reviewers 2` might be a useful RFE for Skara (Erik or Robin can > comment as to whether they thing this is feasible). I would hope so, since the github/skara tooling cheerily tells you can go right ahead and integrate once you have the minimum number, and folks will take that message at face value, and at least 8/10 of client bugs should have two reviewers so it should be the default. Relaxing this is exactly the wrong direction once we push directly to the main jdk repo and manually setting them all to two is going to get tedious. -phil > > I can't think of any good way for automated tooling to be able to > recognize that the "right sort" of reviewers with the right expertise > (someone from 2D someone from build, etc) have reviewed it. Nor I, but maybe someone on the skara team does. -phil. > > -- Kevin > > > On 8/29/2020 9:34 AM, Philip Race wrote: >> I have some questions which at least tangentially relate to the list >> mappings which raise >> what to me are tricky problems but maybe they've already been thought >> through and solved. >> >> First, what is the minimum number of reviewers required a fix for the >> JDK project ? >> >> Second, how can we have that by default adjusted depending on mailing >> list, with the >> ability to either raise or lower that number according to the >> judgement of the fixer. >> In the client area 2 reviewers is the big rule, only one has to be a >> Capital R reviewer, >> but for trivial and urgent fixes we allow just one reviewer. >> >> Third, if a fix is cross-posted to (say) build-dev and 2d-dev, how do >> you ensure it >> gets both a build reviewer and a 2D reviewer's approval before >> pushing ? That >> is after all the point of the cross-posting. >> >> -phil. >> >> On 8/27/20, 10:37 AM, Joe Darcy wrote: >>> Hello, >>> >>> The mapping of >>> changed-file-to-OpenJDK-mailing-list(s)-to-review-the-file can be >>> non-obvious, both to new contributors and to experienced >>> contributors working in an unfamiliar area. If an automated mapping >>> gets this 95+% correct, with the ability for manual tweaking, that >>> strikes me as an overall improvement over the current situation. >>> >>> The current mapping has various entries that should be changed, but >>> that is why it is being sent out for review before the Skara >>> transition :-) >>> >>> As a general comment, I would expect both the mapping and other >>> aspects of the Skara tooling to get updated in response to feedback >>> after jdk/jdk moves over. >>> >>> -Joe >>> >>> On 8/27/2020 9:53 AM, Igor Ignatyev wrote: >>>> Hi Robin, >>>> >>>> although I really like the idea of having mapping b/w files and >>>> groups/components/subcomponents, I agree w/ David that in its >>>> *current* form it's unworkable. having the mapping in Skara repo is >>>> impractical, as it introduces additional overhead for maintenance, >>>> not to speak of possible desynchronization. Thus I suggest moving >>>> the mapping to jdk/jdk repo and updating Skara tooling accordingly. >>>> >>>> I also have a question regarding the format, why did you decide to >>>> invent your own format instead of using CODEOWNER-like format which >>>> fits the needs rather nicely and is used for similar purposes by >>>> github and gitlab? >>>> >>>> Thanks, >>>> -- Igor >>>> >>>>> On Aug 27, 2020, at 6:26 AM, David Holmes >>>>> wrote: >>>>> >>>>> In all seriousness I just don't think this is a reasonable or >>>>> necessary thing to do. When you create a PR you should specify the >>>>> mailing lists to be used, as you do today with a RFR. Trying to >>>>> maintain a file by file mapping is just a huge initial setup cost >>>>> and a maintenance nightmare. It is not necessary to try and >>>>> automate this IMO. >>>>> >>>>> I wish this intent had been flagged/discussed some time ago. :( >>>>> >>>>> David >>>>> ----- >>>>> >>>>> On 27/08/2020 8:34 pm, Robin Westberg wrote: >>>>>> Hi all, >>>>>> As part of transitioning the jdk/jdk repository to Git with >>>>>> project Skara, we have created a set of rules that determine >>>>>> which mailing list(s) should be the default recipient of a review >>>>>> request, depending on which files are changed. The initial >>>>>> version of these rules was created by looking at historical >>>>>> commits and matching them with existing mailing list review >>>>>> threads. This has produced a reasonable basis, but it can most >>>>>> certainly be made better with some additional manual curating. >>>>>> Therefore, it would be very helpful if people with good knowledge >>>>>> of the various subsystems and source files that make up the JDK >>>>>> would be willing to take a look at these rules, and also suggest >>>>>> improvements where needed. In addition, lists like [1] would also >>>>>> be very useful insofar they exist. >>>>>> The current version of these rules is located in a JSON file in >>>>>> the Skara repository at [2]. In order to check the validity of >>>>>> the rules, there is also a CLI tool that can be used to apply it >>>>>> to either a subset of files or existing commits and produce a >>>>>> suggestion [3] [4]. If you are interested in helping out with >>>>>> curating these rules, these are the steps to get started: >>>>>> 1. Install the Skara CLI tools: >>>>>> https://wiki.openjdk.java.net/display/SKARA/CLI+Tools >>>>>> 2. Locate a suitable clone of the jdk/jdk repository (either >>>>>> Mercurial or Git is fine) >>>>>> 3. Change (cd) to the root of your jdk/jdk repository >>>>>> 3. Run the ?debug mlrules? command on your favorite subset of >>>>>> files, for example like this (use the actual location of jdk.json >>>>>> on your system): >>>>>> $ git skara debug mlrules -v >>>>>> ~/git/skara/config/mailinglist/rules/jdk.json src/hotspot/share/jfr/ >>>>>> Reading rules file... >>>>>> src/hotspot/share/jfr/dcmd: [hotspot-jfr-dev] >>>>>> src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp: >>>>>> [hotspot-jfr-dev] >>>>>> src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.hpp: >>>>>> [hotspot-jfr-dev] >>>>>> src/hotspot/share/jfr/instrumentation/jfrJvmtiAgent.cpp: >>>>>> [hotspot-jfr-dev, serviceability-dev] >>>>>> ? >>>>>> Final list suggestion is: [hotspot-jfr-dev, serviceability-dev] >>>>>> The command accepts multiple folder and/or file names to make it >>>>>> possible to simulate a potential change to a given set of files: >>>>>> $ git skara debug mlrules -v >>>>>> ../skara/config/mailinglist/rules/jdk.json doc/ide.md >>>>>> src/hotspot/cpu/x86/x86.ad src/hotspot/os/linux/gc/z/zNUMA_linux.cpp >>>>>> Reading rules file... >>>>>> doc: [build-dev] >>>>>> src/hotspot/cpu: [hotspot-compiler-dev] >>>>>> src/hotspot/os: [hotspot-runtime-dev, hotspot-gc-dev] >>>>>> Combined list suggestion: [build-dev, hotspot-compiler-dev, >>>>>> hotspot-gc-dev, hotspot-runtime-dev] >>>>>> Final list suggestion is: [build-dev, hotspot-dev] >>>>>> If the suggestions look fine, all is well. If not, you are >>>>>> welcome to propose a change to the rules, preferably by editing >>>>>> the jdk.json file [6] and creating a pull request towards the >>>>>> Skara project as described in [5]. Coincidentally, this is the >>>>>> same way that future changes to the jdk/jdk repository will be >>>>>> integrated, so this exercise could also serve as a way of getting >>>>>> started with Git / Skara! >>>>>> Best regards, >>>>>> Robin >>>>>> [1] https://openjdk.java.net/groups/2d/2dawtfiles.html >>>>>> [2] >>>>>> https://git.openjdk.java.net/skara/blob/master/config/mailinglist/rules/jdk.json >>>>>> [3] >>>>>> $ git skara debug mlrules -v >>>>>> ~/git/skara/config/mailinglist/rules/jdk.json >>>>>> src/java.desktop/unix/native >>>>>> Reading rules file... >>>>>> src/java.desktop/unix/native/common: [2d-dev] >>>>>> src/java.desktop/unix/native/include: [] >>>>>> src/java.desktop/unix/native/libawt: [2d-dev] >>>>>> src/java.desktop/unix/native/libawt_headless: [awt-dev] >>>>>> src/java.desktop/unix/native/libawt_xawt: [awt-dev] >>>>>> src/java.desktop/unix/native/libfontmanager: [2d-dev] >>>>>> src/java.desktop/unix/native/libjawt: [awt-dev] >>>>>> src/java.desktop/unix/native/libsplashscreen: [awt-dev] >>>>>> Combined list suggestion: [2d-dev, awt-dev] >>>>>> Final list suggestion is: [2d-dev, awt-dev] >>>>>> [4] >>>>>> $ git skara debug mlrules -d 30 -v >>>>>> ~/git/skara/config/mailinglist/rules/jdk.json . >>>>>> ... >>>>>> ? [2d-dev, awt-dev, serviceability-dev] c32923e0: 8240487: >>>>>> Cleanup whitespace in .cc, .hh, .m, and .mm files >>>>>> ? [awt-dev] 7f74c7dd: 8212226: SurfaceManager throws "Invalid >>>>>> Image variant" for MultiResolutionImage (Windows) >>>>>> Suggested lists: [2d-dev, awt-dev] >>>>>> Rules matching unmentioned lists [2d-dev]: >>>>>> src/java.desktop/share/classes/sun/java2d/SunGraphics2D.java - >>>>>> [2d-dev: ^src/java.desktop/share/classes/sun/java2d/] >>>>>> ? >>>>>> [5] https://wiki.openjdk.java.net/display/SKARA/Skara#Skara-Workflow >>>>>> [6] >>>>>> The rules are made up of sets of regular expressions for the >>>>>> various mailing lists that are used for reviewing changes going >>>>>> into the JDK. If any rule matches, that mailing list will get a >>>>>> copy of the review request email. For directories containing >>>>>> files that belong to different subsystems, it?s usually a good >>>>>> idea to write the rules in a complementary fashion if possible, >>>>>> so that anything not explicitly mentioned gets a reasonable >>>>>> default. As an example, see these rules for a subset of awt / 2d >>>>>> / i18n files: >>>>>> ?awt-dev?: >>>>>> "src/java.desktop/share/classes/sun/awt/(?!font|sunhints|color/|font/|geom/|im/|image/|print/)? >>>>>> ?2d-dev?: >>>>>> "src/java.desktop/share/classes/sun/awt/(font|sunhints|color/|font/|geom/|image/|print/)" >>>>>> ?I18n-dev?: "src/java.desktop/share/classes/sun/awt/im/? >>>>>> In this example, anything not explicitly indicated as belonging >>>>>> to either 2d-dev or i18-dev will be matched by awt-dev. > From erik.helin at oracle.com Mon Aug 31 14:16:59 2020 From: erik.helin at oracle.com (Erik Helin) Date: Mon, 31 Aug 2020 16:16:59 +0200 Subject: Request for assistance: Verify and update mailing list filter rules for jdk/jdk in preparation for Skara transition In-Reply-To: <5F4A83A9.1000207@oracle.com> References: <568BB329-6F50-43B4-BE1D-3A9D7EA60F79@oracle.com> <35347485-216D-42BC-A05A-8D974E3FA581@oracle.com> <56e127e9-3802-a8d5-9a79-042166f02409@oracle.com> <5F4A83A9.1000207@oracle.com> Message-ID: On 8/29/20 6:34 PM, Philip Race wrote: > I have some questions which at least tangentially relate to the list > mappings which raise > what to me are tricky problems but maybe they've already been thought > through and solved. > > First, what is the minimum number of reviewers required a fix for the > JDK project ? It is 1 Reviewer as configured by .jcheck/conf. > Second, how can we have that by default adjusted depending on mailing > list, with the > ability to either raise or lower that number according to the judgement > of the fixer. > In the client area 2 reviewers is the big rule, only one has to be a > Capital R reviewer, > but for trivial and urgent fixes we allow just one reviewer. Ok, so we have to separate between culture and rules. The .jcheck/conf file configures the rules, and the rule is 1 Reviewer. For several directories in the jdk repository various norms have formed with regards to the requirements that needs to be met before one can push. For example for the src/hotspot directory you need 1 Reviewer and 1 Author (or above) to review and you should wait 24 hours before pushing. For the client directories you state that 2 Reviewers are needed (I wasn't aware, I have never contributed to the client code). For the make directory you really ought to get a review from either Erik J or Magnus. These norms are not mechanically enforced (not today by jcheck, nor tomorrow by Skara), instead they are enforced through Reviewers educating contributors about the cultural norms. > Third, if a fix is cross-posted to (say) build-dev and 2d-dev, how do > you ensure it > gets both a build reviewer and a 2D reviewer's approval before pushing ? > That > is after all the point of the cross-posting. The norm that a change to the Makefiles must be reviewed by a senior build engineer (in most cases Erik J or Magnus) is not mechanically enforced, as I explained above. The point of cross-posting to build-dev is to allow an experienced build engineer to get the chance to look at the patch, otherwise the build engineers would have follow all mailing lists. I agree with Kevin that trying to capture all these cultural norms automatically is going to be very tricky (if not impossible). Perhaps the developers guide could be a good place to store this information? Remember that today with Mercurial we don't really enforce anything, as you can put any Reviewers OpenJDK username on the "Reviewed-by" line and then push. A Committer doing this would probably find themselves losing their Committer status very quickly though... Thanks, Erik > -phil. > > On 8/27/20, 10:37 AM, Joe Darcy wrote: >> Hello, >> >> The mapping of >> changed-file-to-OpenJDK-mailing-list(s)-to-review-the-file can be >> non-obvious, both to new contributors and to experienced contributors >> working in an unfamiliar area. If an automated mapping gets this 95+% >> correct, with the ability for manual tweaking, that strikes me as an >> overall improvement over the current situation. >> >> The current mapping has various entries that should be changed, but >> that is why it is being sent out for review before the Skara >> transition :-) >> >> As a general comment, I would expect both the mapping and other >> aspects of the Skara tooling to get updated in response to feedback >> after jdk/jdk moves over. >> >> -Joe >> >> On 8/27/2020 9:53 AM, Igor Ignatyev wrote: >>> Hi Robin, >>> >>> although I really like the idea of having mapping b/w files and >>> groups/components/subcomponents, I agree w/ David that in its >>> *current* form it's unworkable. having the mapping in Skara repo is >>> impractical, as it introduces additional overhead for maintenance, >>> not to speak of possible desynchronization. Thus I suggest moving the >>> mapping to jdk/jdk repo and updating Skara tooling accordingly. >>> >>> I also have a question regarding the format, why did you decide to >>> invent your own format instead of using CODEOWNER-like format which >>> fits the needs rather nicely and is used for similar purposes by >>> github and gitlab? >>> >>> Thanks, >>> -- Igor >>> >>>> On Aug 27, 2020, at 6:26 AM, David Holmes >>>> wrote: >>>> >>>> In all seriousness I just don't think this is a reasonable or >>>> necessary thing to do. When you create a PR you should specify the >>>> mailing lists to be used, as you do today with a RFR. Trying to >>>> maintain a file by file mapping is just a huge initial setup cost >>>> and a maintenance nightmare. It is not necessary to try and automate >>>> this IMO. >>>> >>>> I wish this intent had been flagged/discussed some time ago. :( >>>> >>>> David >>>> ----- >>>> >>>> On 27/08/2020 8:34 pm, Robin Westberg wrote: >>>>> Hi all, >>>>> As part of transitioning the jdk/jdk repository to Git with project >>>>> Skara, we have created a set of rules that determine which mailing >>>>> list(s) should be the default recipient of a review request, >>>>> depending on which files are changed. The initial version of these >>>>> rules was created by looking at historical commits and matching >>>>> them with existing mailing list review threads. This has produced a >>>>> reasonable basis, but it can most certainly be made better with >>>>> some additional manual curating. >>>>> Therefore, it would be very helpful if people with good knowledge >>>>> of the various subsystems and source files that make up the JDK >>>>> would be willing to take a look at these rules, and also suggest >>>>> improvements where needed. In addition, lists like [1] would also >>>>> be very useful insofar they exist. >>>>> The current version of these rules is located in a JSON file in the >>>>> Skara repository at [2]. In order to check the validity of the >>>>> rules, there is also a CLI tool that can be used to apply it to >>>>> either a subset of files or existing commits and produce a >>>>> suggestion [3] [4]. If you are interested in helping out with >>>>> curating these rules, these are the steps to get started: >>>>> 1. Install the Skara CLI tools: >>>>> https://wiki.openjdk.java.net/display/SKARA/CLI+Tools >>>>> 2. Locate a suitable clone of the jdk/jdk repository (either >>>>> Mercurial or Git is fine) >>>>> 3. Change (cd) to the root of your jdk/jdk repository >>>>> 3. Run the ?debug mlrules? command on your favorite subset of >>>>> files, for example like this (use the actual location of jdk.json >>>>> on your system): >>>>> $ git skara debug mlrules -v >>>>> ~/git/skara/config/mailinglist/rules/jdk.json src/hotspot/share/jfr/ >>>>> Reading rules file... >>>>> src/hotspot/share/jfr/dcmd: [hotspot-jfr-dev] >>>>> src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp: >>>>> [hotspot-jfr-dev] >>>>> src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.hpp: >>>>> [hotspot-jfr-dev] >>>>> src/hotspot/share/jfr/instrumentation/jfrJvmtiAgent.cpp: >>>>> [hotspot-jfr-dev, serviceability-dev] >>>>> ? >>>>> Final list suggestion is: [hotspot-jfr-dev, serviceability-dev] >>>>> The command accepts multiple folder and/or file names to make it >>>>> possible to simulate a potential change to a given set of files: >>>>> $ git skara debug mlrules -v >>>>> ../skara/config/mailinglist/rules/jdk.json doc/ide.md >>>>> src/hotspot/cpu/x86/x86.ad src/hotspot/os/linux/gc/z/zNUMA_linux.cpp >>>>> Reading rules file... >>>>> doc: [build-dev] >>>>> src/hotspot/cpu: [hotspot-compiler-dev] >>>>> src/hotspot/os: [hotspot-runtime-dev, hotspot-gc-dev] >>>>> Combined list suggestion: [build-dev, hotspot-compiler-dev, >>>>> hotspot-gc-dev, hotspot-runtime-dev] >>>>> Final list suggestion is: [build-dev, hotspot-dev] >>>>> If the suggestions look fine, all is well. If not, you are welcome >>>>> to propose a change to the rules, preferably by editing the >>>>> jdk.json file [6] and creating a pull request towards the Skara >>>>> project as described in [5]. Coincidentally, this is the same way >>>>> that future changes to the jdk/jdk repository will be integrated, >>>>> so this exercise could also serve as a way of getting started with >>>>> Git / Skara! >>>>> Best regards, >>>>> Robin >>>>> [1] https://openjdk.java.net/groups/2d/2dawtfiles.html >>>>> [2] >>>>> https://git.openjdk.java.net/skara/blob/master/config/mailinglist/rules/jdk.json >>>>> >>>>> [3] >>>>> $ git skara debug mlrules -v >>>>> ~/git/skara/config/mailinglist/rules/jdk.json >>>>> src/java.desktop/unix/native >>>>> Reading rules file... >>>>> src/java.desktop/unix/native/common: [2d-dev] >>>>> src/java.desktop/unix/native/include: [] >>>>> src/java.desktop/unix/native/libawt: [2d-dev] >>>>> src/java.desktop/unix/native/libawt_headless: [awt-dev] >>>>> src/java.desktop/unix/native/libawt_xawt: [awt-dev] >>>>> src/java.desktop/unix/native/libfontmanager: [2d-dev] >>>>> src/java.desktop/unix/native/libjawt: [awt-dev] >>>>> src/java.desktop/unix/native/libsplashscreen: [awt-dev] >>>>> Combined list suggestion: [2d-dev, awt-dev] >>>>> Final list suggestion is: [2d-dev, awt-dev] >>>>> [4] >>>>> $ git skara debug mlrules -d 30 -v >>>>> ~/git/skara/config/mailinglist/rules/jdk.json . >>>>> ... >>>>> ? [2d-dev, awt-dev, serviceability-dev] c32923e0: 8240487: Cleanup >>>>> whitespace in .cc, .hh, .m, and .mm files >>>>> ? [awt-dev] 7f74c7dd: 8212226: SurfaceManager throws "Invalid Image >>>>> variant" for MultiResolutionImage (Windows) >>>>> ???? Suggested lists: [2d-dev, awt-dev] >>>>> ???? Rules matching unmentioned lists [2d-dev]: >>>>> ?????? src/java.desktop/share/classes/sun/java2d/SunGraphics2D.java >>>>> - [2d-dev: ^src/java.desktop/share/classes/sun/java2d/] >>>>> ? >>>>> [5] https://wiki.openjdk.java.net/display/SKARA/Skara#Skara-Workflow >>>>> [6] >>>>> The rules are made up of sets of regular expressions for the >>>>> various mailing lists that are used for reviewing changes going >>>>> into the JDK. If any rule matches, that mailing list will get a >>>>> copy of the review request email. For directories containing files >>>>> that belong to different subsystems, it?s usually a good idea to >>>>> write the rules in a complementary fashion if possible, so that >>>>> anything not explicitly mentioned gets a reasonable default. As an >>>>> example, see these rules for a subset of awt / 2d / i18n files: >>>>> ?awt-dev?: >>>>> "src/java.desktop/share/classes/sun/awt/(?!font|sunhints|color/|font/|geom/|im/|image/|print/)? >>>>> >>>>> ?2d-dev?: >>>>> "src/java.desktop/share/classes/sun/awt/(font|sunhints|color/|font/|geom/|image/|print/)" >>>>> >>>>> ?I18n-dev?: "src/java.desktop/share/classes/sun/awt/im/? >>>>> In this example, anything not explicitly indicated as belonging to >>>>> either 2d-dev or i18-dev will be matched by awt-dev. From erik.helin at oracle.com Mon Aug 31 14:25:07 2020 From: erik.helin at oracle.com (Erik Helin) Date: Mon, 31 Aug 2020 16:25:07 +0200 Subject: Request for assistance: Verify and update mailing list filter rules for jdk/jdk in preparation for Skara transition In-Reply-To: <5F4D0380.4040200@oracle.com> References: <568BB329-6F50-43B4-BE1D-3A9D7EA60F79@oracle.com> <35347485-216D-42BC-A05A-8D974E3FA581@oracle.com> <56e127e9-3802-a8d5-9a79-042166f02409@oracle.com> <5F4A83A9.1000207@oracle.com> <52ac2d88-a088-f579-ecf4-b851a97f9607@oracle.com> <5F4D0380.4040200@oracle.com> Message-ID: <23dd9118-2e72-ebfb-cc35-a60de6c27cb0@oracle.com> On 8/31/20 4:04 PM, Philip Race wrote: > > On 8/31/20, 6:11 AM, Kevin Rushforth wrote: >> The minimum number of reviewers will remain at 1. Any "R"eviewer can >> raise the minimum usnig the `/reviewers` command, for example: >> >> /reviewers 2 >> >> This will then require 2 reviewers. We use this for JavaFX and it has >> worked well. Having certain areas (e.g., 2d, swing, awt) default to >> `/reviewers 2` might be a useful RFE for Skara (Erik or Robin can >> comment as to whether they thing this is feasible). > > I would hope so, since the github/skara tooling cheerily tells you can > go right ahead and integrate > once you have the minimum number, and folks will take that message at > face value, > and at least 8/10 of client bugs should have two reviewers so it should > be the default. > Relaxing this is exactly the wrong direction once we push directly to > the main jdk repo > and manually setting them all to two is going to get tedious. To be precise, the bot states: > This change now passes all automated pre-integration checks. When the > change also fulfills all [project specific requirements > (https://github.com/openjdk/jdk/blob/master/CONTRIBUTING.md), type > /integrate in a new comment to proceed. After integration, the commit > message will be: As you can see above we only state that the changes passes the _automated_ pre-integration checks. Furthermore we also provide a link to additional project specific requirements. For the jdk project, the file CONTRIBUTING.md contains a link to https://openjdk.java.net/contribute. We could potentially highlight *automated* a bit more and also more strongly encourage the contributor read the contributing guidelines. As I stated in my earlier reply, I don't think it will be possible to capture all the details of the informal rules that apply for various sub-directories in the jdk repository in a program. Remember that the guideline is that you should make 8 non-trivial changes before you get nomiated to become a Committer (a person who is *not* a Committer cannot use /integrate). Reviewers therefore have plenty time to educate and guide newcomers during those 8 reviews. Thanks, Erik > -phil >> >> I can't think of any good way for automated tooling to be able to >> recognize that the "right sort" of reviewers with the right expertise >> (someone from 2D someone from build, etc) have reviewed it. > > Nor I, but maybe someone on the skara team does. > > -phil. > >> >> -- Kevin >> >> >> On 8/29/2020 9:34 AM, Philip Race wrote: >>> I have some questions which at least tangentially relate to the list >>> mappings which raise >>> what to me are tricky problems but maybe they've already been thought >>> through and solved. >>> >>> First, what is the minimum number of reviewers required a fix for the >>> JDK project ? >>> >>> Second, how can we have that by default adjusted depending on mailing >>> list, with the >>> ability to either raise or lower that number according to the >>> judgement of the fixer. >>> In the client area 2 reviewers is the big rule, only one has to be a >>> Capital R reviewer, >>> but for trivial and urgent fixes we allow just one reviewer. >>> >>> Third, if a fix is cross-posted to (say) build-dev and 2d-dev, how do >>> you ensure it >>> gets both a build reviewer and a 2D reviewer's approval before >>> pushing ? That >>> is after all the point of the cross-posting. >>> >>> -phil. >>> >>> On 8/27/20, 10:37 AM, Joe Darcy wrote: >>>> Hello, >>>> >>>> The mapping of >>>> changed-file-to-OpenJDK-mailing-list(s)-to-review-the-file can be >>>> non-obvious, both to new contributors and to experienced >>>> contributors working in an unfamiliar area. If an automated mapping >>>> gets this 95+% correct, with the ability for manual tweaking, that >>>> strikes me as an overall improvement over the current situation. >>>> >>>> The current mapping has various entries that should be changed, but >>>> that is why it is being sent out for review before the Skara >>>> transition :-) >>>> >>>> As a general comment, I would expect both the mapping and other >>>> aspects of the Skara tooling to get updated in response to feedback >>>> after jdk/jdk moves over. >>>> >>>> -Joe >>>> >>>> On 8/27/2020 9:53 AM, Igor Ignatyev wrote: >>>>> Hi Robin, >>>>> >>>>> although I really like the idea of having mapping b/w files and >>>>> groups/components/subcomponents, I agree w/ David that in its >>>>> *current* form it's unworkable. having the mapping in Skara repo is >>>>> impractical, as it introduces additional overhead for maintenance, >>>>> not to speak of possible desynchronization. Thus I suggest moving >>>>> the mapping to jdk/jdk repo and updating Skara tooling accordingly. >>>>> >>>>> I also have a question regarding the format, why did you decide to >>>>> invent your own format instead of using CODEOWNER-like format which >>>>> fits the needs rather nicely and is used for similar purposes by >>>>> github and gitlab? >>>>> >>>>> Thanks, >>>>> -- Igor >>>>> >>>>>> On Aug 27, 2020, at 6:26 AM, David Holmes >>>>>> wrote: >>>>>> >>>>>> In all seriousness I just don't think this is a reasonable or >>>>>> necessary thing to do. When you create a PR you should specify the >>>>>> mailing lists to be used, as you do today with a RFR. Trying to >>>>>> maintain a file by file mapping is just a huge initial setup cost >>>>>> and a maintenance nightmare. It is not necessary to try and >>>>>> automate this IMO. >>>>>> >>>>>> I wish this intent had been flagged/discussed some time ago. :( >>>>>> >>>>>> David >>>>>> ----- >>>>>> >>>>>> On 27/08/2020 8:34 pm, Robin Westberg wrote: >>>>>>> Hi all, >>>>>>> As part of transitioning the jdk/jdk repository to Git with >>>>>>> project Skara, we have created a set of rules that determine >>>>>>> which mailing list(s) should be the default recipient of a review >>>>>>> request, depending on which files are changed. The initial >>>>>>> version of these rules was created by looking at historical >>>>>>> commits and matching them with existing mailing list review >>>>>>> threads. This has produced a reasonable basis, but it can most >>>>>>> certainly be made better with some additional manual curating. >>>>>>> Therefore, it would be very helpful if people with good knowledge >>>>>>> of the various subsystems and source files that make up the JDK >>>>>>> would be willing to take a look at these rules, and also suggest >>>>>>> improvements where needed. In addition, lists like [1] would also >>>>>>> be very useful insofar they exist. >>>>>>> The current version of these rules is located in a JSON file in >>>>>>> the Skara repository at [2]. In order to check the validity of >>>>>>> the rules, there is also a CLI tool that can be used to apply it >>>>>>> to either a subset of files or existing commits and produce a >>>>>>> suggestion [3] [4]. If you are interested in helping out with >>>>>>> curating these rules, these are the steps to get started: >>>>>>> 1. Install the Skara CLI tools: >>>>>>> https://wiki.openjdk.java.net/display/SKARA/CLI+Tools >>>>>>> 2. Locate a suitable clone of the jdk/jdk repository (either >>>>>>> Mercurial or Git is fine) >>>>>>> 3. Change (cd) to the root of your jdk/jdk repository >>>>>>> 3. Run the ?debug mlrules? command on your favorite subset of >>>>>>> files, for example like this (use the actual location of jdk.json >>>>>>> on your system): >>>>>>> $ git skara debug mlrules -v >>>>>>> ~/git/skara/config/mailinglist/rules/jdk.json src/hotspot/share/jfr/ >>>>>>> Reading rules file... >>>>>>> src/hotspot/share/jfr/dcmd: [hotspot-jfr-dev] >>>>>>> src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp: >>>>>>> [hotspot-jfr-dev] >>>>>>> src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.hpp: >>>>>>> [hotspot-jfr-dev] >>>>>>> src/hotspot/share/jfr/instrumentation/jfrJvmtiAgent.cpp: >>>>>>> [hotspot-jfr-dev, serviceability-dev] >>>>>>> ? >>>>>>> Final list suggestion is: [hotspot-jfr-dev, serviceability-dev] >>>>>>> The command accepts multiple folder and/or file names to make it >>>>>>> possible to simulate a potential change to a given set of files: >>>>>>> $ git skara debug mlrules -v >>>>>>> ../skara/config/mailinglist/rules/jdk.json doc/ide.md >>>>>>> src/hotspot/cpu/x86/x86.ad src/hotspot/os/linux/gc/z/zNUMA_linux.cpp >>>>>>> Reading rules file... >>>>>>> doc: [build-dev] >>>>>>> src/hotspot/cpu: [hotspot-compiler-dev] >>>>>>> src/hotspot/os: [hotspot-runtime-dev, hotspot-gc-dev] >>>>>>> Combined list suggestion: [build-dev, hotspot-compiler-dev, >>>>>>> hotspot-gc-dev, hotspot-runtime-dev] >>>>>>> Final list suggestion is: [build-dev, hotspot-dev] >>>>>>> If the suggestions look fine, all is well. If not, you are >>>>>>> welcome to propose a change to the rules, preferably by editing >>>>>>> the jdk.json file [6] and creating a pull request towards the >>>>>>> Skara project as described in [5]. Coincidentally, this is the >>>>>>> same way that future changes to the jdk/jdk repository will be >>>>>>> integrated, so this exercise could also serve as a way of getting >>>>>>> started with Git / Skara! >>>>>>> Best regards, >>>>>>> Robin >>>>>>> [1] https://openjdk.java.net/groups/2d/2dawtfiles.html >>>>>>> [2] >>>>>>> https://git.openjdk.java.net/skara/blob/master/config/mailinglist/rules/jdk.json >>>>>>> >>>>>>> [3] >>>>>>> $ git skara debug mlrules -v >>>>>>> ~/git/skara/config/mailinglist/rules/jdk.json >>>>>>> src/java.desktop/unix/native >>>>>>> Reading rules file... >>>>>>> src/java.desktop/unix/native/common: [2d-dev] >>>>>>> src/java.desktop/unix/native/include: [] >>>>>>> src/java.desktop/unix/native/libawt: [2d-dev] >>>>>>> src/java.desktop/unix/native/libawt_headless: [awt-dev] >>>>>>> src/java.desktop/unix/native/libawt_xawt: [awt-dev] >>>>>>> src/java.desktop/unix/native/libfontmanager: [2d-dev] >>>>>>> src/java.desktop/unix/native/libjawt: [awt-dev] >>>>>>> src/java.desktop/unix/native/libsplashscreen: [awt-dev] >>>>>>> Combined list suggestion: [2d-dev, awt-dev] >>>>>>> Final list suggestion is: [2d-dev, awt-dev] >>>>>>> [4] >>>>>>> $ git skara debug mlrules -d 30 -v >>>>>>> ~/git/skara/config/mailinglist/rules/jdk.json . >>>>>>> ... >>>>>>> ? [2d-dev, awt-dev, serviceability-dev] c32923e0: 8240487: >>>>>>> Cleanup whitespace in .cc, .hh, .m, and .mm files >>>>>>> ? [awt-dev] 7f74c7dd: 8212226: SurfaceManager throws "Invalid >>>>>>> Image variant" for MultiResolutionImage (Windows) >>>>>>> ???? Suggested lists: [2d-dev, awt-dev] >>>>>>> ???? Rules matching unmentioned lists [2d-dev]: >>>>>>> src/java.desktop/share/classes/sun/java2d/SunGraphics2D.java - >>>>>>> [2d-dev: ^src/java.desktop/share/classes/sun/java2d/] >>>>>>> ? >>>>>>> [5] https://wiki.openjdk.java.net/display/SKARA/Skara#Skara-Workflow >>>>>>> [6] >>>>>>> The rules are made up of sets of regular expressions for the >>>>>>> various mailing lists that are used for reviewing changes going >>>>>>> into the JDK. If any rule matches, that mailing list will get a >>>>>>> copy of the review request email. For directories containing >>>>>>> files that belong to different subsystems, it?s usually a good >>>>>>> idea to write the rules in a complementary fashion if possible, >>>>>>> so that anything not explicitly mentioned gets a reasonable >>>>>>> default. As an example, see these rules for a subset of awt / 2d >>>>>>> / i18n files: >>>>>>> ?awt-dev?: >>>>>>> "src/java.desktop/share/classes/sun/awt/(?!font|sunhints|color/|font/|geom/|im/|image/|print/)? >>>>>>> >>>>>>> ?2d-dev?: >>>>>>> "src/java.desktop/share/classes/sun/awt/(font|sunhints|color/|font/|geom/|image/|print/)" >>>>>>> >>>>>>> ?I18n-dev?: "src/java.desktop/share/classes/sun/awt/im/? >>>>>>> In this example, anything not explicitly indicated as belonging >>>>>>> to either 2d-dev or i18-dev will be matched by awt-dev. >>