You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by dm...@apache.org on 2015/02/11 20:11:06 UTC

ambari git commit: AMBARI-9405. RU YARN related pre-upgrade check UI shows unclear message (yshylov via dlysnichenko)

Repository: ambari
Updated Branches:
  refs/heads/trunk fad54e324 -> d248fd7c1


AMBARI-9405. RU YARN related pre-upgrade check UI shows unclear message (yshylov via dlysnichenko)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/d248fd7c
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/d248fd7c
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/d248fd7c

Branch: refs/heads/trunk
Commit: d248fd7c150db9e827fe5f1b837c43d89e6fef08
Parents: fad54e3
Author: Lisnichenko Dmitro <dl...@hortonworks.com>
Authored: Wed Feb 11 21:10:22 2015 +0200
Committer: Lisnichenko Dmitro <dl...@hortonworks.com>
Committed: Wed Feb 11 21:10:22 2015 +0200

----------------------------------------------------------------------
 .../server/checks/AbstractCheckDescriptor.java  | 39 ++++++++--
 .../server/checks/HostsHeartbeatCheck.java      |  2 +-
 .../checks/HostsMasterMaintenanceCheck.java     |  2 +-
 .../checks/HostsRepositoryVersionCheck.java     |  3 +-
 .../checks/ServicesDecommissionCheck.java       |  2 +-
 .../checks/ServicesMaintenanceModeCheck.java    |  2 +-
 .../ServicesNamenodeHighAvailabilityCheck.java  |  2 +-
 .../ambari/server/checks/ServicesUpCheck.java   |  2 +-
 .../checks/ServicesYarnWorkPreservingCheck.java |  3 +-
 .../server/api/services/GroupServiceTest.java   |  1 +
 .../checks/AbstractCheckDescriptorTest.java     | 76 ++++++++++++++++++++
 11 files changed, 121 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/d248fd7c/ambari-server/src/main/java/org/apache/ambari/server/checks/AbstractCheckDescriptor.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/AbstractCheckDescriptor.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/AbstractCheckDescriptor.java
index 4e2e2ab..c43d843 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/AbstractCheckDescriptor.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/AbstractCheckDescriptor.java
@@ -17,8 +17,7 @@
  */
 package org.apache.ambari.server.checks;
 
-import com.google.inject.Inject;
-import com.google.inject.Provider;
+import java.util.List;
 
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
@@ -26,9 +25,13 @@ import org.apache.ambari.server.controller.PrereqCheckRequest;
 import org.apache.ambari.server.orm.dao.HostVersionDAO;
 import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
 import org.apache.ambari.server.state.Clusters;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
 import org.apache.ambari.server.state.stack.PrereqCheckType;
+import org.apache.ambari.server.state.stack.PrerequisiteCheck;
 import org.apache.ambari.server.state.stack.upgrade.RepositoryVersionHelper;
+import org.apache.commons.lang.StringUtils;
+
+import com.google.inject.Inject;
+import com.google.inject.Provider;
 
 /**
  * Describes prerequisite check.
@@ -88,4 +91,32 @@ public abstract class AbstractCheckDescriptor {
    * @throws AmbariException if server error happens
    */
   public abstract void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) throws AmbariException;
