Another one:
Tests run: 100, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 3.266 sec <<<
FAILURE!
testViewSequentialAccessSparseVectorWritable {#18
seed=[D60713E4B2CC78FF:9F0DB2A85C2C8731]}(org.apache.mahout.math.VectorWritableTest)
Time elapsed: 0.128 sec <<< ERROR!
com.carrotsearch.randomizedtesting.ThreadLeakError: 1 thread leaked from TEST
scope at testViewSequentialAccessSparseVectorWritable {#18
seed=[D60713E4B2CC78FF:9F0DB2A85C2C8731]}(org.apache.mahout.math.VectorWritableTest):
1) Thread[id=13, name=Thread-2, state=TERMINATED, group={null group}]
at (empty stack)
at
__randomizedtesting.SeedInfo.seed([D60713E4B2CC78FF:9F0DB2A85C2C8731]:0)
On Jun 9, 2013, at 10:59 AM, Dawid Weiss <[email protected]> wrote:
>> com.carrotsearch.randomizedtesting.ThreadLeakError: 1 thread leaked from
>> TEST scope at
>
> This is because the test suite extends RandomizedTest and this in turn
> enables a feature of the runner named aptly "thread leak detection".
> The problem is that if you spawn threads from a test and then return
> to the framework those threads running in the background may affect
> further computations and be very difficult to debug. The runner
> detects such cases and fails a test that didn't clean up after itself
> properly.
>
> There are a few workarounds:
>
> 1) do clean up; after the test is over all threads it possibly starts
> should be join()'ed with.
>
> 2) sometimes the above is not possible explicitly -- as with
> executors, for example. If it's known that threads may linger a bit
> but will eventually terminate a @ThreadLeakLingering(linger = 20000)
> can be applied which gives the maximum time to wait for stray threads.
> They still must terminate.
>
> 3) sometimes threads should last for the entire suite's duration. The
> scope of detection can be changed with @ThreadLeakScope(Scope.SUITE).
>
> 4) finally, if this all is not really needed the feature can be
> disabled by @ThreadLeakScope(Scope.NONE). I honestly think this is the
> worst scenario though because leaked threads are *very* difficult to
> debug if they do something wrong and affect test results.
>
> Take a look at class annotations of:
> http://goo.gl/n7rYD
>
> for an example of multiple configuration directives used in real life:
>
> @ThreadLeakScope(Scope.SUITE)
> @ThreadLeakGroup(Group.MAIN)
> @ThreadLeakAction({Action.WARN, Action.INTERRUPT})
> @ThreadLeakLingering(linger = 20000) // Wait long for leaked threads
> to complete before failure. zk needs this.
> @ThreadLeakZombies(Consequence.IGNORE_REMAINING_TESTS)
> @TimeoutSuite(millis = 2 * TimeUnits.HOUR)
> @ThreadLeakFilters(defaultFilters = true, filters = {
> QuickPatchThreadsFilter.class
> })
>
> Dawid
--------------------------------------------
Grant Ingersoll | @gsingers
http://www.lucidworks.com