Browse Source

YARN-1215. Merging change r1528233 from trunk to branch-2.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1528234 13f79535-47bb-0310-9956-ffa450edef68
Chris Nauroth 11 years ago
parent
commit
f5951d2695

+ 2 - 0
hadoop-yarn-project/CHANGES.txt

@@ -39,6 +39,8 @@ Release 2.3.0 - UNRELEASED
     YARN-1188. The context of QueueMetrics becomes default when using
     FairScheduler (Tsuyoshi Ozawa via Sandy Ryza)
 
+    YARN-1215. Yarn URL should include userinfo. (Chuan Liu via cnauroth)
+
 Release 2.2.0 - UNRELEASED
 
   INCOMPATIBLE CHANGES

+ 16 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/URL.java

@@ -56,6 +56,22 @@ public abstract class URL {
   @Stable
   public abstract void setScheme(String scheme);
 
+  /**
+   * Get the user info of the URL.
+   * @return user info of the URL
+   */
+  @Public
+  @Stable
+  public abstract String getUserInfo();
+  
+  /**
+   * Set the user info of the URL.
+   * @param userInfo user info of the URL
+   */
+  @Public
+  @Stable
+  public abstract void setUserInfo(String userInfo);
+
   /**
    * Get the host of the URL.
    * @return host of the URL

+ 1 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto

@@ -100,6 +100,7 @@ message URLProto {
   optional string host = 2;
   optional int32 port = 3;
   optional string file = 4;
+  optional string userInfo = 5;
 }
 
 enum LocalResourceVisibilityProto {

+ 20 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/URLPBImpl.java

@@ -113,6 +113,26 @@ public class URLPBImpl extends URL {
     }
     builder.setScheme((scheme));
   }
+ 
+  @Override
+  public String getUserInfo() {
+    URLProtoOrBuilder p = viaProto ? proto : builder;
+    if (!p.hasUserInfo()) {
+      return null;
+    }
+    return (p.getUserInfo());
+  }
+
+  @Override
+  public void setUserInfo(String userInfo) {
+    maybeInitBuilder();
+    if (userInfo == null) { 
+      builder.clearUserInfo();
+      return;
+    }
+    builder.setUserInfo((userInfo));
+  }
+  
   @Override
   public String getHost() {
     URLProtoOrBuilder p = viaProto ? proto : builder;

+ 6 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/ConverterUtils.java

@@ -69,6 +69,9 @@ public class ConverterUtils {
     String authority = "";
     if (url.getHost() != null) {
       authority = url.getHost();
+      if (url.getUserInfo() != null) {
+        authority = url.getUserInfo() + "@" + authority;
+      }
       if (url.getPort() > 0) {
         authority += ":" + url.getPort();
       }
@@ -102,6 +105,9 @@ public class ConverterUtils {
     if (uri.getHost() != null) {
       url.setHost(uri.getHost());
     }
+    if (uri.getUserInfo() != null) {
+      url.setUserInfo(uri.getUserInfo());
+    }
     url.setPort(uri.getPort());
     url.setScheme(uri.getScheme());
     url.setFile(uri.getPath());

+ 8 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/util/TestConverterUtils.java

@@ -38,6 +38,14 @@ public class TestConverterUtils {
     assertEquals(expectedPath, actualPath);
   }
 
+  @Test
+  public void testConvertUrlWithUserinfo() throws URISyntaxException {
+    Path expectedPath = new Path("foo://username:password@example.com:8042");
+    URL url = ConverterUtils.getYarnUrlFromPath(expectedPath);
+    Path actualPath = ConverterUtils.getPathFromYarnURL(url);
+    assertEquals(expectedPath, actualPath);
+  }
+  
   @Test
   public void testContainerId() throws URISyntaxException {
     ContainerId id = TestContainerId.newContainerId(0, 0, 0, 0);