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/04/22 18:13:51 UTC
git commit: AMBARI-5445 When new host components are created thru API,
some indication should be given that Nagios has to be restarted (dsen)
Repository: ambari
Updated Branches:
refs/heads/trunk 833eda897 -> 11a9f1d5b
AMBARI-5445 When new host components are created thru API, some indication should be given that Nagios has to be restarted (dsen)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/11a9f1d5
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/11a9f1d5
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/11a9f1d5
Branch: refs/heads/trunk
Commit: 11a9f1d5b6116668a8914fb1d4cab58c6149e76f
Parents: 833eda8
Author: Dmitry Sen <ds...@hortonworks.com>
Authored: Tue Apr 22 19:13:45 2014 +0300
Committer: Dmitry Sen <ds...@hortonworks.com>
Committed: Tue Apr 22 19:13:45 2014 +0300
----------------------------------------------------------------------
.../ambari/server/agent/HeartBeatHandler.java | 2 +
.../server/api/services/AmbariMetaInfo.java | 15 +++-
.../AmbariManagementControllerImpl.java | 49 +++++++++--
.../HostComponentDesiredStateEntity.java | 11 +++
.../ambari/server/state/ConfigHelper.java | 8 +-
.../server/state/ServiceComponentHost.java | 11 ++-
.../apache/ambari/server/state/ServiceInfo.java | 11 +++
.../svccomphost/ServiceComponentHostImpl.java | 33 ++++++-
.../server/upgrade/UpgradeCatalog160.java | 5 ++
.../main/resources/Ambari-DDL-MySQL-CREATE.sql | 2 +-
.../main/resources/Ambari-DDL-Oracle-CREATE.sql | 2 +-
.../resources/Ambari-DDL-Postgres-CREATE.sql | 2 +-
.../HDP/1.3.2/services/GANGLIA/metainfo.xml | 1 +
.../HDP/1.3.2/services/NAGIOS/metainfo.xml | 1 +
.../HDP/2.0.6/services/GANGLIA/metainfo.xml | 1 +
.../HDP/2.0.6/services/NAGIOS/metainfo.xml | 1 +
.../server/agent/TestHeartbeatHandler.java | 7 +-
.../AmbariManagementControllerTest.java | 63 +++++++++++++-
.../server/upgrade/UpgradeCatalog160Test.java | 23 ++++-
.../HDP/2.0.5/services/NAGIOS/metainfo.xml | 90 +++++++++++++++++---
20 files changed, 305 insertions(+), 33 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/11a9f1d5/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java b/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java
index 0f284a2..c376bcd 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java
@@ -339,6 +339,7 @@ public class HeartBeatHandler {
LOG.info("Updating applied config on service " + scHost.getServiceName() +
", component " + scHost.getServiceComponentName() + ", host " + scHost.getHostName());
scHost.updateActualConfigs(report.getConfigurationTags());
+ scHost.setRestartRequired(false);
}
if (RoleCommand.CUSTOM_COMMAND.toString().equals(report.getRoleCommand()) &&
@@ -354,6 +355,7 @@ public class HeartBeatHandler {
"START".equals(report.getCustomCommand()))) {
scHost.handleEvent(new ServiceComponentHostStartedEvent(schName,
hostname, now));
+ scHost.setRestartRequired(false);
} else if (RoleCommand.STOP.toString().equals(report.getRoleCommand()) ||
(RoleCommand.CUSTOM_COMMAND.toString().equals(report.getRoleCommand()) &&
"STOP".equals(report.getCustomCommand()))) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/11a9f1d5/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 bafd9b5..659499e 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
@@ -466,7 +466,8 @@ public class AmbariMetaInfo {
return serviceInfoResult;
}
- public List<ServiceInfo> getSupportedServices(String stackName, String version) throws AmbariException {
+ public List<ServiceInfo> getSupportedServices(String stackName, String version)
+ throws AmbariException {
List<ServiceInfo> servicesResult = null;
StackInfo stack = getStackInfo(stackName, version);
if (stack != null)
@@ -474,6 +475,18 @@ public class AmbariMetaInfo {
return servicesResult;
}
+ public List<String> getMonitoringServiceNames(String stackName, String version)
+ throws AmbariException{
+
+ List<String> monitoringServices = new ArrayList<String>();
+ for (ServiceInfo service : getSupportedServices(stackName, version)) {
+ if (service.isMonitoringService()) {
+ monitoringServices.add(service.getName());
+ }
+ }
+ return monitoringServices;
+ }
+
public List<StackInfo> getSupportedStacks() {
return stacksResult;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/11a9f1d5/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 93b0dca..978ffaf 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
@@ -497,24 +497,22 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
throw new DuplicateResourceException(msg + names.toString());
}
+ // set restartRequired flag for monitoring services
+ setMonitoringServicesRestartRequired(requests);
// now doing actual work
persistServiceComponentHosts(requests);
}
@Transactional
- void persistServiceComponentHosts(Set<ServiceComponentHostRequest> requests) throws AmbariException {
+ void persistServiceComponentHosts(Set<ServiceComponentHostRequest> requests)
+ throws AmbariException {
+
for (ServiceComponentHostRequest request : requests) {
Cluster cluster = clusters.getCluster(request.getClusterName());
Service s = cluster.getService(request.getServiceName());
ServiceComponent sc = s.getServiceComponent(
request.getComponentName());
- StackId stackId = sc.getDesiredStackVersion();
- ComponentInfo compInfo = ambariMetaInfo.getComponentCategory(
- stackId.getStackName(), stackId.getStackVersion(),
- s.getName(), sc.getName());
- boolean isClient = compInfo.isClient();
-
ServiceComponentHost sch =
serviceComponentHostFactory.createNew(sc, request.getHostname());
@@ -531,6 +529,39 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
}
}
+ private void setMonitoringServicesRestartRequired(
+ Set<ServiceComponentHostRequest> requests) throws AmbariException {
+
+ for (ServiceComponentHostRequest request : requests) {
+ Cluster cluster = clusters.getCluster(request.getClusterName());
+
+ StackId stackId = cluster.getCurrentStackVersion();
+ List<String> monitoringServices = ambariMetaInfo.getMonitoringServiceNames(
+ stackId.getStackName(), stackId.getStackVersion());
+
+ for (String serviceName : monitoringServices) {
+ if (cluster.getServices().containsKey(serviceName)) {
+ Service service = cluster.getService(serviceName);
+
+ for (ServiceComponent sc : service.getServiceComponents().values()) {
+ if (sc.isMasterComponent()) {
+ for (ServiceComponentHost sch : sc.getServiceComponentHosts().values()) {
+ sch.setRestartRequired(true);
+ }
+ continue;
+ }
+
+ String hostname = request.getHostname();
+ if (sc.getServiceComponentHosts().containsKey(hostname)) {
+ ServiceComponentHost sch = sc.getServiceComponentHost(hostname);
+ sch.setRestartRequired(true);
+ }
+ }
+ }
+ }
+ }
+ }
+
@Override
public synchronized void createConfiguration(
@@ -2116,6 +2147,10 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
}
}
+ // set restartRequired flag for monitoring services
+ if (!safeToRemoveSCHs.isEmpty()) {
+ setMonitoringServicesRestartRequired(requests);
+ }
return null;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/11a9f1d5/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostComponentDesiredStateEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostComponentDesiredStateEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostComponentDesiredStateEntity.java
index 8b29852..6fb5021 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostComponentDesiredStateEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostComponentDesiredStateEntity.java
@@ -74,6 +74,10 @@ public class HostComponentDesiredStateEntity {
@Column(name="maintenance_state", nullable = false, insertable = true, updatable = true)
private MaintenanceState maintenanceState = MaintenanceState.OFF;
+ @Basic
+ @Column(name = "restart_required", insertable = true, updatable = true, nullable = false)
+ private Boolean restartRequired = false;
+
public Long getClusterId() {
return clusterId;
}
@@ -185,4 +189,11 @@ public class HostComponentDesiredStateEntity {
this.hostEntity = hostEntity;
}
+ public boolean isRestartRequired() {
+ return restartRequired;
+ }
+
+ public void setRestartRequired(boolean restartRequired) {
+ this.restartRequired = restartRequired;
+ }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/11a9f1d5/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java
index 964d2d6..16f8382 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java
@@ -236,10 +236,14 @@ public class ConfigHelper {
*/
public boolean isStaleConfigs(ServiceComponentHost sch) throws AmbariException {
- Map<String, HostConfig> actual = sch.getActualConfigs();
+ if (sch.isRestartRequired()) {
+ return true;
+ }
+
+ Map <String, HostConfig> actual = sch.getActualConfigs();
if (null == actual || actual.isEmpty())
return false;
-
+
Cluster cluster = clusters.getClusterById(sch.getClusterId());
StackId stackId = cluster.getDesiredStackVersion();
http://git-wip-us.apache.org/repos/asf/ambari/blob/11a9f1d5/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java
index 0938af6..3718556 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java
@@ -136,5 +136,14 @@ public interface ServiceComponentHost {
*/
public List<Map<String, String>> getProcesses();
-
+ /**
+ * @return whether restart required
+ */
+ public boolean isRestartRequired();
+
+ /**
+ * @param restartRequired the restartRequired flag
+ */
+ public void setRestartRequired(boolean restartRequired);
+
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/11a9f1d5/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 39566d9..6020481 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
@@ -57,6 +57,10 @@ public class ServiceInfo {
@XmlElementWrapper(name="configuration-dependencies")
@XmlElement(name="config-type")
private List<String> configDependencies;
+
+ @JsonIgnore
+ @XmlElement(defaultValue = "false")
+ private boolean monitoringService;
@XmlTransient
private File metricsFile = null;
@@ -382,4 +386,11 @@ public class ServiceInfo {
return configDir;
}
+ public boolean isMonitoringService() {
+ return monitoringService;
+ }
+
+ public void setMonitoringService(boolean monitoringService) {
+ this.monitoringService = monitoringService;
+ }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/11a9f1d5/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
index 1d4ae4b..3586c08 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
@@ -1438,6 +1438,35 @@ public class ServiceComponentHostImpl implements ServiceComponentHost {
clusterGlobalLock.readLock().unlock();
}
}
-
-
+
+ @Override
+ public boolean isRestartRequired() {
+ clusterGlobalLock.readLock().lock();
+ try {
+ readLock.lock();
+ try {
+ return desiredStateEntity.isRestartRequired();
+ } finally {
+ readLock.unlock();
+ }
+ } finally {
+ clusterGlobalLock.readLock().unlock();
+ }
+ }
+
+ @Override
+ public void setRestartRequired(boolean restartRequired) {
+ clusterGlobalLock.readLock().lock();
+ try {
+ writeLock.lock();
+ try {
+ desiredStateEntity.setRestartRequired(restartRequired);
+ saveIfPersisted();
+ } finally {
+ writeLock.unlock();
+ }
+ } finally {
+ clusterGlobalLock.readLock().unlock();
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/11a9f1d5/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog160.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog160.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog160.java
index f66fe1c..b0521ee 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog160.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog160.java
@@ -56,6 +56,11 @@ public class UpgradeCatalog160 extends AbstractUpgradeCatalog {
dbAccessor.createTable("hostgroup_configuration", columns, "blueprint_name",
"hostgroup_name", "type_name");
+ //=========================================================================
+ // Add columns
+ dbAccessor.addColumn("hostcomponentdesiredstate",
+ new DBAccessor.DBColumnInfo("restart_required", Boolean.class, 1, 0, false));
+
// ========================================================================
// Add constraints
dbAccessor.addFKConstraint("hostgroup_configuration", "FK_hg_config_blueprint_name",
http://git-wip-us.apache.org/repos/asf/ambari/blob/11a9f1d5/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
index 1d04d0b..3e55558 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
@@ -30,7 +30,7 @@ CREATE TABLE clusters (cluster_id BIGINT NOT NULL, cluster_info VARCHAR(255) NOT
CREATE TABLE clusterconfig (version_tag VARCHAR(255) NOT NULL, type_name VARCHAR(255) NOT NULL, cluster_id BIGINT NOT NULL, config_data LONGTEXT NOT NULL, create_timestamp BIGINT NOT NULL, PRIMARY KEY (version_tag, type_name, cluster_id));
CREATE TABLE clusterservices (service_name VARCHAR(255) NOT NULL, cluster_id BIGINT NOT NULL, service_enabled INTEGER NOT NULL, PRIMARY KEY (service_name, cluster_id));
CREATE TABLE clusterstate (cluster_id BIGINT NOT NULL, current_cluster_state VARCHAR(255) NOT NULL, current_stack_version VARCHAR(255) NOT NULL, PRIMARY KEY (cluster_id));
-CREATE TABLE hostcomponentdesiredstate (cluster_id BIGINT NOT NULL, component_name VARCHAR(255) NOT NULL, desired_stack_version VARCHAR(255) NOT NULL, desired_state VARCHAR(255) NOT NULL, host_name VARCHAR(255) NOT NULL, service_name VARCHAR(255) NOT NULL, admin_state VARCHAR(32), maintenance_state VARCHAR(32) NOT NULL DEFAULT 'ACTIVE', PRIMARY KEY (cluster_id, component_name, host_name, service_name));
+CREATE TABLE hostcomponentdesiredstate (cluster_id BIGINT NOT NULL, component_name VARCHAR(255) NOT NULL, desired_stack_version VARCHAR(255) NOT NULL, desired_state VARCHAR(255) NOT NULL, host_name VARCHAR(255) NOT NULL, service_name VARCHAR(255) NOT NULL, admin_state VARCHAR(32), maintenance_state VARCHAR(32) NOT NULL DEFAULT 'ACTIVE', restart_required TINYINT(1) NOT NULL, PRIMARY KEY (cluster_id, component_name, host_name, service_name));
CREATE TABLE hostcomponentstate (cluster_id BIGINT NOT NULL, component_name VARCHAR(255) NOT NULL, current_stack_version VARCHAR(255) NOT NULL, current_state VARCHAR(255) NOT NULL, host_name VARCHAR(255) NOT NULL, service_name VARCHAR(255) NOT NULL, PRIMARY KEY (cluster_id, component_name, host_name, service_name));
CREATE TABLE hosts (host_name VARCHAR(255) NOT NULL, cpu_count INTEGER NOT NULL, cpu_info VARCHAR(255) NOT NULL, discovery_status VARCHAR(2000) NOT NULL, host_attributes LONGTEXT NOT NULL, ipv4 VARCHAR(255), ipv6 VARCHAR(255), last_registration_time BIGINT NOT NULL, os_arch VARCHAR(255) NOT NULL, os_info VARCHAR(1000) NOT NULL, os_type VARCHAR(255) NOT NULL, ph_cpu_count INTEGER, public_host_name VARCHAR(255), rack_info VARCHAR(255) NOT NULL, total_mem BIGINT NOT NULL, PRIMARY KEY (host_name));
CREATE TABLE hoststate (agent_version VARCHAR(255) NOT NULL, available_mem BIGINT NOT NULL, current_state VARCHAR(255) NOT NULL, health_status VARCHAR(255), host_name VARCHAR(255) NOT NULL, time_in_state BIGINT NOT NULL, maintenance_state VARCHAR(512), PRIMARY KEY (host_name));
http://git-wip-us.apache.org/repos/asf/ambari/blob/11a9f1d5/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
index ae18892..816d63c 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
@@ -20,7 +20,7 @@ CREATE TABLE clusters (cluster_id NUMBER(19) NOT NULL, cluster_info VARCHAR2(255
CREATE TABLE clusterconfig (version_tag VARCHAR2(255) NOT NULL, type_name VARCHAR2(255) NOT NULL, cluster_id NUMBER(19) NOT NULL, config_data CLOB NOT NULL, create_timestamp NUMBER(19) NOT NULL, PRIMARY KEY (version_tag, type_name, cluster_id));
CREATE TABLE clusterservices (service_name VARCHAR2(255) NOT NULL, cluster_id NUMBER(19) NOT NULL, service_enabled NUMBER(10) NOT NULL, PRIMARY KEY (service_name, cluster_id));
CREATE TABLE clusterstate (cluster_id NUMBER(19) NOT NULL, current_cluster_state VARCHAR2(255) NULL, current_stack_version VARCHAR2(255) NULL, PRIMARY KEY (cluster_id));
-CREATE TABLE hostcomponentdesiredstate (cluster_id NUMBER(19) NOT NULL, component_name VARCHAR2(255) NOT NULL, desired_stack_version VARCHAR2(255) NULL, desired_state VARCHAR2(255) NOT NULL, host_name VARCHAR2(255) NOT NULL, service_name VARCHAR2(255) NOT NULL, admin_state VARCHAR2(32) NULL, maintenance_state VARCHAR2(32) NOT NULL, PRIMARY KEY (cluster_id, component_name, host_name, service_name));
+CREATE TABLE hostcomponentdesiredstate (cluster_id NUMBER(19) NOT NULL, component_name VARCHAR2(255) NOT NULL, desired_stack_version VARCHAR2(255) NULL, desired_state VARCHAR2(255) NOT NULL, host_name VARCHAR2(255) NOT NULL, service_name VARCHAR2(255) NOT NULL, admin_state VARCHAR2(32) NULL, maintenance_state VARCHAR2(32) NOT NULL, restart_required NUMBER(1) NOT NULL, PRIMARY KEY (cluster_id, component_name, host_name, service_name));
CREATE TABLE hostcomponentstate (cluster_id NUMBER(19) NOT NULL, component_name VARCHAR2(255) NOT NULL, current_stack_version VARCHAR2(255) NOT NULL, current_state VARCHAR2(255) NOT NULL, host_name VARCHAR2(255) NOT NULL, service_name VARCHAR2(255) NOT NULL, PRIMARY KEY (cluster_id, component_name, host_name, service_name));
CREATE TABLE hosts (host_name VARCHAR2(255) NOT NULL, cpu_count INTEGER NOT NULL, cpu_info VARCHAR2(255) NULL, discovery_status VARCHAR2(2000) NULL, host_attributes CLOB NULL, ipv4 VARCHAR2(255) NULL, ipv6 VARCHAR2(255) NULL, last_registration_time INTEGER NOT NULL, os_arch VARCHAR2(255) NULL, os_info VARCHAR2(1000) NULL, os_type VARCHAR2(255) NULL, ph_cpu_count INTEGER NOT NULL, public_host_name VARCHAR2(255) NULL, rack_info VARCHAR2(255) NOT NULL, total_mem INTEGER NOT NULL, PRIMARY KEY (host_name));
CREATE TABLE hoststate (agent_version VARCHAR2(255) NULL, available_mem NUMBER(19) NOT NULL, current_state VARCHAR2(255) NOT NULL, health_status VARCHAR2(255) NULL, host_name VARCHAR2(255) NOT NULL, time_in_state NUMBER(19) NOT NULL, maintenance_state VARCHAR2(512), PRIMARY KEY (host_name));
http://git-wip-us.apache.org/repos/asf/ambari/blob/11a9f1d5/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
index 1be43f1..df05fd4 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
@@ -43,7 +43,7 @@ GRANT ALL PRIVILEGES ON TABLE ambari.clusterservices TO :username;
CREATE TABLE ambari.clusterstate (cluster_id BIGINT NOT NULL, current_cluster_state VARCHAR(255) NOT NULL, current_stack_version VARCHAR(255) NOT NULL, PRIMARY KEY (cluster_id));
GRANT ALL PRIVILEGES ON TABLE ambari.clusterstate TO :username;
-CREATE TABLE ambari.hostcomponentdesiredstate (cluster_id BIGINT NOT NULL, component_name VARCHAR(255) NOT NULL, desired_stack_version VARCHAR(255) NOT NULL, desired_state VARCHAR(255) NOT NULL, host_name VARCHAR(255) NOT NULL, service_name VARCHAR(255) NOT NULL, admin_state VARCHAR(32), maintenance_state VARCHAR(32) NOT NULL, PRIMARY KEY (cluster_id, component_name, host_name, service_name));
+CREATE TABLE ambari.hostcomponentdesiredstate (cluster_id BIGINT NOT NULL, component_name VARCHAR(255) NOT NULL, desired_stack_version VARCHAR(255) NOT NULL, desired_state VARCHAR(255) NOT NULL, host_name VARCHAR(255) NOT NULL, service_name VARCHAR(255) NOT NULL, admin_state VARCHAR(32), maintenance_state VARCHAR(32) NOT NULL, restart_required BOOLEAN NOT NULL, PRIMARY KEY (cluster_id, component_name, host_name, service_name));
GRANT ALL PRIVILEGES ON TABLE ambari.hostcomponentdesiredstate TO :username;
CREATE TABLE ambari.hostcomponentstate (cluster_id BIGINT NOT NULL, component_name VARCHAR(255) NOT NULL, current_stack_version VARCHAR(255) NOT NULL, current_state VARCHAR(255) NOT NULL, host_name VARCHAR(255) NOT NULL, service_name VARCHAR(255) NOT NULL, PRIMARY KEY (cluster_id, component_name, host_name, service_name));
http://git-wip-us.apache.org/repos/asf/ambari/blob/11a9f1d5/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/GANGLIA/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/GANGLIA/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/GANGLIA/metainfo.xml
index 528db40..b1e37a6 100644
--- a/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/GANGLIA/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/GANGLIA/metainfo.xml
@@ -108,6 +108,7 @@
<configuration-dependencies>
<config-type>global</config-type>
</configuration-dependencies>
+ <monitoringService>true</monitoringService>
</service>
</services>
</metainfo>
http://git-wip-us.apache.org/repos/asf/ambari/blob/11a9f1d5/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/NAGIOS/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/NAGIOS/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/NAGIOS/metainfo.xml
index 74f6c2b..3b3986c 100644
--- a/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/NAGIOS/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/NAGIOS/metainfo.xml
@@ -95,6 +95,7 @@
</packages>
</osSpecific>
</osSpecifics>
+ <monitoringService>true</monitoringService>
</service>
</services>
</metainfo>
http://git-wip-us.apache.org/repos/asf/ambari/blob/11a9f1d5/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/GANGLIA/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/GANGLIA/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/GANGLIA/metainfo.xml
index 98703bc..d8ea723 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/GANGLIA/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/GANGLIA/metainfo.xml
@@ -103,6 +103,7 @@
<configuration-dependencies>
<config-type>global</config-type>
</configuration-dependencies>
+ <monitoringService>true</monitoringService>
</service>
</services>
</metainfo>
http://git-wip-us.apache.org/repos/asf/ambari/blob/11a9f1d5/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/NAGIOS/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/NAGIOS/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/NAGIOS/metainfo.xml
index f435f6d..025835c 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/NAGIOS/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/NAGIOS/metainfo.xml
@@ -94,6 +94,7 @@
</packages>
</osSpecific>
</osSpecifics>
+ <monitoringService>true</monitoringService>
</service>
</services>
</metainfo>
http://git-wip-us.apache.org/repos/asf/ambari/blob/11a9f1d5/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
index f0b130b..a04e2e1 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
@@ -339,7 +339,8 @@ public class TestHeartbeatHandler {
getServiceComponent(NAMENODE).getServiceComponentHost(DummyHostname1);
serviceComponentHost1.setState(State.INSTALLED);
serviceComponentHost2.setState(State.STARTED);
-
+ serviceComponentHost1.setRestartRequired(true);
+ serviceComponentHost2.setRestartRequired(true);
HeartBeat hb = new HeartBeat();
hb.setResponseId(0);
@@ -376,13 +377,17 @@ public class TestHeartbeatHandler {
reports.add(crn);
hb.setReports(reports);
+ assertTrue(serviceComponentHost1.isRestartRequired());
+
handler.handleHeartBeat(hb);
// the heartbeat test passed if actual configs is populated
State componentState1 = serviceComponentHost1.getState();
assertEquals(State.STARTED, componentState1);
+ assertFalse(serviceComponentHost1.isRestartRequired());
State componentState2 = serviceComponentHost2.getState();
assertEquals(State.INSTALLED, componentState2);
+ assertTrue(serviceComponentHost2.isRestartRequired());
}
@Test
http://git-wip-us.apache.org/repos/asf/ambari/blob/11a9f1d5/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 9727db9..ff3f08a 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
@@ -133,7 +133,6 @@ import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.persist.PersistService;
-import com.google.inject.persist.Transactional;
public class AmbariManagementControllerTest {
@@ -1172,9 +1171,15 @@ public class AmbariManagementControllerTest {
Cluster foo = clusters.getCluster("foo");
Cluster c1 = clusters.getCluster("c1");
Cluster c2 = clusters.getCluster("c2");
- foo.setDesiredStackVersion(new StackId("HDP-0.2"));
- c1.setDesiredStackVersion(new StackId("HDP-0.2"));
- c2.setDesiredStackVersion(new StackId("HDP-0.2"));
+ StackId stackId = new StackId("HDP-0.2");
+ foo.setDesiredStackVersion(stackId);
+ foo.setCurrentStackVersion(stackId);
+ stackId = new StackId("HDP-0.2");
+ c1.setDesiredStackVersion(stackId);
+ c1.setCurrentStackVersion(stackId);
+ stackId = new StackId("HDP-0.2");
+ c2.setDesiredStackVersion(stackId);
+ c2.setCurrentStackVersion(stackId);
try {
set1.clear();
@@ -9365,6 +9370,56 @@ public class AmbariManagementControllerTest {
}
@Test
+ public void setMonitoringServicesRestartRequired() throws Exception {
+ String clusterName = "c1";
+ createCluster(clusterName);
+ Cluster cluster = clusters.getCluster(clusterName);
+ StackId stackId = new StackId("HDP-2.0.5");
+ cluster.setDesiredStackVersion(stackId);
+ cluster.setCurrentStackVersion(stackId);
+
+ String hdfsService = "HDFS";
+ String nagiosService = "NAGIOS";
+ createService(clusterName, hdfsService, null);
+ createService(clusterName, nagiosService, null);
+
+ String namenode = "NAMENODE";
+ String datanode = "DATANODE";
+ String hdfsClient = "HDFS_CLIENT";
+ String nagiosServer = "NAGIOS_SERVER";
+ createServiceComponent(clusterName, hdfsService, namenode,
+ State.INIT);
+ createServiceComponent(clusterName, hdfsService, datanode,
+ State.INIT);
+ createServiceComponent(clusterName, nagiosService, nagiosServer,
+ State.INIT);
+
+ String host1 = "h1";
+
+ addHost(host1, clusterName);
+ createServiceComponentHost(clusterName, hdfsService, namenode, host1, null);
+ createServiceComponentHost(clusterName, hdfsService, datanode, host1, null);
+ createServiceComponentHost(clusterName, nagiosService, nagiosServer, host1,
+ null);
+
+
+ ServiceComponentHost nagiosSch = null;
+ for (ServiceComponentHost sch : cluster.getServiceComponentHosts(host1)) {
+ if (sch.getServiceComponentName().equals(nagiosServer)) {
+ nagiosSch = sch;
+ }
+ }
+ assertFalse(nagiosSch.isRestartRequired());
+
+ createServiceComponent(clusterName, hdfsService, hdfsClient,
+ State.INIT);
+ createServiceComponentHost(clusterName, hdfsService, hdfsClient, host1, null);
+
+ assertTrue(nagiosSch.isRestartRequired());
+
+ }
+
+ @Test
public void testMaintenanceState() throws Exception {
String clusterName = "c1";
createCluster(clusterName);
http://git-wip-us.apache.org/repos/asf/ambari/blob/11a9f1d5/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog160Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog160Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog160Test.java
index e2234b2..a3de765 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog160Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog160Test.java
@@ -53,10 +53,11 @@ public class UpgradeCatalog160Test {
final DBAccessor dbAccessor = createNiceMock(DBAccessor.class);
Configuration configuration = createNiceMock(Configuration.class);
Capture<List<DBAccessor.DBColumnInfo>> hgConfigcolumnCapture = new Capture<List<DBAccessor.DBColumnInfo>>();
+ Capture<DBAccessor.DBColumnInfo> restartRequiredColumnCapture = new Capture<DBAccessor.DBColumnInfo>();
expect(configuration.getDatabaseUrl()).andReturn(Configuration.JDBC_IN_MEMORY_URL).anyTimes();
- setBPHostGroupConfigExpectations(dbAccessor, hgConfigcolumnCapture);
+ setBPHostGroupConfigExpectations(dbAccessor, hgConfigcolumnCapture, restartRequiredColumnCapture);
replay(dbAccessor, configuration);
AbstractUpgradeCatalog upgradeCatalog = getUpgradeCatalog(dbAccessor);
@@ -69,6 +70,7 @@ public class UpgradeCatalog160Test {
verify(dbAccessor, configuration);
assertHGConfigColumns(hgConfigcolumnCapture);
+ assertRestartRequiredColumn(restartRequiredColumnCapture);
}
@Test
@@ -98,10 +100,15 @@ public class UpgradeCatalog160Test {
return injector.getInstance(UpgradeCatalog160.class);
}
- private void setBPHostGroupConfigExpectations(DBAccessor dbAccessor, Capture<List<DBAccessor.DBColumnInfo>> columnCapture) throws SQLException {
+ private void setBPHostGroupConfigExpectations(DBAccessor dbAccessor,
+ Capture<List<DBAccessor.DBColumnInfo>> columnCapture,
+ Capture<DBAccessor.DBColumnInfo> restartRequiredColumnCapture) throws SQLException {
+
dbAccessor.createTable(eq("hostgroup_configuration"), capture(columnCapture),
eq("blueprint_name"), eq("hostgroup_name"), eq("type_name"));
+ dbAccessor.addColumn(eq("hostcomponentdesiredstate"),
+ capture(restartRequiredColumnCapture));
dbAccessor.addFKConstraint("hostgroup_configuration", "FK_hg_config_blueprint_name",
"blueprint_name", "hostgroup", "blueprint_name", true);
@@ -140,4 +147,16 @@ public class UpgradeCatalog160Test {
assertNull(column.getDefaultValue());
assertFalse(column.isNullable());
}
+
+ private void assertRestartRequiredColumn(
+ Capture<DBAccessor.DBColumnInfo> restartRequiredColumnCapture) {
+ DBAccessor.DBColumnInfo column = restartRequiredColumnCapture.getValue();
+ assertEquals("restart_required", column.getName());
+ assertEquals(1, (int) column.getLength());
+ assertEquals(Boolean.class, column.getType());
+ assertEquals(0, column.getDefaultValue());
+ assertFalse(column.isNullable());
+
+ }
+
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/11a9f1d5/ambari-server/src/test/resources/stacks/HDP/2.0.5/services/NAGIOS/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/resources/stacks/HDP/2.0.5/services/NAGIOS/metainfo.xml b/ambari-server/src/test/resources/stacks/HDP/2.0.5/services/NAGIOS/metainfo.xml
index 76471cf..3a06b91 100644
--- a/ambari-server/src/test/resources/stacks/HDP/2.0.5/services/NAGIOS/metainfo.xml
+++ b/ambari-server/src/test/resources/stacks/HDP/2.0.5/services/NAGIOS/metainfo.xml
@@ -16,15 +16,85 @@
limitations under the License.
-->
<metainfo>
- <user>root</user>
- <comment>Nagios Monitoring and Alerting system</comment>
- <version>3.5.0</version>
-
- <components>
+ <schemaVersion>2.0</schemaVersion>
+ <services>
+ <service>
+ <name>NAGIOS</name>
+ <comment>Nagios Monitoring and Alerting system</comment>
+ <version>3.5.0</version>
+ <components>
<component>
- <name>NAGIOS_SERVER</name>
- <category>MASTER</category>
+ <name>NAGIOS_SERVER</name>
+ <category>MASTER</category>
+ <commandScript>
+ <script>scripts/nagios_server.py</script>
+ <scriptType>PYTHON</scriptType>
+ <timeout>600</timeout>
+ </commandScript>
</component>
- </components>
-
-</metainfo>
+ </components>
+ <osSpecifics>
+ <osSpecific>
+ <osFamily>any</osFamily>
+ <packages>
+ <package>
+ <type>rpm</type>
+ <name>perl</name>
+ </package>
+ <package>
+ <type>rpm</type>
+ <name>perl-Net-SNMP</name>
+ </package>
+ <package>
+ <type>rpm</type>
+ <name>nagios-plugins</name>
+ </package>
+ <package>
+ <type>rpm</type>
+ <name>nagios</name>
+ </package>
+ <package>
+ <type>rpm</type>
+ <name>nagios-www</name>
+ </package>
+ <package>
+ <type>rpm</type>
+ <name>nagios-devel</name>
+ </package>
+ <package>
+ <type>rpm</type>
+ <name>fping</name>
+ </package>
+ <package>
+ <type>rpm</type>
+ <name>hdp_mon_nagios_addons</name>
+ </package>
+ </packages>
+ </osSpecific>
+ <osSpecific>
+ <osFamily>suse11</osFamily>
+ <packages>
+ <package>
+ <type>rpm</type>
+ <name>php5-json</name>
+ </package>
+ <package>
+ <type>rpm</type>
+ <name>apache2-mod_php5</name>
+ </package>
+ </packages>
+ </osSpecific>
+ <osSpecific>
+ <osFamily>redhat5</osFamily>
+ <packages>
+ <package>
+ <type>rpm</type>
+ <name>php-pecl-json.x86_64</name>
+ </package>
+ </packages>
+ </osSpecific>
+ </osSpecifics>
+ <monitoringService>true</monitoringService>
+ </service>
+ </services>
+</metainfo>
\ No newline at end of file