MAPREDUCE-7302. Upgrading to JUnit 4.13 causes testcase TestFetcher.testCorruptedIFile() to fail. Contributed by Peter Bacsko. Reviewed by Akira Ajisaka.

This commit is contained in:
Peter Bacsko 2020-10-28 10:35:30 +01:00
parent d0c786db4d
commit da93cd962c
2 changed files with 15 additions and 1 deletions

View File

@ -29,6 +29,7 @@
import static org.apache.hadoop.io.nativeio.NativeIO.POSIX.POSIX_FADV_WILLNEED; import static org.apache.hadoop.io.nativeio.NativeIO.POSIX.POSIX_FADV_WILLNEED;
import org.apache.hadoop.thirdparty.com.google.common.annotations.VisibleForTesting;
import org.apache.hadoop.thirdparty.com.google.common.base.Preconditions; import org.apache.hadoop.thirdparty.com.google.common.base.Preconditions;
import org.apache.hadoop.thirdparty.com.google.common.util.concurrent.ThreadFactoryBuilder; import org.apache.hadoop.thirdparty.com.google.common.util.concurrent.ThreadFactoryBuilder;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -60,6 +61,16 @@ public static ReadaheadPool getInstance() {
} }
} }
@VisibleForTesting
public static void resetInstance() {
synchronized (ReadaheadPool.class) {
if (instance != null) {
instance.pool.shutdownNow();
instance = null;
}
}
}
private ReadaheadPool() { private ReadaheadPool() {
pool = new ThreadPoolExecutor(POOL_SIZE, MAX_POOL_SIZE, 3L, TimeUnit.SECONDS, pool = new ThreadPoolExecutor(POOL_SIZE, MAX_POOL_SIZE, 3L, TimeUnit.SECONDS,
new ArrayBlockingQueue<Runnable>(CAPACITY)); new ArrayBlockingQueue<Runnable>(CAPACITY));

View File

@ -46,6 +46,7 @@
import javax.crypto.SecretKey; import javax.crypto.SecretKey;
import org.apache.hadoop.io.ReadaheadPool;
import org.apache.hadoop.io.Text; import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.Counters; import org.apache.hadoop.mapred.Counters;
import org.apache.hadoop.mapred.IFileInputStream; import org.apache.hadoop.mapred.IFileInputStream;
@ -92,6 +93,8 @@ public class TestFetcher {
@SuppressWarnings("unchecked") // mocked generics @SuppressWarnings("unchecked") // mocked generics
public void setup() { public void setup() {
LOG.info(">>>> " + name.getMethodName()); LOG.info(">>>> " + name.getMethodName());
// to avoid threading issues with JUnit 4.13+
ReadaheadPool.resetInstance();
job = new JobConf(); job = new JobConf();
job.setBoolean(MRJobConfig.SHUFFLE_FETCH_RETRY_ENABLED, false); job.setBoolean(MRJobConfig.SHUFFLE_FETCH_RETRY_ENABLED, false);
jobWithRetry = new JobConf(); jobWithRetry = new JobConf();