HADOOP-14067. VersionInfo should load version-info.properties from its own classloader. Contributed by Thejas M Nair.

This commit is contained in:
Jitendra Pandey 2018-03-22 14:08:18 -07:00
parent e196d158a2
commit 4bea96f9a8
2 changed files with 26 additions and 3 deletions

View File

@ -53,8 +53,7 @@ public class ThreadUtil {
* Convenience method that returns a resource as inputstream from the
* classpath.
* <p>
* It first attempts to use the Thread's context classloader and if not
* set it uses the class' classloader.
* Uses the Thread's context classloader to load resource.
*
* @param resourceName resource to retrieve.
*
@ -68,6 +67,27 @@ public class ThreadUtil {
throw new IOException("Can not read resource file '" + resourceName +
"' because class loader of the current thread is null");
}
return getResourceAsStream(cl, resourceName);
}
/**
* Convenience method that returns a resource as inputstream from the
* classpath using given classloader.
* <p>
*
* @param cl ClassLoader to be used to retrieve resource.
* @param resourceName resource to retrieve.
*
* @throws IOException thrown if resource cannot be loaded
* @return inputstream with the resource.
*/
public static InputStream getResourceAsStream(ClassLoader cl,
String resourceName)
throws IOException {
if (cl == null) {
throw new IOException("Can not read resource file '" + resourceName +
"' because given class loader is null");
}
InputStream is = cl.getResourceAsStream(resourceName);
if (is == null) {
throw new IOException("Can not read resource file '" +
@ -75,4 +95,6 @@ public class ThreadUtil {
}
return is;
}
}

View File

@ -43,7 +43,8 @@ public class VersionInfo {
String versionInfoFile = component + "-version-info.properties";
InputStream is = null;
try {
is = ThreadUtil.getResourceAsStream(versionInfoFile);
is = ThreadUtil.getResourceAsStream(VersionInfo.class.getClassLoader(),
versionInfoFile);
info.load(is);
} catch (IOException ex) {
LoggerFactory.getLogger(getClass()).warn("Could not read '" +