Browse Source

AMBARI-11316. Prerequisite config checks should provide detail about merged values (ncole)

Nate Cole 10 years ago
parent
commit
08e5eef44d

+ 29 - 1
ambari-server/src/main/java/org/apache/ambari/server/checks/ConfigurationMergeCheck.java

@@ -100,12 +100,31 @@ public class ConfigurationMergeCheck extends AbstractCheckDescriptor {
         ThreeWayValue twv = configEntry.getValue();
         ThreeWayValue twv = configEntry.getValue();
         if (null == twv.oldStackValue) { // !!! did not exist and in the map means changed
         if (null == twv.oldStackValue) { // !!! did not exist and in the map means changed
           failedTypes.add(entry.getKey());
           failedTypes.add(entry.getKey());
+
           prerequisiteCheck.getFailedOn().add(entry.getKey() + "/" + configEntry.getKey());
           prerequisiteCheck.getFailedOn().add(entry.getKey() + "/" + configEntry.getKey());
+
+          MergeDetail md = new MergeDetail();
+          md.type = entry.getKey();
+          md.property = configEntry.getKey();
+          md.current = twv.savedValue;
+          md.new_stack_value = twv.newStackValue;
+          md.result_value = md.current;
+          prerequisiteCheck.getFailedDetail().add(md);
+
         } else if (!twv.oldStackValue.equals(twv.savedValue)) {  // !!! value customized
         } else if (!twv.oldStackValue.equals(twv.savedValue)) {  // !!! value customized
           if (null == twv.newStackValue || // !!! not in new stack
           if (null == twv.newStackValue || // !!! not in new stack
               !twv.oldStackValue.equals(twv.newStackValue)) { // !!! or the default value changed
               !twv.oldStackValue.equals(twv.newStackValue)) { // !!! or the default value changed
             failedTypes.add(entry.getKey());
             failedTypes.add(entry.getKey());
+
             prerequisiteCheck.getFailedOn().add(entry.getKey() + "/" + configEntry.getKey());
             prerequisiteCheck.getFailedOn().add(entry.getKey() + "/" + configEntry.getKey());
+
+            MergeDetail md = new MergeDetail();
+            md.type = entry.getKey();
+            md.property = configEntry.getKey();
+            md.current = twv.savedValue;
+            md.new_stack_value = twv.newStackValue;
+            md.result_value = md.current;
+            prerequisiteCheck.getFailedDetail().add(md);
           }
           }
         }
         }
       }
       }
@@ -123,6 +142,15 @@ public class ConfigurationMergeCheck extends AbstractCheckDescriptor {
     }
     }
   }
   }
 
 
-
+  /**
+   * Used to represent specific detail about merge failures.
+   */
+  public static class MergeDetail {
+    public String type = null;
+    public String property = null;
+    public String current = null;
+    public String new_stack_value = null;
+    public String result_value = null;
+  }
 
 
 }
 }

+ 3 - 0
ambari-server/src/main/java/org/apache/ambari/server/controller/internal/PreUpgradeCheckResourceProvider.java

