hadoop-common-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Robert Kanter (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HADOOP-15708) Reading values from Configuration before adding deprecations make it impossible to read value with deprecated key
Date Wed, 03 Oct 2018 00:27:00 GMT

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

Robert Kanter commented on HADOOP-15708:
----------------------------------------

There's definitely something wrong here.  I was playing with the {{Configuration}} class
like this:
{code:java}
// OLD_KEY is set to "foo" in the XML
conf.get(OLD_KEY);  // returns "foo"
Configuration.addDeprecations(OLD_KEY, NEW_KEY);
conf.get(OLD_KEY);  // returns null
{code}
That doesn't seem right.  Adding a deprecation looks like it breaks getting the value of the
deprecated key.  On top of that, if you ommit the 2nd line, it works correctly:
{code:java}
// OLD_KEY is set to "foo" in the XML
Configuration.addDeprecations(OLD_KEY, NEW_KEY);
conf.get(OLD_KEY);  // returns "foo"
{code}
This means that getting the {{OLD_KEY}} and then deprecating it changes the value, which isn't
the right behavior.  

As for the right way to fix this, and make sure we're not breaking anything depending on this
odd behavior, I'm not sure.  It would be good to get some more opinions.

> Reading values from Configuration before adding deprecations make it impossible to read
value with deprecated key
> -----------------------------------------------------------------------------------------------------------------
>
>                 Key: HADOOP-15708
>                 URL: https://issues.apache.org/jira/browse/HADOOP-15708
>             Project: Hadoop Common
>          Issue Type: Bug
>          Components: conf
>    Affects Versions: 3.2.0
>            Reporter: Szilard Nemeth
>            Assignee: Zoltan Siegl
>            Priority: Minor
>         Attachments: HADOOP-15708-testcase.patch, HADOOP-15708.001.patch, HADOOP-15708.002.patch,
HADOOP-15708.003.patch
>
>
> Hadoop Common contains a widely used Configuration class.
>  This class can handle deprecations of properties, e.g. if property 'A' gets deprecated
with an alternative property key 'B', users can access property values with keys 'A' and 'B'.
>  Unfortunately, this does not work in one case.
>  When a config file is specified (for instance, XML) and a property is read with the
config.get() method, the config is loaded from the file at this time. 
>  If the deprecation mapping is not yet specified by the time any config value is retrieved
and the XML config refers to a deprecated key, then the deprecation mapping specified, the
config value cannot be retrieved neither with the deprecated nor with the new key.
>  The attached patch contains a testcase that reproduces this wrong behavior.
> Here are the steps outlined what the testcase does:
>  1. Creates an XML config file with a deprecated property
>  2. Adds the config to the Configuration object
>  3. Retrieves the config with its deprecated key (it does not really matter which property
the user gets, could be any)
>  4. Specifies the deprecation rules including the one defined in the config
>  5. Prints and asserts the property retrieved from the config with both the deprecated
and the new property keys.
> For reference, here is the log of one execution that actually shows what the issue is:
> {noformat}
> Loaded items: 1
> Looked up property value with name hadoop.zk.address: null
> Looked up property value with name yarn.resourcemanager.zk-address: dummyZkAddress
> Contents of config file: [<?xml version="1.0"?>, <configuration>, <property><name>yarn.resourcemanager.zk-address</name><value>dummyZkAddress</value></property>,
</configuration>]
> Looked up property value with name hadoop.zk.address: null
> 2018-08-31 10:10:06,484 INFO  Configuration.deprecation (Configuration.java:logDeprecation(1397))
- yarn.resourcemanager.zk-address is deprecated. Instead, use hadoop.zk.address
> Looked up property value with name hadoop.zk.address: null
> Looked up property value with name hadoop.zk.address: null
> java.lang.AssertionError: 
> Expected :dummyZkAddress
> Actual   :null
> {noformat}
> *As it's visible from the output and the code, the issue is really that if the config
is retrieved either with the deprecated or the new value, Configuration both wants to serve
the value with the new key.*
>  *If the mapping is not specified before any retrieval happened, the value is only stored
under the deprecated key but not the new key.*



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: common-issues-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-issues-help@hadoop.apache.org


Mime
View raw message