You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by dm...@apache.org on 2014/08/29 14:51:08 UTC
git commit: AMBARI-7064. When make single PUT request for stop/start
service and turn on/of MM two operations with same name is in bgo popup
(dlysnichenko)
Repository: ambari
Updated Branches:
refs/heads/trunk c485326e9 -> b22ce6c33
AMBARI-7064. When make single PUT request for stop/start service and turn on/of MM two operations with same name is in bgo popup (dlysnichenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/b22ce6c3
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/b22ce6c3
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/b22ce6c3
Branch: refs/heads/trunk
Commit: b22ce6c33cad85fcb40b4337b60105391f3b1bef
Parents: c485326
Author: Lisnichenko Dmitro <dl...@hortonworks.com>
Authored: Thu Aug 28 19:32:49 2014 +0300
Committer: Lisnichenko Dmitro <dl...@hortonworks.com>
Committed: Fri Aug 29 15:49:57 2014 +0300
----------------------------------------------------------------------
.../controller/AmbariActionExecutionHelper.java | 4 +-
.../AmbariManagementControllerImpl.java | 12 +++--
.../controller/MaintenanceStateHelper.java | 49 +++++++++-----------
.../internal/ComponentResourceProvider.java | 2 -
.../internal/HostResourceProvider.java | 12 +++--
.../internal/ServiceResourceProvider.java | 12 +++--
.../controller/MaintenanceStateHelperTest.java | 34 ++++++++++++--
7 files changed, 78 insertions(+), 47 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/b22ce6c3/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariActionExecutionHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariActionExecutionHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariActionExecutionHelper.java
index efe85e0..4808a77 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariActionExecutionHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariActionExecutionHelper.java
@@ -269,11 +269,13 @@ public class AmbariActionExecutionHelper {
}
}
);
- LOG.debug("Ignoring action for hosts due to maintenance state." +
+ if (! ignoredHosts.isEmpty()) {
+ LOG.debug("Ignoring action for hosts due to maintenance state." +
"Ignored hosts =" + ignoredHosts + ", component="
+ componentName + ", service=" + serviceName
+ ", cluster=" + cluster.getClusterName() + ", " +
"actionName=" + actionContext.getActionName());
+ }
}
// If request did not specify hosts and there exists no host
http://git-wip-us.apache.org/repos/asf/ambari/blob/b22ce6c3/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 cc122f6..efce9bd 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
@@ -2103,7 +2103,10 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
new HashMap<String, Map<String, Map<String, Set<String>>>>();
Set<State> seenNewStates = new HashSet<State>();
Map<ServiceComponentHost, State> directTransitionScHosts = new HashMap<ServiceComponentHost, State>();
- Set<String> maintenanceClusters = new HashSet<String>();
+
+ // We don't expect batch requests for different clusters, that's why
+ // nothing bad should happen if value is overwritten few times
+ String maintenanceCluster = null;
// Determine operation level
Resource.Type reqOpLvl;
@@ -2199,8 +2202,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
"maintenance state to one of " + EnumSet.of(MaintenanceState.OFF, MaintenanceState.ON));
} else {
sch.setMaintenanceState(newMaint);
-
- maintenanceClusters.add(sch.getClusterName());
+ maintenanceCluster = sch.getClusterName();
}
}
}
@@ -2339,9 +2341,9 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
}
}
- if (maintenanceClusters.size() > 0) {
+ if (maintenanceCluster != null) {
try {
- maintenanceStateHelper.createRequests(this, requestProperties, maintenanceClusters);
+ maintenanceStateHelper.createRequests(this, requestProperties, maintenanceCluster);
} catch (Exception e) {
LOG.warn("Could not send maintenance status to Nagios (" + e.getMessage() + ")");
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/b22ce6c3/ambari-server/src/main/java/org/apache/ambari/server/controller/MaintenanceStateHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/MaintenanceStateHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/MaintenanceStateHelper.java
index 6a429be..059e2c9 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/MaintenanceStateHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/MaintenanceStateHelper.java
@@ -50,7 +50,8 @@ public class MaintenanceStateHelper {
private static final String NAGIOS_COMPONENT = "NAGIOS_SERVER";
private static final String NAGIOS_ACTION_NAME = "nagios_update_ignore";
private static final Logger LOG = LoggerFactory.getLogger(MaintenanceStateHelper.class);
-
+ public static final String UPDATE_NAGIOS_REQUEST_NAME = "Update Nagios configuration";
+
@Inject
private Clusters clusters;
@@ -250,44 +251,40 @@ public class MaintenanceStateHelper {
}
/**
- * Creates the requests to send to the clusters. These requests
- * update ignored allerts Nagios configuration.
+ * Creates the Nagios update request to send to the cluster. This request
+ * updates ignored allerts Nagios configuration.
* @param amc the controller
* @param requestProperties the request properties
- * @param clusterNames the names of all the clusters to update
+ * @param clusterName the names of clusters to update
* @return the response
* @throws AmbariException
*/
public RequestStatusResponse createRequests(AmbariManagementController amc,
- Map<String, String> requestProperties, Set<String> clusterNames)
+ Map<String, String> requestProperties, String clusterName)
throws AmbariException {
+ // Substitute another request name
Map<String, String> params = new HashMap<String, String>();
-
- // return the first one, just like amc.createStages()
- RequestStatusResponse response = null;
+ Map<String, String> requestPropertiesClone = new HashMap<String, String>(requestProperties.size());
+ requestPropertiesClone.putAll(requestProperties);
+ requestPropertiesClone.put("context", UPDATE_NAGIOS_REQUEST_NAME);
RequestResourceFilter resourceFilter =
new RequestResourceFilter(NAGIOS_SERVICE, NAGIOS_COMPONENT, null);
- for (String clusterName : clusterNames) {
- RequestOperationLevel level =
- new RequestOperationLevel(Resource.Type.HostComponent,
- clusterName, NAGIOS_SERVICE, NAGIOS_COMPONENT, null);
-
- ExecuteActionRequest actionRequest = new ExecuteActionRequest(
- clusterName, null, NAGIOS_ACTION_NAME,
- Collections.singletonList(resourceFilter),
- level, params);
-
- if (null == response) {
- // createAction() may throw an exception if Nagios is in MS or
- // if Nagios is absent in cluster. This exception is usually ignored at
- // upper levels
- response = amc.createAction(actionRequest, requestProperties);
- }
- }
- return response;
+ RequestOperationLevel level =
+ new RequestOperationLevel(Resource.Type.HostComponent,
+ clusterName, NAGIOS_SERVICE, NAGIOS_COMPONENT, null);
+
+ ExecuteActionRequest actionRequest = new ExecuteActionRequest(
+ clusterName, null, NAGIOS_ACTION_NAME,
+ Collections.singletonList(resourceFilter),
+ level, params);
+
+ // createAction() may throw an exception if Nagios is in MS or
+ // if Nagios is absent in cluster. This exception is usually ignored at
+ // upper levels
+ return amc.createAction(actionRequest, requestPropertiesClone);
}
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/b22ce6c3/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
index c6b0970..9a2be41 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
@@ -835,8 +835,6 @@ public class ComponentResourceProvider extends AbstractControllerResourceProvide
// TODO additional validation?
- // TODO if all components reach a common state, should service state be
- // modified?
Cluster cluster = clusters.getCluster(clusterNames.iterator().next());
return getManagementController().createAndPersistStages(cluster, requestProperties, null, null, changedComps, changedScHosts,
http://git-wip-us.apache.org/repos/asf/ambari/blob/b22ce6c3/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
index 03f7233..facc670 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
@@ -533,7 +533,10 @@ public class HostResourceProvider extends AbstractControllerResourceProvider {
AmbariManagementController controller = getManagementController();
Clusters clusters = controller.getClusters();
- Set<String> maintenanceClusters = new HashSet<String>();
+
+ // We don't expect batch requests for different clusters, that's why
+ // nothing bad should happen if value is overwritten few times
+ String maintenanceCluster = null;
for (HostRequest request : requests) {
if (request.getHostname() == null
@@ -582,8 +585,7 @@ public class HostResourceProvider extends AbstractControllerResourceProvider {
"maintenance state to one of " + EnumSet.of(MaintenanceState.OFF, MaintenanceState.ON));
} else {
h.setMaintenanceState(c.getClusterId(), newState);
-
- maintenanceClusters.add(c.getClusterName());
+ maintenanceCluster = c.getClusterName();
}
}
}
@@ -628,9 +630,9 @@ public class HostResourceProvider extends AbstractControllerResourceProvider {
//todo: that are allowed above, should throw exception
}
- if (maintenanceClusters.size() > 0) {
+ if (maintenanceCluster != null) {
try {
- maintenanceStateHelper.createRequests(controller, requestProperties, maintenanceClusters);
+ maintenanceStateHelper.createRequests(controller, requestProperties, maintenanceCluster);
} catch (Exception e) {
LOG.warn("Could not send maintenance status to Nagios (" + e.getMessage() + ")");
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/b22ce6c3/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java
index f8a362d..aec91fd 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java
@@ -597,7 +597,10 @@ public class ServiceResourceProvider extends AbstractControllerResourceProvider
}
Clusters clusters = controller.getClusters();
- Set<String> maintenanceClusters = new HashSet<String>();
+
+ // We don't expect batch requests for different clusters, that's why
+ // nothing bad should happen if value is overwritten few times
+ String maintenanceCluster = null;
for (ServiceRequest request : requests) {
if (request.getClusterName() == null
@@ -653,8 +656,7 @@ public class ServiceResourceProvider extends AbstractControllerResourceProvider
"maintenance state to one of " + EnumSet.of(MaintenanceState.OFF, MaintenanceState.ON));
} else {
s.setMaintenanceState(newMaint);
-
- maintenanceClusters.add(cluster.getClusterName());
+ maintenanceCluster = cluster.getClusterName();
}
}
}
@@ -726,9 +728,9 @@ public class ServiceResourceProvider extends AbstractControllerResourceProvider
+ " changes for a set of services at the same time");
}
- if (maintenanceClusters.size() > 0) {
+ if (maintenanceCluster != null) {
try {
- maintenanceStateHelper.createRequests(controller, requestProperties, maintenanceClusters);
+ maintenanceStateHelper.createRequests(controller, requestProperties, maintenanceCluster);
} catch (Exception e) {
LOG.warn("Could not send maintenance state to Nagios (" + e.getMessage() + ")");
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/b22ce6c3/ambari-server/src/test/java/org/apache/ambari/server/controller/MaintenanceStateHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/MaintenanceStateHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/MaintenanceStateHelperTest.java
index c9ac5bb..9b4ce29 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/MaintenanceStateHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/MaintenanceStateHelperTest.java
@@ -107,7 +107,7 @@ public class MaintenanceStateHelperTest {
Map<String, String> map = new HashMap<String, String>();
map.put("context", "abc");
- maintenanceStateHelper.createRequests(amc, map, Collections.singleton(sch.getClusterName()));
+ maintenanceStateHelper.createRequests(amc, map, sch.getClusterName());
ExecuteActionRequest ear = earCapture.getValue();
map = rpCapture.getValue();
@@ -167,7 +167,7 @@ public class MaintenanceStateHelperTest {
Map<String, String> map = new HashMap<String, String>();
map.put("context", "abc");
- maintenanceStateHelper.createRequests(amc, map, Collections.singleton(cluster.getClusterName()));
+ maintenanceStateHelper.createRequests(amc, map, cluster.getClusterName());
ExecuteActionRequest ear = earCapture.getValue();
rpCapture.getValue();
@@ -227,7 +227,7 @@ public class MaintenanceStateHelperTest {
Map<String, String> map = new HashMap<String, String>();
map.put("context", "abc");
- maintenanceStateHelper.createRequests(amc, map, Collections.singleton("c1"));
+ maintenanceStateHelper.createRequests(amc, map, "c1");
ExecuteActionRequest ear = earCapture.getValue();
map = rpCapture.getValue();
@@ -540,6 +540,34 @@ public class MaintenanceStateHelperTest {
Assert.assertTrue(ignored.contains("host3"));
}
+ @Test
+ public void testcreateRequests() throws AmbariException {
+ Injector injector = createStrictMock(Injector.class);
+ MaintenanceStateHelper maintenanceStateHelper =
+ createMockBuilder(MaintenanceStateHelper.class)
+ .withConstructor(injector)
+ .createNiceMock();
+ replay(maintenanceStateHelper);
+
+ RequestStatusResponse rsrMock = EasyMock.createMock(RequestStatusResponse.class);
+ AmbariManagementController amcMock = EasyMock.createMock(AmbariManagementController.class);
+
+ Capture<Map<String, String>> rpCapture = new Capture<Map<String, String>>();
+ Capture<ExecuteActionRequest> actReqCapture = new Capture<ExecuteActionRequest>();
+ expect(amcMock.createAction(capture(actReqCapture), capture(rpCapture))).andReturn(rsrMock);
+ replay(amcMock, rsrMock);
+
+ Map<String, String> requestProperties = new HashMap<String, String>();
+ requestProperties.put("context", "some.request.description");
+
+ maintenanceStateHelper.createRequests(amcMock, requestProperties, "dummy_cluster");
+
+ verify(amcMock);
+
+ // Check that new request name is substituted
+ Assert.assertEquals(rpCapture.getValue().get("context"), MaintenanceStateHelper.UPDATE_NAGIOS_REQUEST_NAME);
+ }
+
private static void injectField(MaintenanceStateHelper maintenanceStateHelper, Clusters clusters)
throws NoSuchFieldException, IllegalAccessException {
Class<?> maintenanceHelperClass = MaintenanceStateHelper.class;