[ https://issues.apache.org/jira/browse/SOLR-17000?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17771309#comment-17771309 ]
Kevin Risden commented on SOLR-17000: ------------------------------------- [^SOLR-17000-1.patch] looks good > ExecutorUtilTest failures due to bad concurrency assumptions in test logic > -------------------------------------------------------------------------- > > Key: SOLR-17000 > URL: https://issues.apache.org/jira/browse/SOLR-17000 > Project: Solr > Issue Type: Test > Security Level: Public(Default Security Level. Issues are Public) > Reporter: Chris M. Hostetter > Assignee: Chris M. Hostetter > Priority: Major > Attachments: SOLR-17000-1.patch, SOLR-17000.patch, > apache_solr_Solr-check-9.3_647.log.txt, apache_solr_Solr-check-9.3_665.log.txt > > > The basic logic of {{ExecutorUtilTest.testExecutorUtilAwaitsTerminationEnds}} > in psuedo code is... > {code:java} > Future f = executorService.submit(newTaskSleepAndIgnoreInterupts(300ms)) > // L45 > executorService.shutdownNow(); > // L46 > assertThrows(RuntimeException, > // L47 > ExecutorUtil.awaitTermination(executorService, 100ms) > // Thread should not have finished in await termination. > > assertFalse(f.isDone()); > // L53 > {code} > There are at least two concurrency assumptions here that are not guaranteed > to be true, and occasionally cause jenkins failures... > * There is no guarantee that the task submitted on line 45 will start before > the {{shutdownNow()}} call on line 46 – which means {{awaitTermination()}} > can succeed w/o throwing an exception: > {noformat} > // apache_solr_Solr-check-9.3_665.log.txt > org.apache.solr.common.util.ExecutorUtilTest > > testExecutorUtilAwaitsTerminationEnds FAILED > java.lang.AssertionError: expected java.lang.RuntimeException to be > thrown, but nothing was thrown > at > __randomizedtesting.SeedInfo.seed([7169EEE284A03087:DFB4E65167A857BF]:0) > at org.junit.Assert.assertThrows(Assert.java:1028) > at org.junit.Assert.assertThrows(Assert.java:981) > at > org.apache.solr.common.util.ExecutorUtilTest.testExecutorUtilAwaitsTerminationEnds(ExecutorUtilTest.java:47) > {noformat} > * From the perspective of the test thread, it's guaranteed that _at least_ > 100ms has elapsed (since line 45) by the time {{awaitTermination()}} throws > it's exception, but that doesn't preclude the possibility that by the time > the test thread gets to line 53, a full 300ms may have elapsed, and the > background thread has already finished the task, so that the > {{Future.isDone()}} call may return true: > {noformat} > // apache_solr_Solr-check-9.3_647.log.txt > org.apache.solr.common.util.ExecutorUtilTest > > testExecutorUtilAwaitsTerminationEnds FAILED > java.lang.AssertionError > at __randomizedtesting.SeedInfo.seed([F7AFD5785E583017:5972DDCBBD50572F]:0) > at org.junit.Assert.fail(Assert.java:87) > at org.junit.Assert.assertTrue(Assert.java:42) > at org.junit.Assert.assertFalse(Assert.java:65) > at org.junit.Assert.assertFalse(Assert.java:75) > at > org.apache.solr.common.util.ExecutorUtilTest.testExecutorUtilAwaitsTerminationEnds(ExecutorUtilTest.java:53) > {noformat} -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@solr.apache.org For additional commands, e-mail: issues-h...@solr.apache.org