You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ds...@apache.org on 2014/05/07 17:00:54 UTC

git commit: AMBARI-5688 Zookeeper smoke test failed after being triggered after deleting a host, containing ZookeeperServer (dsen)

Repository: ambari
Updated Branches:
  refs/heads/trunk 4c2d80a17 -> 414e628b7


AMBARI-5688 Zookeeper smoke test failed after being triggered after deleting a host, containing ZookeeperServer (dsen)


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

Branch: refs/heads/trunk
Commit: 414e628b764f2bb05f50877d3b5292979f800b10
Parents: 4c2d80a
Author: Dmitry Sen <ds...@hortonworks.com>
Authored: Wed May 7 18:00:41 2014 +0300
Committer: Dmitry Sen <ds...@hortonworks.com>
Committed: Wed May 7 18:00:41 2014 +0300

----------------------------------------------------------------------
 .../server/api/services/AmbariMetaInfo.java     | 16 +++++
 .../server/api/util/StackExtensionHelper.java   |  5 ++
 .../AmbariManagementControllerImpl.java         | 31 +++++++-
 .../apache/ambari/server/state/ServiceInfo.java | 12 ++++
 .../HDP/1.3.2/services/ZOOKEEPER/metainfo.xml   |  1 +
 .../HDP/2.0.6/services/ZOOKEEPER/metainfo.xml   |  1 +
 .../server/api/services/AmbariMetaInfoTest.java |  6 ++
 .../api/util/StackExtensionHelperTest.java      |  4 +-
 .../AmbariManagementControllerTest.java         | 48 +++++++++++++
 .../HDP/2.0.7/services/ZOOKEEPER/metainfo.xml   | 75 ++++++++++++++++++++
 10 files changed, 196 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/414e628b/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java
index 1d2e5cc..e44777f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java
@@ -562,6 +562,22 @@ public class AmbariMetaInfo {
     return monitoringServices;
   }
 
+  public Set<String> getRestartRequiredServicesNames(String stackName, String version)
+    throws AmbariException{
+
+    HashSet<String> needRestartServices = new HashSet<String>();
+    
+    List<ServiceInfo> serviceInfos = getSupportedServices(stackName, version);
+     
+    
+    for (ServiceInfo service : serviceInfos) {
+      if (service.isRestartRequiredAfterChange() != null && service.isRestartRequiredAfterChange()) {
+        needRestartServices.add(service.getName());
+      }
+    }
+    return needRestartServices;
+  }  
+  
   public List<StackInfo> getSupportedStacks() {
     return stacksResult;
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/414e628b/ambari-server/src/main/java/org/apache/ambari/server/api/util/StackExtensionHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/util/StackExtensionHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/api/util/StackExtensionHelper.java
index 89afb14..57281a0 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/util/StackExtensionHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/util/StackExtensionHelper.java
@@ -129,6 +129,11 @@ public class StackExtensionHelper {
     mergedServiceInfo.setConfigDependencies(
       childService.getConfigDependencies() != null ?
         childService.getConfigDependencies() : new ArrayList<String>());
+    
+    mergedServiceInfo.setRestartRequiredAfterChange(
+            (childService.isRestartRequiredAfterChange() != null) 
+                    ? childService.isRestartRequiredAfterChange()
+                    : parentService.isRestartRequiredAfterChange());
 
     Map<String, ServiceOsSpecific> osSpecific = childService.getOsSpecifics();
     if (! osSpecific.isEmpty()) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/414e628b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
index c4f3994..94d3c62 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
@@ -426,6 +426,8 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
       }
       ServiceComponent sc = s.getServiceComponent(
           request.getComponentName());
+     
+      setRestartRequiredServices(s);
 
       Host host;
       try {
@@ -560,6 +562,28 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
         }
       }
     }
+  } 
+  
+  private void setRestartRequiredServices(
+          Service service) throws AmbariException {
+
+    Cluster cluster = service.getCluster();
+    StackId stackId = cluster.getCurrentStackVersion();
+    Set<String> needRestartServices = ambariMetaInfo.getRestartRequiredServicesNames(
+            stackId.getStackName(), stackId.getStackVersion());
+    if (needRestartServices.contains(service.getName())) {
+      Map<String, ServiceComponent> m = service.getServiceComponents();
+      for (Entry<String, ServiceComponent> entry : m.entrySet()) {
+        ServiceComponent serviceComponent = entry.getValue();
+        if (serviceComponent.isMasterComponent()) {
+          Map<String, ServiceComponentHost> schMap = serviceComponent.getServiceComponentHosts();
+          for (Entry<String, ServiceComponentHost> sch : schMap.entrySet()) {
+            ServiceComponentHost serviceComponentHost = sch.getValue();
+            serviceComponentHost.setRestartRequired(true);
+          }
+        }
+      }
+    }
   }
 
 
