S2. We’ve looked into this before, and it wasn’t possible at the time with
JUnit. We commonly set a timeout on each test class (especially integration
tests). It is probably worth looking at this again and seeing if something
has changed with JUnit (or our usage of it) that would allow a global
timeout.


S3. Dedicated infra sounds nice, if we can get it. It would at least remove
some variability between the builds, and hopefully eliminate the
infra/setup class of failures.


S4. Running tests for what has changed sounds nice, but I think it is risky
to implement broadly. As Sophie mentioned, there are probably some lines we
could draw where we feel confident that only running a subset of tests is
safe. As a start, we could probably work towards skipping CI for non-code
PRs.


---


As an aside, I experimented with build caching and running affected tests a
few months ago. I used the opportunity to play with Github Actions, and I
quite liked it. Here’s the workflow I used:
https://github.com/mumrah/kafka/blob/trunk/.github/workflows/push.yml. I
was trying to see if we could use a build cache to reduce the compilation
time on PRs. A nightly/periodic job would build trunk and populate a Gradle
build cache. PR builds would read from that cache which would enable them
to only compile changed code. The same idea could be extended to tests, but
I didn’t get that far.


As for Github Actions, the idea there is that ASF would provide generic
Action “runners” that would pick up jobs from the Github Action build queue
and run them. It is also possible to self-host runners to expand the build
capacity of the project (i.e., other organizations could donate
build capacity). The advantage of this is that we would have more control
over our build/reports and not be “stuck” with whatever ASF Jenkins offers.
The Actions workflows are very customizable and it would let us create our
own custom plugins. There is also a substantial marketplace of plugins. I
think it’s worth exploring this more, I just haven’t had time lately.

On Tue, Dec 26, 2023 at 3:24 PM Sophie Blee-Goldman <sop...@responsive.dev>
wrote:

