You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@slider.apache.org by sm...@apache.org on 2015/03/16 17:48:49 UTC

[16/19] incubator-slider git commit: SLIDER-763 add app name option to client command

SLIDER-763 add app name option to client command


Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/d9b26524
Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/d9b26524
Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/d9b26524

Branch: refs/heads/feature/package_simplification_II
Commit: d9b265249218122b0df6b8064faef422f8e21158
Parents: dd2a70b
Author: Billie Rinaldi <bi...@gmail.com>
Authored: Fri Mar 13 09:55:14 2015 -0700
Committer: Billie Rinaldi <bi...@gmail.com>
Committed: Fri Mar 13 10:36:46 2015 -0700

----------------------------------------------------------------------
 slider-assembly/src/main/scripts/slider         |  4 ++-
 .../org/apache/slider/client/SliderClient.java  |  3 ++-
 .../providers/AbstractClientProvider.java       |  8 +++---
 .../providers/agent/AgentClientProvider.java    | 25 +++++++++++++-----
 .../agent/TestAgentClientProvider2.java         | 27 +++++++++++++++++---
 5 files changed, 53 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/d9b26524/slider-assembly/src/main/scripts/slider
----------------------------------------------------------------------
diff --git a/slider-assembly/src/main/scripts/slider b/slider-assembly/src/main/scripts/slider
index 97dabaf..28dc205 100755
--- a/slider-assembly/src/main/scripts/slider
+++ b/slider-assembly/src/main/scripts/slider
@@ -41,5 +41,7 @@ cmd = [pyExecPath + " " + currDir + "/slider.py"]
 cmd.extend(args)
 finalCmd = " ".join(cmd)
 
-result = subprocess.call(finalCmd, shell=True)
+env = os.environ.copy()
+env['SLIDER_HOME'] = os.path.dirname(currDir)
+result = subprocess.call(finalCmd, env=env, shell=True)
 sys.exit(result)

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/d9b26524/slider-core/src/main/java/org/apache/slider/client/SliderClient.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/client/SliderClient.java b/slider-core/src/main/java/org/apache/slider/client/SliderClient.java
index df3ba95..84ed5a4 100644
--- a/slider-core/src/main/java/org/apache/slider/client/SliderClient.java
+++ b/slider-core/src/main/java/org/apache/slider/client/SliderClient.java
@@ -1067,7 +1067,8 @@ public class SliderClient extends AbstractSliderLaunchedService implements RunSe
                                     "INSTALL",
                                     clientInfo.installLocation,
                                     pkgFile,
-                                    config);
+                                    config,
+                                    clientInfo.name);
     return EXIT_SUCCESS;
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/d9b26524/slider-core/src/main/java/org/apache/slider/providers/AbstractClientProvider.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/AbstractClientProvider.java b/slider-core/src/main/java/org/apache/slider/providers/AbstractClientProvider.java
index b5aafd4..1a1baf7 100644
--- a/slider-core/src/main/java/org/apache/slider/providers/AbstractClientProvider.java
+++ b/slider-core/src/main/java/org/apache/slider/providers/AbstractClientProvider.java
@@ -224,16 +224,18 @@ public abstract class AbstractClientProvider extends Configured {
    * Process client operations for applications such as install, configure
    * @param fileSystem
    * @param operation
-   * @param config
-   * @param clientPackage
    * @param clientInstallPath
+   * @param clientPackage
+   * @param config
+   * @param name
    * @throws SliderException
    */
   public void processClientOperation(SliderFileSystem fileSystem,
                                      String operation,
                                      File clientInstallPath,
                                      File clientPackage,
-                                     JSONObject config)
+                                     JSONObject config,
+                                     String name)
       throws SliderException {
     throw new SliderException("Provider does not support client operations.");
   }

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/d9b26524/slider-core/src/main/java/org/apache/slider/providers/agent/AgentClientProvider.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/AgentClientProvider.java b/slider-core/src/main/java/org/apache/slider/providers/agent/AgentClientProvider.java
index 94d4c97..9da269d 100644
--- a/slider-core/src/main/java/org/apache/slider/providers/agent/AgentClientProvider.java
+++ b/slider-core/src/main/java/org/apache/slider/providers/agent/AgentClientProvider.java
@@ -26,6 +26,7 @@ import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.exception.ExceptionUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.registry.client.binding.RegistryUtils;
 import org.apache.slider.api.InternalKeys;
 import org.apache.slider.api.ResourceKeys;
 import org.apache.slider.common.SliderKeys;