@@ -2156,13 +2180,16 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
             "DISABLED/INIT/INSTALLED/INSTALL_FAILED/UNKNOWN state. Current=" + componentHost.getState() + ".");
       }
 
+      setRestartRequiredServices(service);
+              
       if (!safeToRemoveSCHs.containsKey(component)) {
         safeToRemoveSCHs.put(component, new HashSet<ServiceComponentHost>());
       }
       safeToRemoveSCHs.get(component).add(componentHost);
     }
-
-    for (Entry<ServiceComponent, Set<ServiceComponentHost>> entry : safeToRemoveSCHs.entrySet()) {
+    
+    for (Entry<ServiceComponent, Set<ServiceComponentHost>> entry 
+           : safeToRemoveSCHs.entrySet()) {
       for (ServiceComponentHost componentHost : entry.getValue()) {
         entry.getKey().deleteServiceComponentHosts(componentHost.getHostName());
       }

http://git-wip-us.apache.org/repos/asf/ambari/blob/414e628b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceInfo.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceInfo.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceInfo.java
index 8710fec..7ab384c 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceInfo.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceInfo.java
@@ -62,6 +62,18 @@ public class ServiceInfo {
   @XmlElement(defaultValue = "false")
   private boolean monitoringService;
   
+  @JsonIgnore
+  @XmlElement(name = "restartRequiredAfterChange")
+  private Boolean restartRequiredAfterChange;  
+
+  public Boolean isRestartRequiredAfterChange() {
+    return restartRequiredAfterChange;
+  }
+
+  public void setRestartRequiredAfterChange(Boolean restartRequiredAfterChange) {
+    this.restartRequiredAfterChange = restartRequiredAfterChange;
+  }  
+  
   @XmlTransient
   private File metricsFile = null;
   @XmlTransient

http://git-wip-us.apache.org/repos/asf/ambari/blob/414e628b/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/ZOOKEEPER/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/ZOOKEEPER/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/ZOOKEEPER/metainfo.xml
index 138affe..211551b 100644
--- a/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/ZOOKEEPER/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/ZOOKEEPER/metainfo.xml
@@ -68,6 +68,7 @@
         <config-type>global</config-type>
         <config-type>zookeeper-log4j</config-type>
       </configuration-dependencies>
+      <restartRequiredAfterChange>true</restartRequiredAfterChange>      
     </service>
   </services>
 </metainfo>

http://git-wip-us.apache.org/repos/asf/ambari/blob/414e628b/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/ZOOKEEPER/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/ZOOKEEPER/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/ZOOKEEPER/metainfo.xml
index 274a328..51f4a16 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/ZOOKEEPER/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/ZOOKEEPER/metainfo.xml
@@ -69,6 +69,7 @@
         <config-type>zookeeper-log4j</config-type>
         <config-type>zoo.cfg</config-type>
       </configuration-dependencies>
+      <restartRequiredAfterChange>true</restartRequiredAfterChange>
     </service>
   </services>
 </metainfo>

http://git-wip-us.apache.org/repos/asf/ambari/blob/414e628b/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java
index de0cbf7..fae9ce9 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java
@@ -115,6 +115,12 @@ public class AmbariMetaInfoTest {
   }
 
   @Test
+  public void getRestartRequiredServicesNames() throws AmbariException {
+    Set<String> res = metaInfo.getRestartRequiredServicesNames(STACK_NAME_HDP, "2.0.7");
+    assertEquals(1, res.size());
+  }  
+  
+  @Test
   public void getComponentsByService() throws AmbariException {
     List<ComponentInfo> components = metaInfo.getComponentsByService(
         STACK_NAME_HDP, STACK_VERSION_HDP, SERVICE_NAME_HDFS);

http://git-wip-us.apache.org/repos/asf/ambari/blob/414e628b/ambari-server/src/test/java/org/apache/ambari/server/api/util/StackExtensionHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/util/StackExtensionHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/util/StackExtensionHelperTest.java
index 68569c6..65ddc69 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/api/util/StackExtensionHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/api/util/StackExtensionHelperTest.java
@@ -52,7 +52,7 @@ public class StackExtensionHelperTest {
     StackExtensionHelper helper = new StackExtensionHelper(stackRoot);
     helper.populateServicesForStack(stackInfo);
     List<ServiceInfo> services =  stackInfo.getServices();
-    assertEquals(6, services.size());
+    assertEquals(7, services.size());
     for (ServiceInfo serviceInfo : services) {
       if (serviceInfo.getName().equals("HIVE")) {
         // Check old-style service
@@ -182,6 +182,8 @@ public class StackExtensionHelperTest {
         assertEquals("global", configDependencies.get(0));
         assertEquals("hbase-policy", configDependencies.get(1));
         assertEquals("hbase-site", configDependencies.get(2));
+      } else if(serviceInfo.getName().equals("ZOOKEEPER")) {
+        assertTrue(serviceInfo.isRestartRequiredAfterChange());
       } else {
         if (!serviceInfo.getName().equals("YARN") &&
             !serviceInfo.getName().equals("HDFS") &&

http://git-wip-us.apache.org/repos/asf/ambari/blob/414e628b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
index 6952568..c33fa0b 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
@@ -9420,6 +9420,54 @@ public class AmbariManagementControllerTest {
   }
 
   @Test
+  public void setRestartRequieredAfterChangeService() throws Exception {
+    String clusterName = "c1";
+    createCluster(clusterName);
+    Cluster cluster = clusters.getCluster(clusterName);
+    StackId stackId = new StackId("HDP-2.0.7");
+    cluster.setDesiredStackVersion(stackId);
+    cluster.setCurrentStackVersion(stackId);
+
+    String hdfsService = "HDFS";
+    String zookeeperService = "ZOOKEEPER";
+    createService(clusterName, hdfsService, null);
+    createService(clusterName, zookeeperService, null);
+
+    String namenode = "NAMENODE";
+    String datanode = "DATANODE";
+    String hdfsClient = "HDFS_CLIENT";
+    String zookeeperServer = "ZOOKEEPER_SERVER";
+    createServiceComponent(clusterName, hdfsService, namenode,
+      State.INIT);
+    createServiceComponent(clusterName, hdfsService, datanode,
+      State.INIT);
+    createServiceComponent(clusterName, zookeeperService, zookeeperServer,
+      State.INIT);
+
+    String host1 = "h1";
+    String host2 = "h2";
+
+    addHost(host1, clusterName);
+    createServiceComponentHost(clusterName, hdfsService, namenode, host1, null);
+    createServiceComponentHost(clusterName, hdfsService, datanode, host1, null);
+    createServiceComponentHost(clusterName, zookeeperService, zookeeperServer, host1,
+      null);
+
+    ServiceComponentHost zookeeperSch = null;
+    for (ServiceComponentHost sch : cluster.getServiceComponentHosts(host1)) {
+      if (sch.getServiceComponentName().equals(zookeeperServer)) {
+        zookeeperSch = sch;
+      }
+    }
+    assertFalse(zookeeperSch.isRestartRequired());
+
+    addHost(host2, clusterName);
+    createServiceComponentHost(clusterName, zookeeperService, zookeeperServer, host2, null);
+
+    assertTrue(zookeeperSch.isRestartRequired());
+  }  
+  
+  @Test
   public void testMaintenanceState() throws Exception {
     String clusterName = "c1";
     createCluster(clusterName);

http://git-wip-us.apache.org/repos/asf/ambari/blob/414e628b/ambari-server/src/test/resources/stacks/HDP/2.0.7/services/ZOOKEEPER/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/resources/stacks/HDP/2.0.7/services/ZOOKEEPER/metainfo.xml b/ambari-server/src/test/resources/stacks/HDP/2.0.7/services/ZOOKEEPER/metainfo.xml
new file mode 100644
index 0000000..51f4a16
--- /dev/null
+++ b/ambari-server/src/test/resources/stacks/HDP/2.0.7/services/ZOOKEEPER/metainfo.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0"?>
+<!--
+   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.
+-->
+<metainfo>
+  <schemaVersion>2.0</schemaVersion>
+  <services>
+    <service>
+      <name>ZOOKEEPER</name>
+      <comment>Centralized service which provides highly reliable distributed coordination</comment>
+      <version>3.4.5.2.0</version>
+      <components>
+
+        <component>
+          <name>ZOOKEEPER_SERVER</name>
+          <category>MASTER</category>
+          <cardinality>1</cardinality>
+          <commandScript>
+            <script>scripts/zookeeper_server.py</script>
+            <scriptType>PYTHON</scriptType>
+            <timeout>600</timeout>
+          </commandScript>
+        </component>
+
+        <component>
+          <name>ZOOKEEPER_CLIENT</name>
+          <category>CLIENT</category>
+          <cardinality>0+</cardinality>
+          <commandScript>
+            <script>scripts/zookeeper_client.py</script>
+            <scriptType>PYTHON</scriptType>
+          </commandScript>
+        </component>
+      </components>
+
+      <osSpecifics>
+        <osSpecific>
+          <osFamily>any</osFamily>
+          <packages>
+            <package>
+              <type>rpm</type>
+              <name>zookeeper</name>
+            </package>
+          </packages>
+        </osSpecific>
+      </osSpecifics>
+
+      <commandScript>
+        <script>scripts/service_check.py</script>
+        <scriptType>PYTHON</scriptType>
+        <timeout>300</timeout>
+      </commandScript>
+
+      <configuration-dependencies>
+        <config-type>global</config-type>
+        <config-type>zookeeper-log4j</config-type>
+        <config-type>zoo.cfg</config-type>
+      </configuration-dependencies>
+      <restartRequiredAfterChange>true</restartRequiredAfterChange>
+    </service>
+  </services>
+</metainfo>