HADOOP-10625. Trim configuration names when putting/getting them

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1598070 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Xuan Gong 2014-05-28 17:06:04 +00:00
parent 15e4e7dc94
commit 5757def1a1
3 changed files with 23 additions and 6 deletions

View File

@ -150,6 +150,9 @@ Release 2.5.0 - UNRELEASED
HADOOP-10489. UserGroupInformation#getTokens and UserGroupInformation HADOOP-10489. UserGroupInformation#getTokens and UserGroupInformation
#addToken can lead to ConcurrentModificationException (Robert Kanter via atm) #addToken can lead to ConcurrentModificationException (Robert Kanter via atm)
HADOOP-10625. Trim configuration names when putting/getting them
to properties. (Wangda Tan via xgong)
Release 2.4.1 - UNRELEASED Release 2.4.1 - UNRELEASED
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -566,6 +566,9 @@ public class Configuration implements Iterable<Map.Entry<String,String>>,
*/ */
private String[] handleDeprecation(DeprecationContext deprecations, private String[] handleDeprecation(DeprecationContext deprecations,
String name) { String name) {
if (null != name) {
name = name.trim();
}
ArrayList<String > names = new ArrayList<String>(); ArrayList<String > names = new ArrayList<String>();
if (isDeprecated(name)) { if (isDeprecated(name)) {
DeprecatedKeyInfo keyInfo = deprecations.getDeprecatedKeyMap().get(name); DeprecatedKeyInfo keyInfo = deprecations.getDeprecatedKeyMap().get(name);
@ -837,12 +840,12 @@ public class Configuration implements Iterable<Map.Entry<String,String>>,
/** /**
* Get the value of the <code>name</code> property, <code>null</code> if * Get the value of the <code>name</code> property, <code>null</code> if
* no such property exists. If the key is deprecated, it returns the value of * no such property exists. If the key is deprecated, it returns the value of
* the first key which replaces the deprecated key and is not null * the first key which replaces the deprecated key and is not null.
* *
* Values are processed for <a href="#VariableExpansion">variable expansion</a> * Values are processed for <a href="#VariableExpansion">variable expansion</a>
* before being returned. * before being returned.
* *
* @param name the property name. * @param name the property name, will be trimmed before get value.
* @return the value of the <code>name</code> or its replacing property, * @return the value of the <code>name</code> or its replacing property,
* or null if no such property exists. * or null if no such property exists.
*/ */
@ -946,7 +949,8 @@ public class Configuration implements Iterable<Map.Entry<String,String>>,
/** /**
* Set the <code>value</code> of the <code>name</code> property. If * Set the <code>value</code> of the <code>name</code> property. If
* <code>name</code> is deprecated or there is a deprecated name associated to it, * <code>name</code> is deprecated or there is a deprecated name associated to it,
* it sets the value to both names. * it sets the value to both names. Name will be trimmed before put into
* configuration.
* *
* @param name property name. * @param name property name.
* @param value property value. * @param value property value.
@ -958,7 +962,8 @@ public class Configuration implements Iterable<Map.Entry<String,String>>,
/** /**
* Set the <code>value</code> of the <code>name</code> property. If * Set the <code>value</code> of the <code>name</code> property. If
* <code>name</code> is deprecated, it also sets the <code>value</code> to * <code>name</code> is deprecated, it also sets the <code>value</code> to
* the keys that replace the deprecated key. * the keys that replace the deprecated key. Name will be trimmed before put
* into configuration.
* *
* @param name property name. * @param name property name.
* @param value property value. * @param value property value.
@ -973,6 +978,7 @@ public class Configuration implements Iterable<Map.Entry<String,String>>,
Preconditions.checkArgument( Preconditions.checkArgument(
value != null, value != null,
"The value of property " + name + " must not be null"); "The value of property " + name + " must not be null");
name = name.trim();
DeprecationContext deprecations = deprecationContext.get(); DeprecationContext deprecations = deprecationContext.get();
if (deprecations.getDeprecatedKeyMap().isEmpty()) { if (deprecations.getDeprecatedKeyMap().isEmpty()) {
getProps(); getProps();
@ -1058,7 +1064,7 @@ public class Configuration implements Iterable<Map.Entry<String,String>>,
* If no such property exists, * If no such property exists,
* then <code>defaultValue</code> is returned. * then <code>defaultValue</code> is returned.
* *
* @param name property name. * @param name property name, will be trimmed before get value.
* @param defaultValue default value. * @param defaultValue default value.
* @return property value, or <code>defaultValue</code> if the property * @return property value, or <code>defaultValue</code> if the property
* doesn't exist. * doesn't exist.

View File

@ -49,7 +49,7 @@ import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils; import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.net.NetUtils; import org.apache.hadoop.net.NetUtils;
import static org.apache.hadoop.util.PlatformName.IBM_JAVA; import static org.apache.hadoop.util.PlatformName.IBM_JAVA;
import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.map.ObjectMapper;
public class TestConfiguration extends TestCase { public class TestConfiguration extends TestCase {
@ -1003,6 +1003,14 @@ public class TestConfiguration extends TestCase {
String resource; String resource;
} }
public void testGetSetTrimmedNames() throws IOException {
Configuration conf = new Configuration(false);
conf.set(" name", "value");
assertEquals("value", conf.get("name"));
assertEquals("value", conf.get(" name"));
assertEquals("value", conf.getRaw(" name "));
}
public void testDumpConfiguration () throws IOException { public void testDumpConfiguration () throws IOException {
StringWriter outWriter = new StringWriter(); StringWriter outWriter = new StringWriter();
Configuration.dumpConfiguration(conf, outWriter); Configuration.dumpConfiguration(conf, outWriter);