@@ -291,7 +292,8 @@ public class AgentClientProvider extends AbstractClientProvider
                                      String operation,
                                      File clientInstallPath,
                                      File appPackage,
-                                     JSONObject config) throws SliderException {
+                                     JSONObject config,
+                                     String name) throws SliderException {
     // create temp folder
     // create sub-folders app_pkg, agent_pkg, command
     File tmpDir = Files.createTempDir();
@@ -365,7 +367,7 @@ public class AgentClientProvider extends AbstractClientProvider
 
       expandAgentTar(agentPkgDir);
 
-      JSONObject commandJson = getCommandJson(defaultConfig, config, metaInfo, clientInstallPath);
+      JSONObject commandJson = getCommandJson(defaultConfig, config, metaInfo, clientInstallPath, name);
       FileWriter file = new FileWriter(new File(cmdDir, "command.json"));
       try {
         file.write(commandJson.toString());
@@ -502,7 +504,8 @@ public class AgentClientProvider extends AbstractClientProvider
   protected JSONObject getCommandJson(JSONObject defaultConfig,
                                       JSONObject inputConfig,
                                       Metainfo metainfo,
-                                      File clientInstallPath) throws SliderException {
+                                      File clientInstallPath,
+                                      String name) throws SliderException {
     try {
       JSONObject pkgList = new JSONObject();
       pkgList.put(AgentKeys.PACKAGE_LIST,
@@ -510,15 +513,20 @@ public class AgentClientProvider extends AbstractClientProvider
       JSONObject obj = new JSONObject();
       obj.put("hostLevelParams", pkgList);
 
+      String user = RegistryUtils.currentUser();
       JSONObject configuration = new JSONObject();
       JSONObject global = new JSONObject();
       global.put("app_install_dir", clientInstallPath.getAbsolutePath());
+      global.put("app_user", user);
+      if (name != null) {
+        global.put("app_name", name);
+      }
 
       if (defaultConfig != null) {
-        readConfigEntries(defaultConfig, clientInstallPath, global);
+        readConfigEntries(defaultConfig, clientInstallPath, global, name, user);
       }
       if (inputConfig != null) {
-        readConfigEntries(inputConfig, clientInstallPath, global);
+        readConfigEntries(inputConfig, clientInstallPath, global, name, user);
       }
 
       configuration.put("global", global);
@@ -532,7 +540,8 @@ public class AgentClientProvider extends AbstractClientProvider
 
   private void readConfigEntries(JSONObject inpConfig,
                                  File clientInstallPath,
-                                 JSONObject globalConfig)
+                                 JSONObject globalConfig,
+                                 String name, String user)
       throws JSONException {
     JSONObject globalSection = inpConfig.getJSONObject("global");
     Iterator it = globalSection.keys();
@@ -541,6 +550,10 @@ public class AgentClientProvider extends AbstractClientProvider
       String value = globalSection.getString(key);
       if (SliderUtils.isSet(value)) {
         value = value.replace("{app_install_dir}", clientInstallPath.getAbsolutePath());
+        value = value.replace("{app_user}", user);
+        if (name != null) {
+          value = value.replace("{app_name}", name);
+        }
       }
       if (globalConfig.has(key)) {
         // last one wins

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/d9b26524/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentClientProvider2.java
----------------------------------------------------------------------
diff --git a/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentClientProvider2.java b/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentClientProvider2.java
index 6f637d8..3bc7ce2 100644
--- a/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentClientProvider2.java
+++ b/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentClientProvider2.java
@@ -20,6 +20,7 @@ import org.apache.commons.io.IOUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.registry.client.binding.RegistryUtils;
 import org.apache.log4j.BasicConfigurator;
 import org.apache.slider.api.InternalKeys;
 import org.apache.slider.client.SliderClient;
@@ -60,7 +61,7 @@ import static org.easymock.EasyMock.expect;
  *
  */
 @RunWith(PowerMockRunner.class)
-@PrepareForTest({ProviderUtils.class, ProcessBuilder.class, AgentClientProvider.class})
+@PrepareForTest({ProviderUtils.class, ProcessBuilder.class, AgentClientProvider.class, RegistryUtils.class})
 public class TestAgentClientProvider2 {
   protected static final Logger log =
       LoggerFactory.getLogger(TestAgentClientProvider2.class);
@@ -119,6 +120,7 @@ public class TestAgentClientProvider2 {
     JSONObject global = new JSONObject();
     global.put("a", "b");
     global.put("d", "{app_install_dir}/d");
+    global.put("e", "{app_name}");
     inputConfig.put("global", global);
 
     Metainfo metainfo = new Metainfo();
@@ -133,29 +135,42 @@ public class TestAgentClientProvider2 {
     pkg.setType("tarball");
 
     File clientInstallPath = new File("/tmp/file1");
+    String appName = "name";
+    String user = "username";
+
+    PowerMock.mockStaticPartial(RegistryUtils.class, "currentUser");
+    expect(RegistryUtils.currentUser()).andReturn(user).times(2);
+    PowerMock.replay(RegistryUtils.class);
 
     JSONObject output = provider.getCommandJson(defaultConfig,
                                                 inputConfig,
                                                 metainfo,
-                                                clientInstallPath);
+                                                clientInstallPath,
+                                                appName);
     JSONObject outConfigs = output.getJSONObject("configurations");
     Assert.assertNotNull(outConfigs);
     JSONObject outGlobal = outConfigs.getJSONObject("global");
     Assert.assertNotNull(outGlobal);
     Assert.assertEquals("b", outGlobal.getString("a"));
     Assert.assertEquals("/tmp/file1/d", outGlobal.getString("d"));
+    Assert.assertEquals("/tmp/file1", outGlobal.getString("app_install_dir"));
+    Assert.assertEquals("name", outGlobal.getString("e"));
+    Assert.assertEquals("name", outGlobal.getString("app_name"));
+    Assert.assertEquals(user, outGlobal.getString("app_user"));
 
     defaultConfig = new JSONObject();
     global = new JSONObject();
     global.put("a1", "b2");
     global.put("a", "b-not");
     global.put("d1", "{app_install_dir}/d");
+    global.put("e", "{app_name}");
     defaultConfig.put("global", global);
 
     output = provider.getCommandJson(defaultConfig,
                                      inputConfig,
                                      metainfo,
-                                     clientInstallPath);
+                                     clientInstallPath,
+                                     null);
     outConfigs = output.getJSONObject("configurations");
     Assert.assertNotNull(outConfigs);
     outGlobal = outConfigs.getJSONObject("global");
@@ -164,6 +179,12 @@ public class TestAgentClientProvider2 {
     Assert.assertEquals("/tmp/file1/d", outGlobal.getString("d"));
     Assert.assertEquals("b2", outGlobal.getString("a1"));
     Assert.assertEquals("/tmp/file1/d", outGlobal.getString("d1"));
+    Assert.assertEquals("/tmp/file1", outGlobal.getString("app_install_dir"));
+    Assert.assertEquals("{app_name}", outGlobal.getString("e"));
+    Assert.assertFalse(outGlobal.has("app_name"));
+    Assert.assertEquals(user, outGlobal.getString("app_user"));
+
+    PowerMock.verify(RegistryUtils.class);
   }