Repository: incubator-slider
Updated Branches:
  refs/heads/develop 083e1bea9 -> 16d24dd66


SLIDER-1205 Fix issues in uber apps and AM config generation


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

Branch: refs/heads/develop
Commit: 16d24dd66f945eaf5c7de83c06ca85e0de92d19d
Parents: 083e1be
Author: Billie Rinaldi <bil...@apache.org>
Authored: Tue Feb 7 11:06:02 2017 -0800
Committer: Billie Rinaldi <bil...@apache.org>
Committed: Tue Feb 7 11:06:02 2017 -0800

----------------------------------------------------------------------
 .../slider/core/build/InstanceBuilder.java      |  4 +++
 .../providers/agent/AgentProviderService.java   | 32 ++++++++++++++++----
 2 files changed, 30 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/16d24dd6/slider-core/src/main/java/org/apache/slider/core/build/InstanceBuilder.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/core/build/InstanceBuilder.java 
b/slider-core/src/main/java/org/apache/slider/core/build/InstanceBuilder.java
index 8155214..975f5af 100644
--- 
a/slider-core/src/main/java/org/apache/slider/core/build/InstanceBuilder.java
+++ 
b/slider-core/src/main/java/org/apache/slider/core/build/InstanceBuilder.java
@@ -439,6 +439,10 @@ public class InstanceBuilder {
       }
       log.info("External appdefs after {}: {}", component, externalAppDefs);
 
+      SliderUtils.mergeMapsIgnoreDuplicateKeys(
+          appConf.getConfTree().credentials,
+          componentAppConf.getConfTree().credentials);
+
       mergeExternalComponent(appConf, componentAppConf, component, null);
       mergeExternalComponent(resources, componentConf.getResourceOperations(),
           component, getNextPriority());

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/16d24dd6/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
 
b/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
index 047159c..4439aac 100644
--- 
a/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
+++ 
b/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
@@ -848,10 +848,15 @@ public class AgentProviderService extends 
AbstractProviderService implements
     }
   }
 
-  private void createConfigFile(SliderFileSystem fileSystem, File file,
-      ConfigFile configFile, Map<String, String> config)
+  private synchronized void createConfigFile(SliderFileSystem fileSystem,
+      File file, ConfigFile configFile, Map<String, String> config)
       throws IOException {
     ConfigFormat configFormat = ConfigFormat.resolve(configFile.getType());
+    if (file.exists()) {
+      log.info("Skipping writing {} file {} because it already exists",
+          configFormat, file);
+      return;
+    }
     log.info("Writing {} file {}", configFormat, file);
 
     ConfigUtils.prepConfigForTemplateOutputter(configFormat, config,
@@ -881,9 +886,10 @@ public class AgentProviderService extends 
AbstractProviderService implements
           configFile.getFileName());
       File localFile = new File(SliderKeys.RESOURCE_DIR);
       if (!localFile.exists()) {
-        localFile.mkdir();
+        if (!localFile.mkdir() && !localFile.exists()) {
+          throw new IOException(RESOURCE_DIR + " could not be created!");
+        }
       }
-      localFile = new File(localFile, new File(fileName).getName());
 
       boolean perComponent = appConf.getComponentOptBool(roleGroup,
           "conf." + configFile.getDictionaryName() + PER_COMPONENT, false);
@@ -896,11 +902,25 @@ public class AgentProviderService extends 
AbstractProviderService implements
       } else if (perGroup) {
         folder = roleGroup;
       }
+      if (folder != null) {
+        localFile = new File(localFile, folder);
+        if (!localFile.exists()) {
+          if (!localFile.mkdir() && !localFile.exists()) {
+            throw new IOException(localFile + " could not be created!");
+          }
+        }
+      }
+      localFile = new File(localFile, new File(fileName).getName());
 
       log.info("Localizing {} configs to config file {} (destination {}) " +
           "based on {} configs", config.size(), localFile, fileName,
           configFile.getDictionaryName());
-      createConfigFile(fileSystem, localFile, configFile, config);
+      if (!localFile.exists()) {
+        createConfigFile(fileSystem, localFile, configFile, config);
+      } else {
+        log.info("Local {} file {} already exists", configFile.getType(),
+            localFile);
+      }
       Path destPath = uploadResource(localFile, fileSystem, folder);
       LocalResource configResource = fileSystem.createAmResource(destPath,
           LocalResourceType.FILE);
@@ -1956,7 +1976,7 @@ public class AgentProviderService extends 
AbstractProviderService implements
                     // replace host names
                     for (String token : replaceTokens.keySet()) {
                       if (value.contains(token)) {
-                        value = value.replace(token, replaceTokens.get(token));
+                        value = value.replaceAll(Pattern.quote(token), 
replaceTokens.get(token));
                       }
                     }
                     ExportEntry entry = new ExportEntry();

Reply via email to