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();