ZhaoBQ commented on pull request #3139:
URL: https://github.com/apache/hbase/pull/3139#issuecomment-833219457


   Here is my test for Configuration.addDeprecation().
   Suppose we define the following configuration:
       hbase-site.xml:  
<property><name>deprecate.conf</name><value>99</value></property>
       hbase-default.xml: 
<property><name>new.conf</name><value>42</value></property>
   
   Test 1, create a Configuration object first:
   `
   public class TestConfiguration {
     @Deprecated
     static final String DEPRECATED_KEY = "deprecate.conf";
     static final String NEW_KEY = "new.conf";
   
     public static void main(String[] args) {
       Configuration conf = HBaseConfiguration.create();
       System.out.println(conf.get(DEPRECATED_KEY)); // 99
       System.out.println(conf.get(NEW_KEY)); // 42
   
       Configuration.addDeprecation(DEPRECATED_KEY, NEW_KEY);
       System.out.println(conf.get(DEPRECATED_KEY)); // 42
       System.out.println(conf.get(NEW_KEY)); // 42
    
       conf.set(DEPRECATED_KEY, "120");
       System.out.println(conf.get(DEPRECATED_KEY)); //120
       System.out.println(conf.get(NEW_KEY)); // 120
   
       conf.set(NEW_KEY, "150");
       System.out.println(conf.get(DEPRECATED_KEY)); // 150
       System.out.println(conf.get(NEW_KEY)); //150
     }
   }
   `
   Test 2, call Configuration.addDeprecation() first:
   `
   public class TestConfiguration {
   
     @Deprecated
     static final String DEPRECATED_KEY = "deprecate.conf";
     static final String NEW_KEY = "new.conf";
   
     public static void main(String[] args) {
       Configuration.addDeprecation(DEPRECATED_KEY, NEW_KEY);
       Configuration conf = HBaseConfiguration.create();
       System.out.println(conf.get(DEPRECATED_KEY)); // 99
       System.out.println(conf.get(NEW_KEY)); // 99
   
       conf.set(DEPRECATED_KEY, "120");
       System.out.println(conf.get(DEPRECATED_KEY)); // 120
       System.out.println(conf.get(NEW_KEY)); // 120
   
       conf.set(NEW_KEY, "150");
       System.out.println(conf.get(DEPRECATED_KEY)); // 150
       System.out.println(conf.get(NEW_KEY)); //150
     }
   }
   Test 2 is what I expected, even if the deprecated configuration in the 
configuration file is not changed to a new configuration, it can still run 
correctly. But we should call Configuration.addDeprecation before create 
configuration object.
   
   `
   Test 3, hbase-default.xml is empty, and hbase-site.xml 
has:<property><name>deprecate.conf</name><value>99</value></property> 
<property><name>new.conf</name><value>42</value></property>
   `
     public static void main(String[] args) {
       Configuration.addDeprecation(DEPRECATED_KEY, NEW_KEY);
       Configuration conf = HBaseConfiguration.create();
       System.out.println(conf.get(DEPRECATED_KEY)); // 42
       System.out.println(conf.get(NEW_KEY)); // 42
   
       conf.set(DEPRECATED_KEY, "120");
       System.out.println(conf.get(DEPRECATED_KEY)); // 120
       System.out.println(conf.get(NEW_KEY)); // 120
   
       conf.set(NEW_KEY, "150");
       System.out.println(conf.get(DEPRECATED_KEY)); // 150
       System.out.println(conf.get(NEW_KEY)); // 150
     }
   `
   Then change the order of deprecate.conf and new.conf in hbase-site.xml: 
<property><name>new.conf</name><value>42</value></property> 
<property><name>deprecate.conf</name><value>99</value></property> 
   
   `
     public static void main(String[] args) {
       Configuration.addDeprecation(DEPRECATED_KEY, NEW_KEY);
       Configuration conf = HBaseConfiguration.create();
       System.out.println(conf.get(DEPRECATED_KEY)); // 99 
       System.out.println(conf.get(NEW_KEY)); // 99
   
       conf.set(DEPRECATED_KEY, "120");
       System.out.println(conf.get(DEPRECATED_KEY)); // 120
       System.out.println(conf.get(NEW_KEY)); // 120
   
       conf.set(NEW_KEY, "150");
       System.out.println(conf.get(DEPRECATED_KEY)); // 150
       System.out.println(conf.get(NEW_KEY)); // 150
     }
   `
   The user should not configure the deprecated and new configuration at the 
same time, so Test3 and Test4 can be ignored. 


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to