Browse Source

AMBARI-9559. RU: Finalize fails because Secondary Namenode was not deleted during HA Wizard (alejandro)

Alejandro Fernandez 10 years ago
parent
commit
ca074d01f8

+ 66 - 0
ambari-server/src/main/java/org/apache/ambari/server/checks/SecondaryNamenodeDeletedCheck.java

@@ -0,0 +1,66 @@
+/*
+ * 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 org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.controller.PrereqCheckRequest;
+import org.apache.ambari.server.stack.MasterHostResolver;
+import org.apache.ambari.server.state.Cluster;
+import org.apache.ambari.server.state.ServiceComponent;
+import org.apache.ambari.server.state.stack.PrereqCheckStatus;
+import org.apache.ambari.server.state.stack.PrereqCheckType;
+import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.commons.lang.StringUtils;
+
+import java.util.Set;
+
+/**
+ * Checks that the Secondary NameNode is not present on any of the hosts.
+ */
+public class SecondaryNamenodeDeletedCheck extends AbstractCheckDescriptor {
+
+  /**
+   * Constructor.
+   */
+  public SecondaryNamenodeDeletedCheck() {
+    super("SECONDARY_NAMENODE_MUST_BE_DELETED", PrereqCheckType.SERVICE, "The SECONDARY_NAMENODE component must be deleted from all hosts");
+  }
+
+  @Override
+  public boolean isApplicable(PrereqCheckRequest request) throws AmbariException {
+    final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
+    return cluster.getService(MasterHostResolver.Service.HDFS.name()) != null;
+  }
+
+  @Override
+  public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) throws AmbariException {
+    final String clusterName = request.getClusterName();
+
+    final Cluster cluster = clustersProvider.get().getCluster(clusterName);
+    ServiceComponent serviceComponent = cluster.getService(MasterHostResolver.Service.HDFS.name()).getServiceComponent("SECONDARY_NAMENODE");
+    if (serviceComponent !=  null) {
+      Set<String> hosts = serviceComponent.getServiceComponentHosts().keySet();
+
+      if (!hosts.isEmpty()) {
+        prerequisiteCheck.getFailedOn().add(serviceComponent.getName());
+        prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
+        prerequisiteCheck.setFailReason("The SECONDARY_NAMENODE component must be deleted from host(s): " + StringUtils.join(hosts, ", ") + ". Please use the REST API to delete it.");
+      }
+    }
+  }
+}

+ 14 - 1
ambari-server/src/main/java/org/apache/ambari/server/controller/internal/PreUpgradeCheckResourceProvider.java

@@ -25,7 +25,17 @@ import java.util.List;
 import java.util.ArrayList;
 
 import org.apache.ambari.server.StaticallyInject;
-import org.apache.ambari.server.checks.*;
+import org.apache.ambari.server.checks.AbstractCheckDescriptor;
+import org.apache.ambari.server.checks.HostsHeartbeatCheck;
+import org.apache.ambari.server.checks.HostsMasterMaintenanceCheck;
+import org.apache.ambari.server.checks.HostsRepositoryVersionCheck;
+import org.apache.ambari.server.checks.ServicesDecommissionCheck;
+import org.apache.ambari.server.checks.ServicesJobsDistributedCacheCheck;
+import org.apache.ambari.server.checks.ServicesMaintenanceModeCheck;
+import org.apache.ambari.server.checks.ServicesNamenodeHighAvailabilityCheck;
+import org.apache.ambari.server.checks.SecondaryNamenodeDeletedCheck;
+import org.apache.ambari.server.checks.ServicesUpCheck;
+import org.apache.ambari.server.checks.ServicesYarnWorkPreservingCheck;
 import org.apache.ambari.server.state.CheckHelper;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.controller.PrereqCheckRequest;
@@ -68,6 +78,8 @@ public class PreUpgradeCheckResourceProvider extends ReadOnlyResourceProvider {
   @Inject
   private static ServicesNamenodeHighAvailabilityCheck servicesNamenodeHighAvailabilityCheck;
   @Inject
+  private static SecondaryNamenodeDeletedCheck secondaryNamenodeDeletedCheck;
+  @Inject
   private static ServicesYarnWorkPreservingCheck servicesYarnWorkPreservingCheck;
   @Inject
   private static ServicesDecommissionCheck servicesDecommissionCheck;
@@ -89,6 +101,7 @@ public class PreUpgradeCheckResourceProvider extends ReadOnlyResourceProvider {
       add(hostsRepositoryVersionCheck);
       add(servicesMaintenanceModeCheck);
       add(servicesNamenodeHighAvailabilityCheck);
+      add(secondaryNamenodeDeletedCheck);
       add(servicesYarnWorkPreservingCheck);
       add(servicesDecommissionCheck);
       add(servicesJobsDistributedCacheCheck);

+ 1 - 1
ambari-server/src/main/java/org/apache/ambari/server/stack/MasterHostResolver.java

@@ -51,7 +51,7 @@ public class MasterHostResolver {
   private String m_version;
   private ConfigHelper m_configHelper;
 
-  enum Service {
+  public enum Service {
     HDFS,
     HBASE,
     YARN,