HDFS-5289. Race condition in TestRetryCacheWithHA#testCreateSymlink causes spurious test failure. Contributed by Aaron T. Myers.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1528694 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Aaron Myers 2013-10-03 00:42:20 +00:00
parent 9ba48807df
commit 032fbb549e
2 changed files with 12 additions and 4 deletions

View File

@ -147,6 +147,9 @@ Release 2.1.2 - UNRELEASED
HDFS-5279. Guard against NullPointerException in NameNode JSP pages before HDFS-5279. Guard against NullPointerException in NameNode JSP pages before
initialization of FSNamesystem. (cnauroth) initialization of FSNamesystem. (cnauroth)
HDFS-5289. Race condition in TestRetryCacheWithHA#testCreateSymlink causes
spurious test failure. (atm)
Release 2.1.1-beta - 2013-09-23 Release 2.1.1-beta - 2013-09-23
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -20,6 +20,7 @@ package org.apache.hadoop.hdfs.server.namenode.ha;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.lang.reflect.InvocationHandler; import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method; import java.lang.reflect.Method;
@ -646,10 +647,14 @@ public class TestRetryCacheWithHA {
@Override @Override
boolean checkNamenodeBeforeReturn() throws Exception { boolean checkNamenodeBeforeReturn() throws Exception {
Path linkPath = new Path(link); Path linkPath = new Path(link);
FileStatus linkStatus = dfs.getFileLinkStatus(linkPath); FileStatus linkStatus = null;
for (int i = 0; i < CHECKTIMES && linkStatus == null; i++) { for (int i = 0; i < CHECKTIMES && linkStatus == null; i++) {
Thread.sleep(1000); try {
linkStatus = dfs.getFileLinkStatus(linkPath); linkStatus = dfs.getFileLinkStatus(linkPath);
} catch (FileNotFoundException fnf) {
// Ignoring, this can be legitimate.
Thread.sleep(1000);
}
} }
return linkStatus != null; return linkStatus != null;
} }