> Regarding:
>
> S-4. Separate tests ran depending on what module is changed.
> >
> - This makes sense although is tricky to implement successfully, as
> > unrelated tests may expose problems in an unrelated change (e.g changing
> > core stuff like clients, the server, etc)
>
>
> Imo this avenue could provide a massive improvement to dev productivity
> with very little effort or investment, and if we do it right, without even
> any risk. We should be able to draft a simple dependency graph between
> modules and then skip the tests for anything that is clearly, provably
> unrelated and/or upstream of the target changes. This has the potential to
> substantially speed up and improve the developer experience in modules at
> the end of the dependency graph, which I believe is worth doing even if it
> unfortunately would not benefit everyone equally.
>
> For example, we can save a lot of grief with just a simple set of rules
> that are easy to check. I'll throw out a few to start with:
>
>    1. A pure docs PR (ie that only touches files under the docs/ directory)
>    should be allowed to skip the tests of all modules
>    2. Connect PRs (that only touch connect/) only need to run the Connect
>    tests -- ie they can skip the tests for core, clients, streams, etc
>    3. Similarly, Streams PRs should only need to run the Streams tests --
>    but again, only if all the changes are contained within streams/
>
> I'll let others chime in on how or if we can construct some safe rules as
> to which modules can or can't be skipped between the core, clients, raft,
> storage, etc
>
> And over time we could in theory build up a literal dependency graph on a
> more granular level so that, for example, changes to the core/storage
> module are allowed to skip any Streams tests that don't use an embedded
> broker, ie all unit tests and TopologyTestDriver-based integration tests.
> The danger here would be in making sure this graph is kept up to date as
> tests are added and changed, but my point is just that there's a way to
> extend the benefit of this tactic to those who work primarily on the core
> module as well. Personally, I think we should just start out with the
> example ruleset listed above, workshop it a bit since there might be other
> obvious rules I left out, and try to implement it.
>
> Thoughts?
>
> On Tue, Dec 26, 2023 at 2:25 AM Stanislav Kozlovski
> <stanis...@confluent.io.invalid> wrote:
>
> > Great discussion!
> >
> >
> > Greg, that was a good call out regarding the two long-running builds. I
> > missed that 90d view.
> >
> > My takeaway from that is that our average build time for tests is between
> > 3-4 hours. Which in of itself seems large.
> >
> > But then reconciling this with Sophie's statement - is it possible that
> > these timed-out 8-hour builds don't get captured in that view?
> >
> > It is weird that people are reporting these things and Gradle Enterprise
> > isn't showing them.
> >
> > ---
> >
> > > I think that these particularly nasty builds could be explained by
> > long-tail slowdowns causing arbitrary tests to take an excessive time to
> > execute.
> >
> > I'm not sure I understood that. If the tests have timeouts, where would
> the
> > slowdown come from? Problems in tearing down the test?
> >
> > ---
> >
> > David, thanks for the great work in identifying and even fixing those two
> > top offenders! And thank you for cherry-picking to 3.7
> >
> > --
> >
> > All in all, from this thread I can summarize a few potential solutions:
> >
> > S-1. Dedicated work identifying and fixing some of the issues (e.g. what
> > David did).
> > - Should help alleviate the issues as it can be speculated that it's
> > frequently 1 or 2 tests causing the majority of issues.
> > - With regards to that, KAFKA-16045 seems open for taking if there are
> any
> > volunteers
> > - Sophie's list also contains good candidates
> >
> > S-2. Global 10-minute timeout for tests.
> > - Should lay the foundation for a strong catch-all for any misbehaving
> > tests. I like this idea since it's guaranteed to save each contributor
> many
> > hours of waiting for an 8hr+ time out build.
> > - Luke already has a PR out for this:
> > https://github.com/apache/kafka/pull/15065
> >
> > S-3. Separate infrastructure for our CI
> > - This would help with Greg's comment about the developer machine being
> > 2-20 times faster than the CI.
> > - Requires volunteer funding from external companies. If every
> contributor
> > would bring up the idea with their employer, we may be able to stitch
> > something together.
> >
> > S-4. Separate tests ran depending on what module is changed.
> > - This makes sense although is tricky to implement successfully, as
> > unrelated tests may expose problems in an unrelated change (e.g changing
> > core stuff like clients, the server, etc)
> >
> > S-5. Greater committer diligence when merging PRs
> > - This should always be there. Unfortunately it is a bit of a
> > self-perpetuating effect in that when the builds get worse, people are
> > incentivized to be less diligent (slowed down while in a rush to merge,
> > recency bias of failed builds, etc.)
> >
> > On Fri, Dec 22, 2023 at 4:16 PM Justine Olshan
> > <jols...@confluent.io.invalid>
> > wrote:
> >
> > > Thanks David! I think this should help a lot!
> > >
> > > While we should include these improvements, I think it is also good to
> > > remind folks that a lot of these issues come from merging on builds
> that
> > > regress the CI.
> > > I know I'm not perfect at this (and have merged on flaky and failing
> > > tests), but let's all be super careful going forward. There were a few
> > > times I retried the build 10+ times and thought it was other issues
> with
> > > the CI but the failed builds were actually due to the changes I
> wrote/was
> > > reviewing.
> > >
> > > We all need to work together on this to ensure the builds stay healthy!
> > > Thanks all for being concerned about our builds!
> > >
> > > Justine
> > >
> > > On Fri, Dec 22, 2023 at 6:02 AM David Jacot <david.ja...@gmail.com>
> > wrote:
> > >
> > > > I just merged both PRs.
> > > >
> > > > Cheers,
> > > > David
> > > >
> > > > Le ven. 22 déc. 2023 à 14:38, David Jacot <david.ja...@gmail.com> a
> > > écrit
> > > > :
> > > >
> > > > > Hey folks,
> > > > >
> > > > > I believe that my two PRs will fix most of the issues. I have also
> > > > tweaked
> > > > > the configuration of Jenkins to fix the issues relating to cloning
> > the
> > > > > repo. There may be other issues but the overall situation should be
> > > much
> > > > > better when I merge those two.
> > > > >
> > > > > I will update this thread when I merge them.
> > > > >
> > > > > Cheers,
> > > > > David
> > > > >
> > > > > Le ven. 22 déc. 2023 à 14:22, Divij Vaidya <
> divijvaidy...@gmail.com>
> > a
> > > > > écrit :
> > > > >
> > > > >> Hey folks
> > > > >>
> > > > >> I think David (dajac) has some fixes lined-up to improve CI such
> as
> > > > >> https://github.com/apache/kafka/pull/15063 and
> > > > >> https://github.com/apache/kafka/pull/15062.
> > > > >>
> > > > >> I have some bandwidth for the next two days to work on fixing the
> > CI.
> > > > Let
> > > > >> me start by taking a look at the list that Sophie shared here.
> > > > >>
> > > > >> --
> > > > >> Divij Vaidya
> > > > >>
> > > > >>
> > > > >>
> > > > >> On Fri, Dec 22, 2023 at 2:05 PM Luke Chen <show...@gmail.com>
> > wrote:
> > > > >>
> > > > >> > Hi Sophie and Philip and all,
> > > > >> >
> > > > >> > I share the same pain as you.
> > > > >> > I've been waiting for a CI build result in a PR for days.
> > > > >> Unfortunately, I
> > > > >> > can only get 1 result each day because it takes 8 hours for each
> > > run,
> > > > >> and
> > > > >> > with failed results. :(
> > > > >> >
> > > > >> > I've looked into the 8 hour timeout build issue and would like
> to
> > > > >> propose
> > > > >> > to set a global test timeout as 10 mins using the junit5 feature
> > > > >> > <
> > > > >> >
> > > > >>
> > > >
> > >
> >
> https://junit.org/junit5/docs/current/user-guide/#writing-tests-declarative-timeouts-default-timeouts
> > > > >> > >
> > > > >> > .
> > > > >> > This way, we can fail those long running tests quickly without
> > > > impacting
> > > > >> > other tests.
> > > > >> > PR: https://github.com/apache/kafka/pull/15065
> > > > >> > I've tested in my local environment and it works as expected.
> > > > >> >
> > > > >> > Any feedback is welcome.
> > > > >> >
> > > > >> > Thanks.
> > > > >> > Luke
> > > > >> >
> > > > >> > On Fri, Dec 22, 2023 at 8:08 AM Philip Nee <philip...@gmail.com
> >
> > > > wrote:
> > > > >> >
> > > > >> > > Hey Sophie - I've gotten 2 inflight PRs each with more than 15
> > > > >> retries...
> > > > >> > > Namely: https://github.com/apache/kafka/pull/15023 and
> > > > >> > > https://github.com/apache/kafka/pull/15035
> > > > >> > >
> > > > >> > > justin filed a flaky test report here though:
> > > > >> > > https://issues.apache.org/jira/browse/KAFKA-16045
> > > > >> > >
> > > > >> > > P
> > > > >> > >
> > > > >> > > On Thu, Dec 21, 2023 at 3:18 PM Sophie Blee-Goldman <
> > > > >> > sop...@responsive.dev
> > > > >> > > >
> > > > >> > > wrote:
> > > > >> > >
> > > > >> > > > On a related note, has anyone else had trouble getting even
> a
> > > > single
> > > > >> > run
> > > > >> > > > with no build failures lately? I've had multiple pure-docs
> PRs
> > > > >> blocked
> > > > >> > > for
> > > > >> > > > days or even weeks because of miscellaneous infra, test, and
> > > > timeout
> > > > >> > > > failures. I know we just had a discussion about whether it's
> > > > >> acceptable
> > > > >> > > to
> > > > >> > > > ever merge with a failing build, and the consensus (which I
> > > agree
> > > > >> with)
> > > > >> > > was
> > > > >> > > > NO -- but seriously, this is getting ridiculous. The build
> > might
> > > > be
> > > > >> the
> > > > >> > > > worst I've ever seen it, and it just makes it really
> difficult
> > > to
> > > > >> > > maintain
> > > > >> > > > good will with external contributors.
> > > > >> > > >
> > > > >> > > > Take for example this small docs PR:
> > > > >> > > > https://github.com/apache/kafka/pull/14949
> > > > >> > > >
> > > > >> > > > It's on its 7th replay, with the first 6 runs all having (at
> > > > least)
> > > > >> one
> > > > >> > > > build that failed completely. The issues I saw on this one
> PR
> > > are
> > > > a
> > > > >> > good
> > > > >> > > > summary of what I've been seeing elsewhere, so here's the
> > > > briefing:
> > > > >> > > >
> > > > >> > > > 1. gradle issue:
> > > > >> > > >
> > > > >> > > > > * What went wrong:
> > > > >> > > > >
> > > > >> > > > > Gradle could not start your build.
> > > > >> > > > >
> > > > >> > > > > > Cannot create service of type BuildSessionActionExecutor
> > > using
> > > > >> > method
> > > > >> > > > >
> > > > >> > >
> > > > >>
> > >
> LauncherServices$ToolingBuildSessionScopeServices.createActionExecutor()
> > > > >> > > > as
> > > > >> > > > > there is a problem with parameter #21 of type
> > > > >> > > > FileSystemWatchingInformation.
> > > > >> > > > >
> > > > >> > > > >    > Cannot create service of type
> > > > >> > BuildLifecycleAwareVirtualFileSystem
> > > > >> > > > > using method
> > > > >> > > > >
> > > > >> > > >
> > > > >> > >
> > > > >> >
> > > > >>
> > > >
> > >
> >
> VirtualFileSystemServices$GradleUserHomeServices.createVirtualFileSystem()
> > > > >> > > > > as there is a problem with parameter #7 of type
> > > > >> GlobalCacheLocations.
> > > > >> > > > >       > Cannot create service of type GlobalCacheLocations
> > > using
> > > > >> > method
> > > > >> > > > > GradleUserHomeScopeServices.createGlobalCacheLocations()
> as
> > > > there
> > > > >> is
> > > > >> > a
> > > > >> > > > > problem with parameter #1 of type List<GlobalCache>.
> > > > >> > > > >          > Could not create service of type
> > > > FileAccessTimeJournal
> > > > >> > using
> > > > >> > > > > GradleUserHomeScopeServices.createFileAccessTimeJournal().
> > > > >> > > > >             > Timeout waiting to lock journal cache
> > > > >> > > > > (/home/jenkins/.gradle/caches/journal-1). It is currently
> in
> > > use
> > > > >> by
> > > > >> > > > another
> > > > >> > > > > Gradle instance.
> > > > >> > > > >
> > > > >> > > >
> > > > >> > > > 2. git issue:
> > > > >> > > >
> > > > >> > > > > ERROR: Error cloning remote repo 'origin'
> > > > >> > > > > hudson.plugins.git.GitException: java.io.IOException:
> Remote
> > > > call
> > > > >> on
> > > > >> > > > > builds43 failed
> > > > >> > > >
> > > > >> > > >
> > > > >> > > > 3. storage test calling System.exit (I think)
> > > > >> > > >
> > > > >> > > > > * What went wrong:
> > > > >> > > > >  Execution failed for task ':storage:test'.
> > > > >> > > > >  > Process 'Gradle Test Executor 73' finished with
> non-zero
> > > exit
> > > > >> > value
> > > > >> > > 1
> > > > >> > > >
> > > > >> > > >     This problem might be caused by incorrect test process
> > > > >> > configuration.
> > > > >> > > >
> > > > >> > > >
> > > > >> > > > 4.  3/4 builds aborted suddenly for no clear reason
> > > > >> > > >
> > > > >> > > > 5. 1 build was aborted, 1 build failed due to a gradle(?)
> > issue
> > > > >> with a
> > > > >> > > > storage test:
> > > > >> > > >
> > > > >> > > > Failed to map supported failure
> > > > >> 'org.opentest4j.AssertionFailedError:
> > > > >> > > > > Failed to observe commit callback before timeout' with
> > mapper
> > > > >> > > > >
> > > > >> > > >
> > > > >> > >
> > > > >> >
> > > > >>
> > > >
> > >
> >
> 'org.gradle.api.internal.tasks.testing.failure.mappers.OpenTestAssertionFailedMapper@38bb78ea
> > > > >> > > > ':
> > > > >> > > > > null
> > > > >> > > >
> > > > >> > > >
> > > > >> > > >
> > > > >> > > > * What went wrong:
> > > > >> > > > > Execution failed for task ':storage:test'.
> > > > >> > > > > > Process 'Gradle Test Executor 73' finished with non-zero
> > > exit
> > > > >> > value 1
> > > > >> > > > >   This problem might be caused by incorrect test process
> > > > >> > configuration.
> > > > >> > > > >
> > > > >> > > >
> > > > >> > > > 6.  Unknown issue with a core test:
> > > > >> > > >
> > > > >> > > > > Unexpected exception thrown.
> > > > >> > > > > org.gradle.internal.remote.internal.MessageIOException:
> > Could
> > > > not
> > > > >> > read
> > > > >> > > > > message from '/127.0.0.1:46952'.
> > > > >> > > > >   at
> > > > >> > > > >
> > > > >> > > >
> > > > >> > >
> > > > >> >
> > > > >>
> > > >
> > >
> >
> org.gradle.internal.remote.internal.inet.SocketConnection.receive(SocketConnection.java:94)
> > > > >> > > > >   at
> > > > >> > > > >
> > > > >> > > >
> > > > >> > >
> > > > >> >
> > > > >>
> > > >
> > >
> >
> org.gradle.internal.remote.internal.hub.MessageHub$ConnectionReceive.run(MessageHub.java:270)
> > > > >> > > > >   at
> > > > >> > > > >
> > > > >> > > >
> > > > >> > >
> > > > >> >
> > > > >>
> > > >
> > >
> >
> org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
> > > > >> > > > >   at
> > > > >> > > > >
> > > > >> > > >
> > > > >> > >
> > > > >> >
> > > > >>
> > > >
> > >
> >
> org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
> > > > >> > > > >   at
> > > > >> > > > >
> > > > >> > > >
> > > > >> > >
> > > > >> >
> > > > >>
> > > >
> > >
> >
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
> > > > >> > > > >   at
> > > > >> > > > >
> > > > >> > > >
> > > > >> > >
> > > > >> >
> > > > >>
> > > >
> > >
> >
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
> > > > >> > > > >   at java.base/java.lang.Thread.run(Thread.java:1583)
> > > > >> > > > > Caused by: java.lang.IllegalArgumentException
> > > > >> > > > >   at
> > > > >> > > > >
> > > > >> > > >
> > > > >> > >
> > > > >> >
> > > > >>
> > > >
> > >
> >
> org.gradle.internal.remote.internal.hub.InterHubMessageSerializer$MessageReader.read(InterHubMessageSerializer.java:72)
> > > > >> > > > >   at
> > > > >> > > > >
> > > > >> > > >
> > > > >> > >
> > > > >> >
> > > > >>
> > > >
> > >
> >
> org.gradle.internal.remote.internal.hub.InterHubMessageSerializer$MessageReader.read(InterHubMessageSerializer.java:52)
> > > > >> > > > >   at
> > > > >> > > > >
> > > > >> > > >
> > > > >> > >
> > > > >> >
> > > > >>
> > > >
> > >
> >
> org.gradle.internal.remote.internal.inet.SocketConnection.receive(SocketConnection.java:81)
> > > > >> > > > > ... 6 more
> > > > >> > > > > org.gradle.internal.remote.internal.ConnectException:
> Could
> > > not
> > > > >> > connect
> > > > >> > > > to
> > > > >> > > > > server [1d62bf97-6a3e-441d-93b6-093617cbbea9 port:41289,
> > > > >> addresses:[/
> > > > >> > > > > 127.0.0.1]]. Tried addresses: [/127.0.0.1].
> > > > >> > > > >   at
> > > > >> > > > >
> > > > >> > > >
> > > > >> > >
> > > > >> >
> > > > >>
> > > >
> > >
> >
> org.gradle.internal.remote.internal.inet.TcpOutgoingConnector.connect(TcpOutgoingConnector.java:67)
> > > > >> > > > >   at
> > > > >> > > > >
> > > > >> > > >
> > > > >> > >
> > > > >> >
> > > > >>
> > > >
> > >
> >
> org.gradle.internal.remote.internal.hub.MessageHubBackedClient.getConnection(MessageHubBackedClient.java:36)
> > > > >> > > > >   at
> > > > >> > > > >
> > > > >> > > >
> > > > >> > >
> > > > >> >
> > > > >>
> > > >
> > >
> >
> org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:103)
> > > > >> > > > >   at
> > > > >> > > > >
> > > > >> > > >
> > > > >> > >
> > > > >> >
> > > > >>
> > > >
> > >
> >
> org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)
> > > > >> > > > >   at
> > > > >> > > > >
> > > > >> > > >
> > > > >> > >
> > > > >> >
> > > > >>
> > > >
> > >
> >
> worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
> > > > >> > > > >   at
> > > > >> > > > >
> > > > >> > > >
> > > > >> > >
> > > > >> >
> > > > >>
> > > >
> > >
> >
> worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
> > > > >> > > > > Caused by: java.net.ConnectException: Connection refused
> > > > >> > > > >   at java.base/sun.nio.ch.Net.pollConnect(Native Method)
> > > > >> > > > >   at java.base/sun.nio.ch.Net
> .pollConnectNow(Net.java:682)
> > > > >> > > > >   at
> > > > >> > > > > java.base/sun.nio.ch
> > > > >> > > >
> > > .SocketChannelImpl.finishTimedConnect(SocketChannelImpl.java:1191)
> > > > >> > > > >   at
> > > > >> > > > > java.base/sun.nio.ch
> > > > >> > > >
> > .SocketChannelImpl.blockingConnect(SocketChannelImpl.java:1233)
> > > > >> > > > >   at java.base/sun.nio.ch
> > > > >> > > .SocketAdaptor.connect(SocketAdaptor.java:102)
> > > > >> > > > >   at
> > > > >> > > > >
> > > > >> > > >
> > > > >> > >
> > > > >> >
> > > > >>
> > > >
> > >
> >
> org.gradle.internal.remote.internal.inet.TcpOutgoingConnector.tryConnect(TcpOutgoingConnector.java:81)
> > > > >> > > > >   at
> > > > >> > > > >
> > > > >> > > >
> > > > >> > >
> > > > >> >
> > > > >>
> > > >
> > >
> >
> org.gradle.internal.remote.internal.inet.TcpOutgoingConnector.connect(TcpOutgoingConnector.java:54)
> > > > >> > > > > ... 5 more
> > > > >> > > > >
> > > > >> > > >
> > > > >> > > >
> > > > >> > > >
> > > > >> > > > >  * What went wrong:
> > > > >> > > >
> > > > >> > > > Execution failed for task ':core:test'.
> > > > >> > > >
> > > > >> > > > > Process 'Gradle Test Executor 104' finished with non-zero
> > exit
> > > > >> value
> > > > >> > 1
> > > > >> > > >
> > > > >> > > >   This problem might be caused by incorrect test process
> > > > >> configuration.
> > > > >> > > >
> > > > >> > > >
> > > > >> > > > I've seen almost all of the above issues multiple times, so
> it
> > > > might
> > > > >> > be a
> > > > >> > > > good list to start with to focus any efforts on improving
> the
> > > > build.
> > > > >> > That
> > > > >> > > > said, I'm not sure what we can really do about most of
> these,
> > > and
> > > > >> not
> > > > >> > > sure
> > > > >> > > > how to narrow down the root cause in the more mysterious
> cases
> > > of
> > > > >> > aborted
> > > > >> > > > builds and the builds that end with "finished with non-zero
> > exit
> > > > >> value
> > > > >> > 1
> > > > >> > > "
> > > > >> > > > with no additional context (that I could find)
> > > > >> > > >
> > > > >> > > > If nothing else, there seems to be something happening in
> one
> > > (or
> > > > >> more)
> > > > >> > > of
> > > > >> > > > the storage tests, because by far the most common failure
> I've
> > > > seen
> > > > >> is
> > > > >> > > that
> > > > >> > > > in 3 & 5. Unfortunately it's not really clear to me how to
> > tell
> > > > >> which
> > > > >> > is
> > > > >> > > > the offending test, so I'm not even sure what to file a
> ticket
> > > for
> > > > >> > > >
> > > > >> > > > On Tue, Dec 19, 2023 at 11:55 PM David Jacot
> > > > >> > <dja...@confluent.io.invalid
> > > > >> > > >
> > > > >> > > > wrote:
> > > > >> > > >
> > > > >> > > > > The slowness of the CI is definitely causing us a lot of
> > > pain. I
> > > > >> > wonder
> > > > >> > > > if
> > > > >> > > > > we should move to a dedicated CI infrastructure for Kafka.
> > Our
> > > > >> > > > integration
> > > > >> > > > > tests are quite heavy and ASF's CI is not really tuned for
> > > them.
> > > > >> We
> > > > >> > > could
> > > > >> > > > > tune it for our needs and this would also allow external
> > > > >> companies to
> > > > >> > > > > sponsor more workers. I heard that we have a few cloud
> > > providers
> > > > >> in
> > > > >> > > > > the community ;). I think that we should consider this.
> What
> > > do
> > > > >> you
> > > > >> > > > think?
> > > > >> > > > > I already discussed this with the INFRA team. I could
> > continue
> > > > if
> > > > >> we
> > > > >> > > > > believe that it is a way forward.
> > > > >> > > > >
> > > > >> > > > > Best,
> > > > >> > > > > David
> > > > >> > > > >
> > > > >> > > > > On Wed, Dec 20, 2023 at 12:17 AM Stanislav Kozlovski
> > > > >> > > > > <stanis...@confluent.io.invalid> wrote:
> > > > >> > > > >
> > > > >> > > > > > Hey Николай,
> > > > >> > > > > >
> > > > >> > > > > > Apologies about this - I wasn't aware of this behavior.
> I
> > > have
> > > > >> made
> > > > >> > > all
> > > > >> > > > > the
> > > > >> > > > > > gists public.
> > > > >> > > > > >
> > > > >> > > > > >
> > > > >> > > > > >
> > > > >> > > > > > On Wed, Dec 20, 2023 at 12:09 AM Greg Harris
> > > > >> > > > > <greg.har...@aiven.io.invalid
> > > > >> > > > > > >
> > > > >> > > > > > wrote:
> > > > >> > > > > >
> > > > >> > > > > > > Hey Stan,
> > > > >> > > > > > >
> > > > >> > > > > > > Thanks for opening the discussion. I haven't been
> > looking
> > > at
> > > > >> > > overall
> > > > >> > > > > > > build duration recently, so it's good that you are
> > calling
> > > > it
> > > > >> > out.
> > > > >> > > > > > >
> > > > >> > > > > > > I worry about us over-indexing on this one build,
> which
> > > > itself
> > > > >> > > > appears
> > > > >> > > > > > > to be an outlier. I only see one other build [1] above
> > 6h
> > > > >> overall
> > > > >> > > in
> > > > >> > > > > > > the last 90 days in this view: [2]
> > > > >> > > > > > > And I don't see any overlap of failed tests in these
> two
> > > > >> builds,
> > > > >> > > > which
> > > > >> > > > > > > makes it less likely that these particular failed
> tests
> > > are
> > > > >> the
> > > > >> > > > causes
> > > > >> > > > > > > of long build times.
> > > > >> > > > > > >
> > > > >> > > > > > > Separately, I've been investigating build environment
> > > > >> slowness,
> > > > >> > and
> > > > >> > > > > > > trying to connect it with test failures [3]. I
> observed
> > > that
> > > > >> the
> > > > >> > CI
> > > > >> > > > > > > build environment is 2-20 times slower than my
> developer
> > > > >> machine
> > > > >> > > (M1
> > > > >> > > > > > > mac).
> > > > >> > > > > > > When I simulate a similar slowdown locally, there are
> > > tests
> > > > >> which
> > > > >> > > > > > > become significantly more flakey, often due to
> > hard-coded
> > > > >> > timeouts.
> > > > >> > > > > > > I think that these particularly nasty builds could be
> > > > >> explained
> > > > >> > by
> > > > >> > > > > > > long-tail slowdowns causing arbitrary tests to take an
> > > > >> excessive
> > > > >> > > time
> > > > >> > > > > > > to execute.
> > > > >> > > > > > >
> > > > >> > > > > > > Rather than trying to find signals in these rare test
> > > > >> failures, I
> > > > >> > > > > > > think we should find tests that have these sorts of
> > > failures
> > > > >> more
> > > > >> > > > > > > regularly.
> > > > >> > > > > > > There are lots of builds in the 5-6h duration bracket,
> > > which
> > > > >> is
> > > > >> > > > > > > certainly unacceptably long. We should look into these
> > > > builds
> > > > >> to
> > > > >> > > find
> > > > >> > > > > > > improvements and optimizations.
> > > > >> > > > > > >
> > > > >> > > > > > > [1] https://ge.apache.org/s/ygh4gbz4uma6i/
> > > > >> > > > > > > [2]
> > > > >> > > > > > >
> > > > >> > > > > >
> > > > >> > > > >
> > > > >> > > >
> > > > >> > >
> > > > >> >
> > > > >>
> > > >
> > >
> >
> https://ge.apache.org/scans?list.sortColumn=buildDuration&search.relativeStartTime=P90D&search.rootProjectNames=kafka&search.tags=trunk&search.timeZoneId=America%2FNew_York
> > > > >> > > > > > > [3] https://github.com/apache/kafka/pull/15008
> > > > >> > > > > > >
> > > > >> > > > > > > Thanks for looking into this!
> > > > >> > > > > > > Greg
> > > > >> > > > > > >
> > > > >> > > > > > > On Tue, Dec 19, 2023 at 3:45 PM Николай Ижиков <
> > > > >> > > nizhi...@apache.org>
> > > > >> > > > > > > wrote:
> > > > >> > > > > > > >
> > > > >> > > > > > > > Hello, Stanislav.
> > > > >> > > > > > > >
> > > > >> > > > > > > > Can you, please, make the gist public.
> > > > >> > > > > > > > Private gists not available for some GitHub users
> even
> > > if
> > > > >> link
> > > > >> > > are
> > > > >> > > > > > known.
> > > > >> > > > > > > >
> > > > >> > > > > > > > > 19 дек. 2023 г., в 17:33, Stanislav Kozlovski <
> > > > >> > > > > > stanis...@confluent.io.INVALID>
> > > > >> > > > > > > написал(а):
> > > > >> > > > > > > > >
> > > > >> > > > > > > > > Hey everybody,
> > > > >> > > > > > > > > I've heard various complaints that build times in
> > > trunk
> > > > >> are
> > > > >> > > > taking
> > > > >> > > > > > too
> > > > >> > > > > > > > > long, some taking as much as 8 hours (the
> timeout) -
> > > and
> > > > >> this
> > > > >> > > is
> > > > >> > > > > > > slowing us
> > > > >> > > > > > > > > down from being able to meet the code freeze
> > deadline
> > > > for
> > > > >> > 3.7.
> > > > >> > > > > > > > >
> > > > >> > > > > > > > > I took it upon myself to gather up some data in
> > Gradle
> > > > >> > > Enterprise
> > > > >> > > > > to
> > > > >> > > > > > > see if
> > > > >> > > > > > > > > there are any outlier tests that are causing this
> > > > >> slowness.
> > > > >> > > Turns
> > > > >> > > > > out
> > > > >> > > > > > > there
> > > > >> > > > > > > > > are a few, in this particular build -
> > > > >> > > > > > > https://ge.apache.org/s/un2hv7n6j374k/
> > > > >> > > > > > > > > - which took 10 hours and 29 minutes in total.
> > > > >> > > > > > > > >
> > > > >> > > > > > > > > I have compiled the tests that took a
> > > disproportionately
> > > > >> > large
> > > > >> > > > > amount
> > > > >> > > > > > > of
> > > > >> > > > > > > > > time (20m+), alongside their time, error message
> > and a
> > > > >> link
> > > > >> > to
> > > > >> > > > > their
> > > > >> > > > > > > full
> > > > >> > > > > > > > > log output here -
> > > > >> > > > > > > > >
> > > > >> > > > > > >
> > > > >> > > > > >
> > > > >> > > > >
> > > > >> > > >
> > > > >> > >
> > > > >> >
> > > > >>
> > > >
> > >
> >
> https://gist.github.com/stanislavkozlovski/8959f7ee59434f774841f4ae2f5228c2
> > > > >> > > > > > > > >
> > > > >> > > > > > > > > It includes failures from core, streams, storage
> and
> > > > >> clients.
> > > > >> > > > > > > > > Interestingly, some other tests that don't fail
> also
> > > > take
> > > > >> a
> > > > >> > > long
> > > > >> > > > > time
> > > > >> > > > > > > in
> > > > >> > > > > > > > > what is apparently the test harness framework. See
> > the
> > > > >> gist
> > > > >> > for
> > > > >> > > > > more
> > > > >> > > > > > > > > information.
> > > > >> > > > > > > > >
> > > > >> > > > > > > > > I am starting this thread with the intention of
> > > getting
> > > > >> the
> > > > >> > > > > > discussion
> > > > >> > > > > > > > > started and brainstorming what we can do to get
> the
> > > > build
> > > > >> > times
> > > > >> > > > > back
> > > > >> > > > > > > under
> > > > >> > > > > > > > > control.
> > > > >> > > > > > > > >
> > > > >> > > > > > > > >
> > > > >> > > > > > > > > --
> > > > >> > > > > > > > > Best,
> > > > >> > > > > > > > > Stanislav
> > > > >> > > > > > > >
> > > > >> > > > > > >
> > > > >> > > > > >
> > > > >> > > > > >
> > > > >> > > > > > --
> > > > >> > > > > > Best,
> > > > >> > > > > > Stanislav
> > > > >> > > > > >
> > > > >> > > > >
> > > > >> > > >
> > > > >> > >
> > > > >> >
> > > > >>
> > > > >
> > > >
> > >
> >
> >
> > --
> > Best,
> > Stanislav
> >
>


-- 
-David

Reply via email to