HDFS-14135. TestWebHdfsTimeouts Fails intermittently in trunk. Contributed by Ayush Saxena.
Signed-off-by: Masatake Iwasaki <iwasakims@apache.org>
(cherry picked from commit 6b8107ad97
)
This commit is contained in:
parent
1a2aba85d8
commit
bf4a2258ce
|
@ -35,6 +35,7 @@ import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.concurrent.TimeoutException;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
@ -47,6 +48,7 @@ import org.apache.hadoop.net.NetUtils;
|
||||||
import org.apache.hadoop.security.authentication.client.ConnectionConfigurator;
|
import org.apache.hadoop.security.authentication.client.ConnectionConfigurator;
|
||||||
import org.apache.hadoop.test.GenericTestUtils;
|
import org.apache.hadoop.test.GenericTestUtils;
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
|
import org.junit.AssumptionViolatedException;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.junit.runners.Parameterized;
|
import org.junit.runners.Parameterized;
|
||||||
|
@ -84,6 +86,7 @@ public class TestWebHdfsTimeouts {
|
||||||
return conn;
|
return conn;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
private volatile boolean failedToConsumeBacklog;
|
||||||
|
|
||||||
public enum TimeoutSource { ConnectionFactory, Configuration };
|
public enum TimeoutSource { ConnectionFactory, Configuration };
|
||||||
|
|
||||||
|
@ -122,6 +125,7 @@ public class TestWebHdfsTimeouts {
|
||||||
|
|
||||||
clients = new ArrayList<SocketChannel>();
|
clients = new ArrayList<SocketChannel>();
|
||||||
serverThread = null;
|
serverThread = null;
|
||||||
|
failedToConsumeBacklog = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@After
|
@After
|
||||||
|
@ -211,6 +215,7 @@ public class TestWebHdfsTimeouts {
|
||||||
fs.getFileChecksum(new Path("/file"));
|
fs.getFileChecksum(new Path("/file"));
|
||||||
fail("expected timeout");
|
fail("expected timeout");
|
||||||
} catch (SocketTimeoutException e) {
|
} catch (SocketTimeoutException e) {
|
||||||
|
assumeBacklogConsumed();
|
||||||
GenericTestUtils.assertExceptionContains(
|
GenericTestUtils.assertExceptionContains(
|
||||||
fs.getUri().getAuthority() + ": connect timed out", e);
|
fs.getUri().getAuthority() + ": connect timed out", e);
|
||||||
}
|
}
|
||||||
|
@ -244,6 +249,7 @@ public class TestWebHdfsTimeouts {
|
||||||
os = fs.create(new Path("/file"));
|
os = fs.create(new Path("/file"));
|
||||||
fail("expected timeout");
|
fail("expected timeout");
|
||||||
} catch (SocketTimeoutException e) {
|
} catch (SocketTimeoutException e) {
|
||||||
|
assumeBacklogConsumed();
|
||||||
GenericTestUtils.assertExceptionContains(
|
GenericTestUtils.assertExceptionContains(
|
||||||
fs.getUri().getAuthority() + ": connect timed out", e);
|
fs.getUri().getAuthority() + ": connect timed out", e);
|
||||||
} finally {
|
} finally {
|
||||||
|
@ -357,6 +363,28 @@ public class TestWebHdfsTimeouts {
|
||||||
client.connect(nnHttpAddress);
|
client.connect(nnHttpAddress);
|
||||||
clients.add(client);
|
clients.add(client);
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
|
GenericTestUtils.waitFor(() -> {
|
||||||
|
try (SocketChannel c = SocketChannel.open()) {
|
||||||
|
c.socket().connect(nnHttpAddress, 100);
|
||||||
|
} catch (SocketTimeoutException e) {
|
||||||
|
return true;
|
||||||
|
} catch (IOException e) {
|
||||||
|
LOG.debug("unexpected exception: " + e);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}, 100, 10000);
|
||||||
|
} catch (TimeoutException | InterruptedException e) {
|
||||||
|
failedToConsumeBacklog = true;
|
||||||
|
assumeBacklogConsumed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assumeBacklogConsumed() {
|
||||||
|
if (failedToConsumeBacklog) {
|
||||||
|
throw new AssumptionViolatedException(
|
||||||
|
"failed to fill up connection backlog.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue