No, otherwise it wouldnt pass in idea and maven. Le 19 avr. 2018 00:57, "Kenneth Knowles" <k...@google.com> a écrit :
Does the test think a thread leaked when no thread leaked? On Wed, Apr 18, 2018 at 1:51 PM Romain Manni-Bucau <rmannibu...@gmail.com> wrote: > The leaking threadq are already dumped but we dont track who created it > > Le 18 avr. 2018 22:50, "Kenneth Knowles" <k...@google.com> a écrit : > >> For this particular test, is it failing because a different test class >> leaked threads? Is there a way to make something like a testing base class >> with @Before and @After actions that would catch the leak closer to where >> it happened? A quick search found this: https://github.com/ >> elastic/elasticsearch-mapper-attachments/issues/88 but if that doesn't >> apply maybe something else does. The very best thing is probably to use a >> dynamic analysis since it is not very practical to unit test for leaks >> (thread, memory, file handle, whatever) and other global correctness >> criteria. >> >> Kenn >> >> On Wed, Apr 18, 2018 at 10:13 AM Romain Manni-Bucau < >> rmannibu...@gmail.com> wrote: >> >>> >>> >>> Le 18 avr. 2018 18:53, "Scott Wegner" <sweg...@google.com> a écrit : >>> >>> I wanted to provide some additional information about this issue and >>> Gradle test configuration. >>> >>> For context, BEAM-4088 [1] refers to a new test on PR/4965 [2] which >>> verifies that no threads are being leaked. Under Maven the test passes, but >>> under Gradle it reports leaked threads [3]. >>> >>> I'm not familiar with this test's logic, but presumably some differences >>> in test isolation are causing the failures. In Gradle, test classes are >>> executed in parallel in forked VMs, and those VMs are reused between test >>> classes. This configuration optimizes for execution time, but can break if >>> tests are not well isolated. >>> >>> When a test fails in this configuration, the first step should be to >>> understand why it fails and see if the test can be implemented with >>> better isolation. Barring that, we can update the execution parameters at >>> the project level for stronger sandboxing at the cost of longer execution >>> time. In Gradle, this is done by setting maxParallelForks [4] and forkEvery >>> [5] options on the Test task. >>> >>> >>> I dont know, first of all no hardcoded value must be in any build file >>> until required. A required case can be "fork and dont reuse the forks" >>> cause this IO is known as leaking. >>> >>> MaxFork and forEvery are about forks. >>> The test works if it runs alone in a fork until another test execution >>> leaked and still runs. >>> >>> Killing the daemon can help (and is a good practise on the CI), maybe >>> worth a try. >>> >>> We can also fork a thread for rhis particular test bit it just hides a >>> nasty bug so probably not worth it. >>> >>> >>> [1] https://issues.apache.org/jira/browse/BEAM-4088 >>> [2] https://github.com/apache/beam/pull/4965 >>> [3] https://scans.gradle.com/s/grha56432j3t2/tests/ >>> jqhvlvf72f7pg-ipde5etqqejoa?openStackTraces=WzBd >>> [4] https://docs.gradle.org/current/dsl/org.gradle.api. >>> tasks.testing.Test.html#org.gradle.api.tasks.testing.Test: >>> maxParallelForks >>> [5] https://docs.gradle.org/current/dsl/org.gradle.api. >>> tasks.testing.Test.html#org.gradle.api.tasks.testing.Test:forkEvery >>> >>> On Thu, Apr 12, 2018 at 10:03 AM Romain Manni-Bucau < >>> rmannibu...@gmail.com> wrote: >>> >>>> Seems so but is not. Most of beam tests assume they are alone in their >>>> vm when executing for a bunch of reason, if not the case a lot of side >>>> effects can happen (backend state, local cache drop, ...., uncontrolled >>>> resources and failure due to the GBKTest which creates 100M keys etc...) so >>>> you have to have one test per vm at any time. If this assumption is true my >>>> test will pass, if it is false gradle setup is wrong. >>>> >>>> Le 12 avr. 2018 18:40, "Kenneth Knowles" <k...@google.com> a écrit : >>>> >>>>> It seems that the test probably depends on some details of Maven or >>>>> our Maven configuration. If so, that's a problem with the test. It should >>>>> be able to succeed in any build system, or as a standalone JUnit main >>>>> built >>>>> from the suite, etc. >>>>> >>>>> Kenn >>>>> >>>>> On Thu, Apr 12, 2018 at 9:27 AM Romain Manni-Bucau < >>>>> rmannibu...@gmail.com> wrote: >>>>> >>>>>> on maven it is quite reliable, ran it > 10 times without any failure. >>>>>> >>>>>> I suspect (but didnt check by lack of time) gradle parallelism is >>>>>> different somehow and can lead to some flackyness here. >>>>>> >>>>>> Romain Manni-Bucau >>>>>> @rmannibucau | Blog | Old Blog | Github | LinkedIn | Book >>>>>> >>>>>> >>>>>> 2018-04-12 18:20 GMT+02:00 Scott Wegner <sweg...@google.com>: >>>>>> > It looks like the precommit failure [1] is for a new test that was >>>>>> added. >>>>>> > Have you debugged the test to ensure it's not flaky? >>>>>> > >>>>>> > [1] >>>>>> > https://builds.apache.org/job/beam_PreCommit_Java_ >>>>>> GradleBuild/4059/testReport/junit/org.apache.beam.runners.direct/ >>>>>> ExecutorServiceParallelExecutorTest/ensureMetricsThreadDoesntLeak/ >>>>>> > >>>>>> > On Thu, Apr 12, 2018 at 5:06 AM Romain Manni-Bucau < >>>>>> rmannibu...@gmail.com> >>>>>> > wrote: >>>>>> >> >>>>>> >> Hi guys, >>>>>> >> >>>>>> >> did the gradle track changed the way test execution was done? >>>>>> >> >>>>>> >> This PR https://github.com/apache/beam/pull/4965 works very well >>>>>> with >>>>>> >> maven and sometimes doesn't pass with gradle. Think we should keep >>>>>> the >>>>>> >> previous setup which was globally reliable (I'm not speaking of >>>>>> tests >>>>>> >> which are not but of the setup). >>>>>> >> >>>>>> >> Any inputs or in progress todo i missed? >>>>>> >> >>>>>> >> Romain Manni-Bucau >>>>>> >> @rmannibucau | Blog | Old Blog | Github | LinkedIn | Book >>>>>> > >>>>>> > -- >>>>>> > >>>>>> > >>>>>> > Got feedback? http://go/swegner-feedback >>>>>> >>>>> -- >>> >>> >>> Got feedback? http://go/swegner-feedback >>> >>> >>>