[ 
https://issues.apache.org/jira/browse/STORM-188?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14216352#comment-14216352
 ] 

ASF GitHub Bot commented on STORM-188:
--------------------------------------

Github user revans2 commented on a diff in the pull request:

    https://github.com/apache/storm/pull/120#discussion_r20514725
  
    --- Diff: storm-core/src/jvm/backtype/storm/utils/Utils.java ---
    @@ -122,36 +124,64 @@ public static void sleep(long millis) {
             }
         }
     
    +    // Will try to locate the config file in class path first, then will 
search local path
    +    // For example, we can use temporary config path like this: storm jar 
job.jar --config /tmp/xx.yaml
         public static Map findAndReadConfigFile(String name, boolean 
mustExist) {
    +        InputStream in = null;
             try {
    -            HashSet<URL> resources = new HashSet<URL>(findResources(name));
    -            if(resources.isEmpty()) {
    -                if(mustExist) throw new RuntimeException("Could not find 
config file on classpath " + name);
    -                else return new HashMap();
    -            }
    -            if(resources.size() > 1) {
    -                throw new RuntimeException("Found multiple " + name + " 
resources. You're probably bundling the Storm jars with your topology jar. "
    -                  + resources);
    -            }
    -            URL resource = resources.iterator().next();
    -            Yaml yaml = new Yaml(new SafeConstructor());
    -            Map ret = null;
    -            InputStream input = resource.openStream();
    -            try {
    -                ret = (Map) yaml.load(new InputStreamReader(input));
    -            } finally {
    -                input.close();
    +            in = getConfigFileInputStream(name);
    +            if (null != in) {
    +                Yaml yaml = new Yaml();
    +                Map ret = (Map) yaml.load(new InputStreamReader(in));
    +                if (null != ret) {
    +                    return new HashMap(ret);
    +                }
                 }
    -            if(ret==null) ret = new HashMap();
    -            
     
    -            return new HashMap(ret);
    -            
    +            if (mustExist) {
    +                throw new RuntimeException("Could not find config file on 
classpath " + name);
    +            } else {
    +                return new HashMap();
    +            }
             } catch (IOException e) {
                 throw new RuntimeException(e);
    +        } finally {
    +            if (null != in) {
    +                try {
    +                    in.close();
    +                } catch (IOException e) {
    +                    throw new RuntimeException(e);
    +                }
    +            }
    +        }
    +    }
    +
    +    private static InputStream getConfigFileInputStream(String 
configFilePath)
    +            throws IOException {
    +        if (null == configFilePath) {
    +            throw new IOException(
    +                    "Could not find config file, name not specified");
    +        }
    +
    +        HashSet<URL> resources = new 
HashSet<URL>(findResources(configFilePath));
    +        if (resources.isEmpty()) {
    +            File configFile = new File(configFilePath);
    +            if (configFile.exists()) {
    +                return new FileInputStream(configFile);
    +            }
    +        } else if (resources.size() > 1) {
    +            throw new IOException(
    +                    "Found multiple " + configFilePath
    +                            + " resources. You're probably bundling the 
Storm jars with your topology jar. "
    +                            + resources);
    +        } else {
    +            URL resource = resources.iterator().next();
    --- End diff --
    
    It might be nice to log something here, so that the user knows that we are 
using a config file from the classpath.  I just thought about the case where 
someone creates a ./storm.yaml file and passes it in with --config.  They will 
get the storm.yaml from the classpath without knowing it, because the classpath 
is searched prior to the absolute path being searched, and this would be really 
confusing.


> Allow user to specifiy full configuration path when running storm command
> -------------------------------------------------------------------------
>
>                 Key: STORM-188
>                 URL: https://issues.apache.org/jira/browse/STORM-188
>             Project: Apache Storm
>          Issue Type: Bug
>            Reporter: Sean Zhong
>            Priority: Minor
>         Attachments: search_local_path_for_config.patch, storm-188.patch
>
>   Original Estimate: 168h
>  Remaining Estimate: 168h
>
> Currently, storm will only look up configuration path in java classpath. We 
> should also allow user to specify full configuration path. This is very 
> important for a shared cluster environment, like YARN. Multiple storm cluster 
> may runs with different configuration, but share same binary folder.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to