From 1aa49da5e5f9e98ce3a2a0b96f387f2990a2363f Mon Sep 17 00:00:00 2001 From: Mark Schaller Date: Fri, 30 Oct 2015 22:37:04 +0000 Subject: Introduce ErrorClassifier Changes the AbstractQueueVisitor strategy for varying its response to unhandled exceptions from inheritance to composition. This will help with a forthcoming switch from inheritance to delegation for ValueVisitor's use of AbstractQueueVisitor. -- MOS_MIGRATED_REVID=106730708 --- .../lib/concurrent/AbstractQueueVisitorTest.java | 43 ++++++++++------------ 1 file changed, 19 insertions(+), 24 deletions(-) (limited to 'src/test') diff --git a/src/test/java/com/google/devtools/build/lib/concurrent/AbstractQueueVisitorTest.java b/src/test/java/com/google/devtools/build/lib/concurrent/AbstractQueueVisitorTest.java index 2c62bec0b0..7bc6912e95 100644 --- a/src/test/java/com/google/devtools/build/lib/concurrent/AbstractQueueVisitorTest.java +++ b/src/test/java/com/google/devtools/build/lib/concurrent/AbstractQueueVisitorTest.java @@ -23,6 +23,7 @@ import static org.junit.Assert.fail; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.google.common.util.concurrent.Uninterruptibles; +import com.google.devtools.build.lib.concurrent.ErrorClassifier.ErrorClassification; import com.google.devtools.build.lib.testutil.TestThread; import com.google.devtools.build.lib.testutil.TestUtils; @@ -342,7 +343,8 @@ public class AbstractQueueVisitorTest { ThreadPoolExecutor executor = new ThreadPoolExecutor(3, 3, 0, TimeUnit.SECONDS, new LinkedBlockingQueue()); - final QueueVisitorWithCriticalError visitor = new QueueVisitorWithCriticalError(executor); + final AbstractQueueVisitor visitor = + createQueueVisitorWithErrorClassification(executor, ErrorClassification.CRITICAL); final CountDownLatch latch1 = new CountDownLatch(1); final AtomicBoolean wasInterrupted = new AtomicBoolean(false); @@ -381,7 +383,8 @@ public class AbstractQueueVisitorTest { public void javaErrorConsideredCriticalNoMatterWhat() throws Exception { ThreadPoolExecutor executor = new ThreadPoolExecutor(2, 2, 0, TimeUnit.SECONDS, new LinkedBlockingQueue()); - QueueVisitorWithoutCriticalError visitor = new QueueVisitorWithoutCriticalError(executor); + AbstractQueueVisitor visitor = + createQueueVisitorWithErrorClassification(executor, ErrorClassification.NOT_CRITICAL); final CountDownLatch latch = new CountDownLatch(1); final AtomicBoolean sleepFinished = new AtomicBoolean(false); final AtomicBoolean sleepInterrupted = new AtomicBoolean(false); @@ -533,27 +536,19 @@ public class AbstractQueueVisitorTest { } } - private static class QueueVisitorWithCriticalError extends AbstractQueueVisitor { - - public QueueVisitorWithCriticalError(ThreadPoolExecutor executor) { - super(/*concurrent=*/ true, executor, true, /*failFastOnException=*/ false, true); - } - - @Override - protected ErrorClassification classifyError(Throwable e) { - return ErrorClassification.CRITICAL; - } - } - - private static class QueueVisitorWithoutCriticalError extends AbstractQueueVisitor { - - public QueueVisitorWithoutCriticalError(ThreadPoolExecutor executor) { - super(/*concurrent=*/ true, executor, true, /*failFastOnException=*/ false, true); - } - - @Override - protected ErrorClassification classifyError(Throwable e) { - return ErrorClassification.NOT_CRITICAL; - } + private static AbstractQueueVisitor createQueueVisitorWithErrorClassification( + ThreadPoolExecutor executor, final ErrorClassification classification) { + return new AbstractQueueVisitor( + /*concurrent=*/ true, + executor, + /*shutdownOnCompletion=*/ true, + /*failFastOnException=*/ false, + /*failFastOnInterrupt=*/ true, + new ErrorClassifier() { + @Override + protected ErrorClassification classifyException(Exception e) { + return classification; + } + }); } } -- cgit v1.2.3