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>