@@ -61,6 +61,7 @@ public class PreUpgradeCheckResourceProvider extends ReadOnlyResourceProvider {
   public static final String UPGRADE_CHECK_STATUS_PROPERTY_ID             = PropertyHelper.getPropertyId("UpgradeChecks", "status");
   public static final String UPGRADE_CHECK_STATUS_PROPERTY_ID             = PropertyHelper.getPropertyId("UpgradeChecks", "status");
   public static final String UPGRADE_CHECK_REASON_PROPERTY_ID             = PropertyHelper.getPropertyId("UpgradeChecks", "reason");
   public static final String UPGRADE_CHECK_REASON_PROPERTY_ID             = PropertyHelper.getPropertyId("UpgradeChecks", "reason");
   public static final String UPGRADE_CHECK_FAILED_ON_PROPERTY_ID          = PropertyHelper.getPropertyId("UpgradeChecks", "failed_on");
   public static final String UPGRADE_CHECK_FAILED_ON_PROPERTY_ID          = PropertyHelper.getPropertyId("UpgradeChecks", "failed_on");
+  public static final String UPGRADE_CHECK_FAILED_DETAIL_PROPERTY_ID      = PropertyHelper.getPropertyId("UpgradeChecks", "failed_detail");
   public static final String UPGRADE_CHECK_CHECK_TYPE_PROPERTY_ID         = PropertyHelper.getPropertyId("UpgradeChecks", "check_type");
   public static final String UPGRADE_CHECK_CHECK_TYPE_PROPERTY_ID         = PropertyHelper.getPropertyId("UpgradeChecks", "check_type");
   public static final String UPGRADE_CHECK_CLUSTER_NAME_PROPERTY_ID       = PropertyHelper.getPropertyId("UpgradeChecks", "cluster_name");
   public static final String UPGRADE_CHECK_CLUSTER_NAME_PROPERTY_ID       = PropertyHelper.getPropertyId("UpgradeChecks", "cluster_name");
   public static final String UPGRADE_CHECK_REPOSITORY_VERSION_PROPERTY_ID = PropertyHelper.getPropertyId("UpgradeChecks", "repository_version");
   public static final String UPGRADE_CHECK_REPOSITORY_VERSION_PROPERTY_ID = PropertyHelper.getPropertyId("UpgradeChecks", "repository_version");
@@ -82,6 +83,7 @@ public class PreUpgradeCheckResourceProvider extends ReadOnlyResourceProvider {
       UPGRADE_CHECK_STATUS_PROPERTY_ID,
       UPGRADE_CHECK_STATUS_PROPERTY_ID,
       UPGRADE_CHECK_REASON_PROPERTY_ID,
       UPGRADE_CHECK_REASON_PROPERTY_ID,
       UPGRADE_CHECK_FAILED_ON_PROPERTY_ID,
       UPGRADE_CHECK_FAILED_ON_PROPERTY_ID,
+      UPGRADE_CHECK_FAILED_DETAIL_PROPERTY_ID,
       UPGRADE_CHECK_CHECK_TYPE_PROPERTY_ID,
       UPGRADE_CHECK_CHECK_TYPE_PROPERTY_ID,
       UPGRADE_CHECK_CLUSTER_NAME_PROPERTY_ID,
       UPGRADE_CHECK_CLUSTER_NAME_PROPERTY_ID,
       UPGRADE_CHECK_REPOSITORY_VERSION_PROPERTY_ID);
       UPGRADE_CHECK_REPOSITORY_VERSION_PROPERTY_ID);
