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 <dawid.we...@cs.put.poznan.pl> 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





Reply via email to