On 12/14/2016 11:22 AM, Martin Buchholz wrote:


On Mon, Nov 28, 2016 at 4:50 PM, Joseph D. Darcy <joe.da...@oracle.com <mailto:joe.da...@oracle.com>> wrote:

    On 11/28/2016 3:30 PM, Martin Buchholz wrote:

        As an aside, for JDK 10 I'd also like to see promoted builds
        on a more frequent schedule than once a week.


    People do "continuous testing and integration" these days.  Set
    up your integration pipeline so that it is always running.  The
    pipeline automatically promotes changesets to master when all
    tests pass.  Easy!  Then every master changeset is equally stable
    to a "promoted build".

    One of the internal systems mentioned above is a CI system that
    run regression tests after a change is pushed. The approximate
    integration model is then to promote known-good states of sources
    as vetted by the CI system.

    If problems are fixed soon after they are identified, then a
    post-push system gives good results with avoiding the need more
    complexity on the front end to manage a series of in-flight patches.


A CI system available to every committer that would guarantee no regressions would be awesome!

I fundamentally do not believe in post-submit testing. I want to be protected from my own mistakes and those of others. Google has also moved towards doing more presubmit testing.

For large low-level infrastructure projects like openjdk, I envision different layers of testing. The first layer would run e.g. the jtreg and jck tests, perhaps on a distributed test farm. A second layer might run publicly available java test suites that would be too expensive to run in a first layer. Promotion to a "golden master" might be dependent on passing tests in the second layer. Of course, that would be a serious investment in testing/quality.

The tiered testing efforts made earlier in JDK 9 [1] are necessary preconditions for a JDK-wide pre-push/pre-submit system. In particular, if you don't have a a set of meaningful tests that runs quickly enough and passes reliably enough then a pre-push system can cause more harm than good in introducing bottlenecks and causing changes to be spuriously rejected, say by an existing intermittent failure unrelated to the change.

If the testing preconditions are met, there is still the small matter of the submission system managing the queues, perhaps some with kind of scoreboarding algorithm (https://en.wikipedia.org/wiki/Scoreboarding) to reduce latencies, etc.

In the meantime, I think post-push testing and prompt fixing is a fine approximation to pre-push testing and something we can (continue to) do now.

Independent of pre-push or post-push, the most important aspect of this is making sure everyone treats build and test failures as urgent problems that need to be addressed quickly.

Cheers,

-Joe

[1] "Proposed new policies for JDK 9 regression tests: tiered testing, intermittent failures, and randomness,"
http://mail.openjdk.java.net/pipermail/jdk9-dev/2015-March/001991.html

“Proposed new policies for JDK 9 regression tests: tiered testing, intermittent failures, and randomness,”
http://mail.openjdk.java.net/pipermail/jdk9-dev/2015-April/002164.html

“Test policy follow-up, third testing tier,”
http://mail.openjdk.java.net/pipermail/jdk9-dev/2015-June/002325.html

Reply via email to