You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@knox.apache.org by km...@apache.org on 2014/10/22 17:38:17 UTC
git commit: KNOX-450: WebHDFS HA retry should also handle
RetriableException scenarios
Repository: knox
Updated Branches:
refs/heads/master 1b2e5281b -> a63961b20
KNOX-450: WebHDFS HA retry should also handle RetriableException scenarios
Project: http://git-wip-us.apache.org/repos/asf/knox/repo
Commit: http://git-wip-us.apache.org/repos/asf/knox/commit/a63961b2
Tree: http://git-wip-us.apache.org/repos/asf/knox/tree/a63961b2
Diff: http://git-wip-us.apache.org/repos/asf/knox/diff/a63961b2
Branch: refs/heads/master
Commit: a63961b2015fe9b3466bd530a260d263c2c0bdb1
Parents: 1b2e528
Author: Kevin Minder <ke...@hortonworks.com>
Authored: Wed Oct 22 11:38:06 2014 -0400
Committer: Kevin Minder <ke...@hortonworks.com>
Committed: Wed Oct 22 11:38:06 2014 -0400
----------------------------------------------------------------------
.../dispatch/WebHdfsHaHttpClientDispatch.java | 2 +-
.../hadoop/gateway/WebHdfsHaFuncTest.java | 35 ++++++++++++++++++++
.../webhdfs-mkdirs-safemode.json | 5 +++
3 files changed, 41 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/knox/blob/a63961b2/gateway-service-webhdfs/src/main/java/org/apache/hadoop/gateway/hdfs/dispatch/WebHdfsHaHttpClientDispatch.java
----------------------------------------------------------------------
diff --git a/gateway-service-webhdfs/src/main/java/org/apache/hadoop/gateway/hdfs/dispatch/WebHdfsHaHttpClientDispatch.java b/gateway-service-webhdfs/src/main/java/org/apache/hadoop/gateway/hdfs/dispatch/WebHdfsHaHttpClientDispatch.java
index c3c4916..cfa5081 100644
--- a/gateway-service-webhdfs/src/main/java/org/apache/hadoop/gateway/hdfs/dispatch/WebHdfsHaHttpClientDispatch.java
+++ b/gateway-service-webhdfs/src/main/java/org/apache/hadoop/gateway/hdfs/dispatch/WebHdfsHaHttpClientDispatch.java
@@ -110,7 +110,7 @@ public class WebHdfsHaHttpClientDispatch extends HdfsDispatch {
if (body.contains("StandbyException")) {
throw new StandbyException();
}
- if (body.contains("SafeModeException")) {
+ if (body.contains("SafeModeException") || body.contains("RetriableException")) {
throw new SafeModeException();
}
}
http://git-wip-us.apache.org/repos/asf/knox/blob/a63961b2/gateway-test/src/test/java/org/apache/hadoop/gateway/WebHdfsHaFuncTest.java
----------------------------------------------------------------------
diff --git a/gateway-test/src/test/java/org/apache/hadoop/gateway/WebHdfsHaFuncTest.java b/gateway-test/src/test/java/org/apache/hadoop/gateway/WebHdfsHaFuncTest.java
index 26456d4..6c36bb9 100644
--- a/gateway-test/src/test/java/org/apache/hadoop/gateway/WebHdfsHaFuncTest.java
+++ b/gateway-test/src/test/java/org/apache/hadoop/gateway/WebHdfsHaFuncTest.java
@@ -361,6 +361,41 @@ public class WebHdfsHaFuncTest {
}
@Test
+ public void testServerInSafeModeRetriableException() throws IOException {
+ String username = "hdfs";
+ String password = "hdfs-password";
+ //master is in safe mode
+ masterServer.expect()
+ .method("POST")
+ .pathInfo("/webhdfs/v1/user/hdfs/new")
+ .queryParam("op", "MKDIRS")
+ .queryParam("user.name", username)
+ .respond()
+ .status(HttpStatus.SC_FORBIDDEN)
+ .content(driver.getResourceBytes("webhdfs-mkdirs-safemode.json"))
+ .contentType("application/json");
+ masterServer.expect()
+ .method("POST")
+ .pathInfo("/webhdfs/v1/user/hdfs/new")
+ .queryParam("op", "MKDIRS")
+ .queryParam("user.name", username)
+ .respond()
+ .status(HttpStatus.SC_OK)
+ .content(driver.getResourceBytes("webhdfs-rename-safemode-off.json"))
+ .contentType("application/json");
+ given()
+ .auth().preemptive().basic(username, password)
+ .header("X-XSRF-Header", "jksdhfkhdsf")
+ .queryParam("op", "MKDIRS")
+ .expect()
+ .log().ifError()
+ .statusCode(HttpStatus.SC_OK)
+ .content("boolean", is(true))
+ .when().post(driver.getUrl("WEBHDFS") + "/v1/user/hdfs/new");
+ masterServer.isEmpty();
+ }
+
+ @Test
public void testServerInSafeModeRetryLimit() throws IOException {
String username = "hdfs";
String password = "hdfs-password";
http://git-wip-us.apache.org/repos/asf/knox/blob/a63961b2/gateway-test/src/test/resources/org/apache/hadoop/gateway/WebHdfsHaFuncTest/webhdfs-mkdirs-safemode.json
----------------------------------------------------------------------
diff --git a/gateway-test/src/test/resources/org/apache/hadoop/gateway/WebHdfsHaFuncTest/webhdfs-mkdirs-safemode.json b/gateway-test/src/test/resources/org/apache/hadoop/gateway/WebHdfsHaFuncTest/webhdfs-mkdirs-safemode.json
new file mode 100644
index 0000000..bd669ef
--- /dev/null
+++ b/gateway-test/src/test/resources/org/apache/hadoop/gateway/WebHdfsHaFuncTest/webhdfs-mkdirs-safemode.json
@@ -0,0 +1,5 @@
+{"RemoteException": {
+ "exception": "RetriableException",
+ "javaClassName": "org.apache.hadoop.ipc.RetriableException",
+ "message": "org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot create directory /user/root/knox-ha/test_dir_27_0. Name node is in safe mode.\nThe reported blocks 0 needs additional 565 blocks to reach the threshold 1.0000 of total blocks 564.\nThe number of live datanodes 1 has reached the minimum number 0. Safe mode will be turned off automatically once the thresholds have been reache."
+}}