You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ha...@apache.org on 2018/07/02 16:54:47 UTC
[ambari] branch trunk updated: AMBARI-24232 Alert definitions have
not updated after stack upgrade (dgrinenko)
This is an automated email from the ASF dual-hosted git repository.
hapylestat pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ambari.git
The following commit(s) were added to refs/heads/trunk by this push:
new f8f46de AMBARI-24232 Alert definitions have not updated after stack upgrade (dgrinenko)
f8f46de is described below
commit f8f46deea10e18597f8d1c2e3a703c480970e12b
Author: Reishin <ha...@gmail.com>
AuthorDate: Mon Jul 2 14:55:00 2018 +0300
AMBARI-24232 Alert definitions have not updated after stack upgrade (dgrinenko)
---
.../ambari/server/api/services/AmbariMetaInfo.java | 46 ++++++++++++++--------
.../upgrade/StackUpgradeFinishListener.java | 7 ++++
.../upgrade/StackUpgradeFinishListenerTest.java | 38 +++++++++---------
3 files changed, 54 insertions(+), 37 deletions(-)
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 bcebe2f..712737c 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
@@ -1075,9 +1075,7 @@ public class AmbariMetaInfo {
* @param updateScriptPaths whether existing script-based alerts should be updated
* with possibly new paths from the stack definition
*/
- public void reconcileAlertDefinitions(Clusters clusters, boolean updateScriptPaths)
- throws AmbariException {
-
+ public void reconcileAlertDefinitions(Clusters clusters, boolean updateScriptPaths) throws AmbariException {
Map<String, Cluster> clusterMap = clusters.getClusters();
if (null == clusterMap || clusterMap.size() == 0) {
return;
@@ -1085,6 +1083,29 @@ public class AmbariMetaInfo {
// for every cluster
for (Cluster cluster : clusterMap.values()) {
+ reconcileAlertDefinitions(cluster, updateScriptPaths);
+ }
+
+ }
+
+ /**
+ * Compares the alert definitions defined on the stack with those in the
+ * database and merges any new or updated definitions. This method will first
+ * determine the services that are installed on each cluster to prevent alert
+ * definitions from undeployed services from being shown.
+ * <p/>
+ * This method will also detect "agent" alert definitions, which are
+ * definitions that should be run on agent hosts but are not associated with a
+ * service.
+ *
+ * @param cluster cluster
+ * @param updateScriptPaths whether existing script-based alerts should be updated
+ * with possibly new paths from the stack definition
+ */
+ public void reconcileAlertDefinitions(Cluster cluster, boolean updateScriptPaths) throws AmbariException {
+ if (null == cluster) {
+ return;
+ }
long clusterId = cluster.getClusterId();
Map<String, ServiceInfo> stackServiceMap = new HashMap<>();
@@ -1137,11 +1158,6 @@ public class AmbariMetaInfo {
// use the REST APIs to modify them instead
AlertDefinition databaseDefinition = alertDefinitionFactory.coerce(entity);
if (!stackDefinition.deeplyEquals(databaseDefinition)) {
-
- LOG.debug(
- "The alert named {} has been modified from the stack definition and will not be merged",
- stackDefinition.getName());
-
if (updateScriptPaths) {
Source databaseSource = databaseDefinition.getSource();
Source stackSource = stackDefinition.getSource();
@@ -1160,6 +1176,9 @@ public class AmbariMetaInfo {
);
}
}
+ } else {
+ LOG.debug("The alert named {} has been modified from the stack definition and will not be merged",
+ stackDefinition.getName());
}
}
}
@@ -1179,9 +1198,7 @@ public class AmbariMetaInfo {
// all definition resolved; publish their registration
for (AlertDefinitionEntity def : alertDefinitionDao.findAll(cluster.getClusterId())) {
AlertDefinition realDef = alertDefinitionFactory.coerce(def);
-
- AlertDefinitionRegistrationEvent event = new AlertDefinitionRegistrationEvent(
- cluster.getClusterId(), realDef);
+ AlertDefinitionRegistrationEvent event = new AlertDefinitionRegistrationEvent(cluster.getClusterId(), realDef);
eventPublisher.publish(event);
}
@@ -1223,13 +1240,8 @@ public class AmbariMetaInfo {
for (AlertDefinitionEntity definition : definitionsToDisable) {
definition.setEnabled(false);
alertDefinitionDao.merge(definition);
-
- AlertDefinitionDisabledEvent event = new AlertDefinitionDisabledEvent(
- clusterId, definition.getDefinitionId());
-
- eventPublisher.publish(event);
+ eventPublisher.publish(new AlertDefinitionDisabledEvent(clusterId, definition.getDefinitionId()));
}
- }
}
/**
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackUpgradeFinishListener.java b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackUpgradeFinishListener.java
index 41c2c2b..8737784 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackUpgradeFinishListener.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackUpgradeFinishListener.java
@@ -93,6 +93,13 @@ public class StackUpgradeFinishListener {
CachedRoleCommandOrderProvider cachedRcoProvider = (CachedRoleCommandOrderProvider) roleCommandOrderProvider.get();
cachedRcoProvider.clearRoleCommandOrderCache();
}
+
+ try {
+ ambariMetaInfo.get().reconcileAlertDefinitions(cluster, true);
+ } catch (AmbariException e){
+ LOG.error("Caught AmbariException when update alert definitions", e);
+ }
+
}
}
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackUpgradeFinishListenerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackUpgradeFinishListenerTest.java
index c4b1f0b..a9b31fd 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackUpgradeFinishListenerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackUpgradeFinishListenerTest.java
@@ -18,20 +18,19 @@
package org.apache.ambari.server.events.listeners.upgrade;
import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.expectLastCall;
import java.util.HashMap;
import java.util.Map;
import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.events.StackUpgradeFinishEvent;
import org.apache.ambari.server.events.publishers.VersionEventPublisher;
import org.apache.ambari.server.metadata.RoleCommandOrderProvider;
-import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
-import org.apache.ambari.server.orm.entities.UpgradeEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponent;
-import org.apache.ambari.server.state.ServiceComponentHost;
import org.easymock.EasyMockRunner;
import org.easymock.EasyMockSupport;
import org.easymock.Mock;
@@ -50,42 +49,41 @@ import com.google.inject.Provider;
@RunWith(EasyMockRunner.class)
public class StackUpgradeFinishListenerTest extends EasyMockSupport {
- private static final String INVALID_NEW_VERSION = "1.2.3.4-5678";
- private static final String VALID_NEW_VERSION = "2.4.0.0-1000";
- private static final String SERVICE_COMPONENT_NAME = "Some component name";
- private static final String SERVICE_NAME = "Service name";
- private static final Long CLUSTER_ID = 1L;
- private static final String UNKNOWN_VERSION = "UNKNOWN";
- private static final String VALID_PREVIOUS_VERSION = "2.2.0.0";
- private static final RepositoryVersionEntity DUMMY_REPOSITORY_VERSION_ENTITY = new RepositoryVersionEntity();
- private static final UpgradeEntity DUMMY_UPGRADE_ENTITY = new UpgradeEntity();
public static final String STACK_NAME = "HDP-2.4.0.0";
public static final String STACK_VERSION = "2.4.0.0";
- private Cluster cluster;
- private ServiceComponentHost sch;
- private Service service;
- private ServiceComponent serviceComponent;
private VersionEventPublisher publisher = new VersionEventPublisher();
+ private Cluster cluster;
+
@TestSubject
private StackUpgradeFinishListener listener = new StackUpgradeFinishListener(publisher);
- @Mock(type = MockType.NICE)
+ @Mock(type = MockType.NICE, fieldName = "roleCommandOrderProvider")
private Provider<RoleCommandOrderProvider> roleCommandOrderProviderProviderMock;
+ @Mock(type = MockType.NICE, fieldName = "ambariMetaInfo")
+ private Provider<AmbariMetaInfo> ambariMetaInfoProvider = null;
+
@Before
public void setup() throws Exception {
+ AmbariMetaInfo ami = createNiceMock(AmbariMetaInfo.class);
+
cluster = createNiceMock(Cluster.class);
- serviceComponent = createNiceMock(ServiceComponent.class);
- service = createNiceMock(Service.class);
+ ServiceComponent serviceComponent = createNiceMock(ServiceComponent.class);
+ Service service = createNiceMock(Service.class);
Map<String, Service> services = new HashMap<>();
- services.put("mock_service",service);
Map<String, ServiceComponent> components = new HashMap<>();
+
+ services.put("mock_service",service);
components.put("mock_component", serviceComponent);
expect(cluster.getServices()).andReturn(services);
expect(service.getServiceComponents()).andReturn(components);
+ expect(ambariMetaInfoProvider.get()).andReturn(ami);
+ ami.reconcileAlertDefinitions(cluster,true);
+ expectLastCall();
+
serviceComponent.updateComponentInfo();
service.updateServiceInfo();
}