浏览代码

YARN-8810. Fixed a YARN service bug in comparing ConfigFile object.
Contributed by Chandni Singh

Eric Yang 6 年之前
父节点
当前提交
3bfd214a59

+ 1 - 1
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/UpgradeComponentsFinder.java

@@ -88,7 +88,7 @@ public interface UpgradeComponentsFinder {
       }
 
       if (!Objects.equals(currentDef.getConfiguration(),
-          currentDef.getConfiguration())) {
+          targetDef.getConfiguration())) {
         return targetDef.getComponents();
       }
 

+ 2 - 1
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/api/records/ConfigFile.java

@@ -199,7 +199,8 @@ public class ConfigFile implements Serializable {
     ConfigFile configFile = (ConfigFile) o;
     return Objects.equals(this.type, configFile.type)
         && Objects.equals(this.destFile, configFile.destFile)
-        && Objects.equals(this.srcFile, configFile.srcFile);
+        && Objects.equals(this.srcFile, configFile.srcFile)
+        && Objects.equals(this.properties, configFile.properties);
   }
 
   @Override

+ 37 - 3
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/test/java/org/apache/hadoop/yarn/service/TestDefaultUpgradeComponentsFinder.java

@@ -17,14 +17,15 @@
  */
 package org.apache.hadoop.yarn.service;
 
+import com.google.common.collect.Lists;
 import org.apache.hadoop.yarn.service.api.records.Component;
+import org.apache.hadoop.yarn.service.api.records.ConfigFile;
+import org.apache.hadoop.yarn.service.api.records.Configuration;
 import org.apache.hadoop.yarn.service.api.records.Service;
 import org.junit.Assert;
 import org.junit.Test;
 
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
+import java.util.*;
 
 import static org.junit.Assert.assertEquals;
 
@@ -86,4 +87,37 @@ public class TestDefaultUpgradeComponentsFinder {
         expected, finder.findTargetComponentSpecs(currentDef,
             targetDef));
   }
+
+  @Test
+  public void testChangeInConfigFileProperty() {
+    ConfigFile file = new ConfigFile().srcFile("src").destFile("dest")
+        .type(ConfigFile.TypeEnum.HADOOP_XML);
+
+    Map<String, String> props = new HashMap<>();
+    props.put("k1", "v1");
+    file.setProperties(props);
+
+    Configuration conf = new Configuration().files(Lists.newArrayList(file));
+
+    Service currentDef = TestServiceManager.createBaseDef("test");
+    currentDef.setConfiguration(conf);
+
+    // new spec has changes in config file property
+    file = new ConfigFile().srcFile("src").destFile("dest")
+        .type(ConfigFile.TypeEnum.HADOOP_XML);
+    Map<String, String> changedProps = new HashMap<>();
+    changedProps.put("k1", "v2");
+    file.setProperties(changedProps);
+
+    conf = new Configuration().files(Lists.newArrayList(file));
+
+    Service targetDef =  TestServiceManager.createBaseDef("test");
+    targetDef.setConfiguration(conf);
+
+    List<Component> expected = new ArrayList<>();
+    expected.addAll(targetDef.getComponents());
+
+    assertEquals("all components needs upgrade",
+        expected, finder.findTargetComponentSpecs(currentDef, targetDef));
+  }
 }