-}
\ No newline at end of file
+
+  /**
+   * Formats lists of given entities to human readable form:
+   * [entity1] -> {entity1} {noun}
+   * [entity1, entity2] -> {entity1} and {entity2} {noun}s
+   * [entity1, entity2, entity3] -> {entity1}, {entity2} and {entity3} {noun}s
+   * The noun for the entities is taken from check type, it may be cluster, service or host.
+   *
+   * @param entities list of entities to format
+   * @return formatted entity list
+   */
+  protected String formatEntityList(List<String> entities) {
+    if (entities == null || entities.isEmpty()) {
+      return "";
+    }
+    final StringBuilder formatted = new StringBuilder(StringUtils.join(entities, ", "));
+    if (entities.size() > 1) {
+      formatted.replace(formatted.lastIndexOf(","), formatted.lastIndexOf(",") + 1, " and");
+    }
+    if (type != null) {
+      formatted.append(" ").append(type.name().toLowerCase());
+      if (entities.size() > 1) {
+        formatted.append("s");
+      }
+    }
+    return formatted.toString();
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/d248fd7c/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsHeartbeatCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsHeartbeatCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsHeartbeatCheck.java
index 917cbac..9e76928 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsHeartbeatCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsHeartbeatCheck.java
@@ -54,7 +54,7 @@ public class HostsHeartbeatCheck extends AbstractCheckDescriptor {
     }
     if (!prerequisiteCheck.getFailedOn().isEmpty()) {
       prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
-      prerequisiteCheck.setFailReason("Some hosts are not heartbeating with the server");
+      prerequisiteCheck.setFailReason(formatEntityList(prerequisiteCheck.getFailedOn()) + " must be heartbeating with the server");
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/d248fd7c/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheck.java
index f12b473..7bdce47 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheck.java
@@ -85,7 +85,7 @@ public class HostsMasterMaintenanceCheck extends AbstractCheckDescriptor {
     }
     if (!prerequisiteCheck.getFailedOn().isEmpty()) {
       prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
-      prerequisiteCheck.setFailReason("Some hosts with master components are in Maintenance Mode");
+      prerequisiteCheck.setFailReason(formatEntityList(prerequisiteCheck.getFailedOn()) + " must not be in in Maintenance Mode as they have master components installed");
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/d248fd7c/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheck.java
index 53e628c..f9bcdd9 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheck.java
@@ -73,8 +73,7 @@ public class HostsRepositoryVersionCheck extends AbstractCheckDescriptor {
     }
     if (!prerequisiteCheck.getFailedOn().isEmpty()) {
       prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
-      prerequisiteCheck.setFailReason("Some hosts do not have repository version " + request.getRepositoryVersion() + " installed");
+      prerequisiteCheck.setFailReason(formatEntityList(prerequisiteCheck.getFailedOn()) + " must have repository version " + request.getRepositoryVersion() + " installed");
     }
-
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/d248fd7c/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesDecommissionCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesDecommissionCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesDecommissionCheck.java
index 1bea93c..6ac0326 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesDecommissionCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesDecommissionCheck.java
@@ -56,7 +56,7 @@ public class ServicesDecommissionCheck extends AbstractCheckDescriptor {
     }
     if (!prerequisiteCheck.getFailedOn().isEmpty()) {
       prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
-      prerequisiteCheck.setFailReason("There are services in decommission or decommissioning state");
+      prerequisiteCheck.setFailReason(formatEntityList(prerequisiteCheck.getFailedOn()) + " must not be in decommissioned or decommissioning state");
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/d248fd7c/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMaintenanceModeCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMaintenanceModeCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMaintenanceModeCheck.java
index 332b58a..5043d31 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMaintenanceModeCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMaintenanceModeCheck.java
@@ -53,7 +53,7 @@ public class ServicesMaintenanceModeCheck extends AbstractCheckDescriptor {
     }
     if (!prerequisiteCheck.getFailedOn().isEmpty()) {
       prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
-      prerequisiteCheck.setFailReason("Some services are in Maintenance Mode");
+      prerequisiteCheck.setFailReason(formatEntityList(prerequisiteCheck.getFailedOn()) + " must not be in Maintenance Mode");
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/d248fd7c/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheck.java
index ceb61ad..8ab503c 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheck.java
@@ -57,7 +57,7 @@ public class ServicesNamenodeHighAvailabilityCheck extends AbstractCheckDescript
     if (!config.getProperties().containsKey("dfs.nameservices")) {
       prerequisiteCheck.getFailedOn().add("HDFS");
       prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
-      prerequisiteCheck.setFailReason("Namenode high availability is disabled");
+      prerequisiteCheck.setFailReason("Namenode high availability is disabled. Verify that dfs.nameservices property is present in hdfs-site.xml");
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/d248fd7c/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesUpCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesUpCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesUpCheck.java
index a4a18e6..e2b7657 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesUpCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesUpCheck.java
@@ -56,7 +56,7 @@ public class ServicesUpCheck extends AbstractCheckDescriptor {
 
     if (!prerequisiteCheck.getFailedOn().isEmpty()) {
       prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
-      prerequisiteCheck.setFailReason("Some services are down");
+      prerequisiteCheck.setFailReason(formatEntityList(prerequisiteCheck.getFailedOn()) + " must be STARTED");
     }
   }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/d248fd7c/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesYarnWorkPreservingCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesYarnWorkPreservingCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesYarnWorkPreservingCheck.java
index f9249b2..3b06076 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesYarnWorkPreservingCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesYarnWorkPreservingCheck.java
@@ -65,7 +65,8 @@ public class ServicesYarnWorkPreservingCheck extends AbstractCheckDescriptor {
       !BooleanUtils.toBoolean(config.getProperties().get("yarn.resourcemanager.work-preserving-recovery.enabled"))) {
       prerequisiteCheck.getFailedOn().add("YARN");
       prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
-      prerequisiteCheck.setFailReason("YARN doesn't have work preserving restart, yarn.resourcemanager.work-preserving-recovery.enabled property is missing");
+      prerequisiteCheck.setFailReason("YARN doesn't have work preserving restart. Verify that yarn.resourcemanager.work-preserving-recovery.enabled property"
+          + " is present in yarn-site.xml and is set to true");
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/d248fd7c/ambari-server/src/test/java/org/apache/ambari/server/api/services/GroupServiceTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/services/GroupServiceTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/services/GroupServiceTest.java
index 68ee4a5..fdf740e 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/api/services/GroupServiceTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/api/services/GroupServiceTest.java
@@ -36,6 +36,7 @@ import java.util.Map;
  */
 public class GroupServiceTest extends BaseServiceTest {
 
+  @Override
   public List<ServiceTestInvocation> getTestInvocations() throws Exception {
     List<ServiceTestInvocation> listInvocations = new ArrayList<ServiceTestInvocation>();
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/d248fd7c/ambari-server/src/test/java/org/apache/ambari/server/checks/AbstractCheckDescriptorTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/AbstractCheckDescriptorTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/AbstractCheckDescriptorTest.java
new file mode 100644
index 0000000..716d033
--- /dev/null
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/AbstractCheckDescriptorTest.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ambari.server.checks;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.Assert;
+
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.controller.PrereqCheckRequest;
+import org.apache.ambari.server.state.stack.PrereqCheckType;
+import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.junit.Test;
+
+/**
+ * Unit tests for AbstractCheckDescriptor
+ */
+public class AbstractCheckDescriptorTest {
+
+  private class TestCheckImpl extends AbstractCheckDescriptor {
+
+    public TestCheckImpl(String id, PrereqCheckType type, String description) {
+      super(id, type, description);
+    }
+
+    @Override
+    public void perform(PrerequisiteCheck prerequisiteCheck,
+        PrereqCheckRequest request) throws AmbariException {
+    }
+  }
+
+  @Test
+  public void testFormatEntityList() {
+    AbstractCheckDescriptor check = new TestCheckImpl(null, PrereqCheckType.HOST, null);
+
+    Assert.assertEquals("", check.formatEntityList(null));
+
+    final List<String> failedOn = new ArrayList<String>();
+    Assert.assertEquals("", check.formatEntityList(failedOn));
+
+    failedOn.add("host1");
+    Assert.assertEquals("host1 host", check.formatEntityList(failedOn));
+
+    failedOn.add("host2");
+    Assert.assertEquals("host1 and host2 hosts", check.formatEntityList(failedOn));
+
+    failedOn.add("host3");
+    Assert.assertEquals("host1, host2 and host3 hosts", check.formatEntityList(failedOn));
+
+    check = new TestCheckImpl(null, PrereqCheckType.CLUSTER, null);
+    Assert.assertEquals("host1, host2 and host3 clusters", check.formatEntityList(failedOn));
+
+    check = new TestCheckImpl(null, PrereqCheckType.SERVICE, null);
+    Assert.assertEquals("host1, host2 and host3 services", check.formatEntityList(failedOn));
+
+    check = new TestCheckImpl(null, null, null);
+    Assert.assertEquals("host1, host2 and host3", check.formatEntityList(failedOn));
+  }
+
+}