@@ -144,6 +146,7 @@ public class PreUpgradeCheckResourceProvider extends ReadOnlyResourceProvider {
         setResourceProperty(resource, UPGRADE_CHECK_STATUS_PROPERTY_ID, prerequisiteCheck.getStatus(), requestedIds);
         setResourceProperty(resource, UPGRADE_CHECK_STATUS_PROPERTY_ID, prerequisiteCheck.getStatus(), requestedIds);
         setResourceProperty(resource, UPGRADE_CHECK_REASON_PROPERTY_ID, prerequisiteCheck.getFailReason(), requestedIds);
         setResourceProperty(resource, UPGRADE_CHECK_REASON_PROPERTY_ID, prerequisiteCheck.getFailReason(), requestedIds);
         setResourceProperty(resource, UPGRADE_CHECK_FAILED_ON_PROPERTY_ID, prerequisiteCheck.getFailedOn(), requestedIds);
         setResourceProperty(resource, UPGRADE_CHECK_FAILED_ON_PROPERTY_ID, prerequisiteCheck.getFailedOn(), requestedIds);
+        setResourceProperty(resource, UPGRADE_CHECK_FAILED_DETAIL_PROPERTY_ID,prerequisiteCheck.getFailedDetail(), requestedIds);
         setResourceProperty(resource, UPGRADE_CHECK_CHECK_TYPE_PROPERTY_ID, prerequisiteCheck.getType(), requestedIds);
         setResourceProperty(resource, UPGRADE_CHECK_CHECK_TYPE_PROPERTY_ID, prerequisiteCheck.getType(), requestedIds);
         setResourceProperty(resource, UPGRADE_CHECK_CLUSTER_NAME_PROPERTY_ID, prerequisiteCheck.getClusterName(), requestedIds);
         setResourceProperty(resource, UPGRADE_CHECK_CLUSTER_NAME_PROPERTY_ID, prerequisiteCheck.getClusterName(), requestedIds);
         if (upgradeCheckRequest.getRepositoryVersion() != null) {
         if (upgradeCheckRequest.getRepositoryVersion() != null) {

+ 6 - 0
ambari-server/src/main/java/org/apache/ambari/server/state/stack/PrerequisiteCheck.java

@@ -32,6 +32,7 @@ public class PrerequisiteCheck {
   private PrereqCheckStatus m_status = PrereqCheckStatus.PASS;
   private PrereqCheckStatus m_status = PrereqCheckStatus.PASS;
   private String m_failReason = "";
   private String m_failReason = "";
   private List<String> m_failedOn = new ArrayList<String>();
   private List<String> m_failedOn = new ArrayList<String>();
+  private List<Object> m_failedDetail = new ArrayList<Object>();
 
 
   public PrerequisiteCheck(CheckDescription description, String clusterName) {
   public PrerequisiteCheck(CheckDescription description, String clusterName) {
     m_description = description;
     m_description = description;
@@ -66,6 +67,11 @@ public class PrerequisiteCheck {
     return m_failedOn;
     return m_failedOn;
   }
   }
 
 
+  public List<Object> getFailedDetail() {
+    return m_failedDetail;
+  }
+
+
   public void setFailedOn(List<String> failedOn) {
   public void setFailedOn(List<String> failedOn) {
     m_failedOn = failedOn;
     m_failedOn = failedOn;
   }
   }

+ 16 - 5
ambari-server/src/test/java/org/apache/ambari/server/checks/ConfigurationMergeCheckTest.java

@@ -164,12 +164,12 @@ public class ConfigurationMergeCheckTest {
     PropertyInfo pi10 = new PropertyInfo();
     PropertyInfo pi10 = new PropertyInfo();
     pi10.setFilename(CONFIG_FILE);
     pi10.setFilename(CONFIG_FILE);
     pi10.setName(CONFIG_PROPERTY);
     pi10.setName(CONFIG_PROPERTY);
-    pi10.setValue("1024m");
+    pi10.setValue("1024");
 
 
     PropertyInfo pi11 = new PropertyInfo();
     PropertyInfo pi11 = new PropertyInfo();
     pi11.setFilename(CONFIG_FILE);
     pi11.setFilename(CONFIG_FILE);
     pi11.setName(CONFIG_PROPERTY);
     pi11.setName(CONFIG_PROPERTY);
-    pi11.setValue("1024m");
+    pi11.setValue("1024");
 
 
     expect(ami.getServiceProperties("HDP", "1.0", "HDFS")).andReturn(
     expect(ami.getServiceProperties("HDP", "1.0", "HDFS")).andReturn(
         Collections.singleton(pi10)).anyTimes();
         Collections.singleton(pi10)).anyTimes();
@@ -190,17 +190,25 @@ public class ConfigurationMergeCheckTest {
     Assert.assertEquals("Expect no warnings", 0, check.getFailedOn().size());
     Assert.assertEquals("Expect no warnings", 0, check.getFailedOn().size());
 
 
     check = new PrerequisiteCheck(null, "cluster");
     check = new PrerequisiteCheck(null, "cluster");
-    pi11.setValue("1026m");
+    m_configMap.put(CONFIG_PROPERTY, "1025m");
+    pi11.setValue("1026");
     cmc.perform(check, request);
     cmc.perform(check, request);
     Assert.assertEquals("Expect warning when user-set has changed from new default",
     Assert.assertEquals("Expect warning when user-set has changed from new default",
         1, check.getFailedOn().size());
         1, check.getFailedOn().size());
+    Assert.assertEquals(1, check.getFailedDetail().size());
+    ConfigurationMergeCheck.MergeDetail detail = (ConfigurationMergeCheck.MergeDetail) check.getFailedDetail().get(0);
+    Assert.assertEquals("1025m", detail.current);
+    Assert.assertEquals("1026m", detail.new_stack_value);
+    Assert.assertEquals("1025m", detail.result_value);
+    Assert.assertEquals(CONFIG_TYPE, detail.type);
+    Assert.assertEquals(CONFIG_PROPERTY, detail.property);
 
 
     check = new PrerequisiteCheck(null, "cluster");
     check = new PrerequisiteCheck(null, "cluster");
     pi11.setName(CONFIG_PROPERTY + ".foo");
     pi11.setName(CONFIG_PROPERTY + ".foo");
     cmc.perform(check, request);
     cmc.perform(check, request);
     Assert.assertEquals("Expect no warning when user new stack is empty",
     Assert.assertEquals("Expect no warning when user new stack is empty",
         0, check.getFailedOn().size());
         0, check.getFailedOn().size());
-
+    Assert.assertEquals(0, check.getFailedDetail().size());
 
 
     check = new PrerequisiteCheck(null, "cluster");
     check = new PrerequisiteCheck(null, "cluster");
     pi11.setName(CONFIG_PROPERTY);
     pi11.setName(CONFIG_PROPERTY);
@@ -208,7 +216,10 @@ public class ConfigurationMergeCheckTest {
     cmc.perform(check, request);
     cmc.perform(check, request);
     Assert.assertEquals("Expect warning when user old stack is empty, and value changed",
     Assert.assertEquals("Expect warning when user old stack is empty, and value changed",
         1, check.getFailedOn().size());
         1, check.getFailedOn().size());
-
+    Assert.assertEquals(1, check.getFailedDetail().size());
+    detail = (ConfigurationMergeCheck.MergeDetail) check.getFailedDetail().get(0);
+    Assert.assertEquals("1025m", detail.current);
+    Assert.assertEquals("1026m", detail.new_stack_value);
   }
   }
 
 
   private RepositoryVersionEntity createFor(final String stackVersion) {
   private RepositoryVersionEntity createFor(final String stackVersion) {