HADOOP-18021. Provide a public wrapper of Configuration#substituteVars (#3710)
Contributed by Andras Gyori
This commit is contained in:
parent
dd6b987c93
commit
47ea0d734f
@ -1099,6 +1099,20 @@ private static int[] findSubVariable(String eval) {
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides a public wrapper over substituteVars in order to avoid compatibility issues.
|
||||
* See HADOOP-18021 for further details.
|
||||
*
|
||||
* @param expr the literal value of a config key
|
||||
* @return null if expr is null, otherwise the value resulting from expanding
|
||||
* expr using the algorithm above.
|
||||
* @throws IllegalArgumentException when more than
|
||||
* {@link Configuration#MAX_SUBST} replacements are required
|
||||
*/
|
||||
public String substituteCommonVariables(String expr) {
|
||||
return substituteVars(expr);
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempts to repeatedly expand the value {@code expr} by replacing the
|
||||
* left-most substring of the form "${var}" in the following precedence order
|
||||
@ -1120,13 +1134,17 @@ private static int[] findSubVariable(String eval) {
|
||||
* If a cycle is detected then the original expr is returned. Loops
|
||||
* involving multiple substitutions are not detected.
|
||||
*
|
||||
* In order not to introduce breaking changes (as Oozie for example contains a method with the
|
||||
* same name and same signature) do not make this method public, use substituteCommonVariables
|
||||
* in this case.
|
||||
*
|
||||
* @param expr the literal value of a config key
|
||||
* @return null if expr is null, otherwise the value resulting from expanding
|
||||
* expr using the algorithm above.
|
||||
* @throws IllegalArgumentException when more than
|
||||
* {@link Configuration#MAX_SUBST} replacements are required
|
||||
*/
|
||||
public String substituteVars(String expr) {
|
||||
private String substituteVars(String expr) {
|
||||
if (expr == null) {
|
||||
return null;
|
||||
}
|
||||
|
@ -444,6 +444,17 @@ public void testVariableSubstitution() throws IOException {
|
||||
assertTrue(mock.getInt("my.int", -1) == 42);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if variable substitution is accessible via a public API.
|
||||
*/
|
||||
@Test
|
||||
public void testCommonVariableSubstitution() {
|
||||
conf.set("intvar", String.valueOf(42));
|
||||
String intVar = conf.substituteCommonVariables("${intvar}");
|
||||
|
||||
assertEquals("42", intVar);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEnvDefault() throws IOException {
|
||||
Configuration mock = Mockito.spy(conf);
|
||||
|
@ -54,7 +54,7 @@ public static UserWeights createByConfig(
|
||||
if (m.find()) {
|
||||
String userName = item.getKey().replaceFirst("\\." + USER_WEIGHT, "");
|
||||
if (!userName.isEmpty()) {
|
||||
String value = conf.substituteVars(item.getValue());
|
||||
String value = conf.substituteCommonVariables(item.getValue());
|
||||
userWeights.data.put(userName, new Float(value));
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user