You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by sw...@apache.org on 2013/03/16 04:39:05 UTC
svn commit: r1457194 [2/2] - in /incubator/ambari/trunk: ./ ambari-agent/
ambari-agent/src/main/python/ambari_agent/
ambari-agent/src/main/upgrade_scripts/ ambari-agent/src/main/upgrade_stack/
ambari-agent/src/main/upgrade_stack/HDP-1.2_HDP-1.3/ ambari...
Modified: incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java?rev=1457194&r1=1457193&r2=1457194&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java (original)
+++ incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java Sat Mar 16 03:39:02 2013
@@ -17,6 +17,7 @@
*/
package org.apache.ambari.server.agent;
+import com.google.gson.Gson;
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.Singleton;
@@ -66,7 +67,9 @@ public class HeartBeatHandler {
@Inject
ActionMetadata actionMetadata;
@Inject
- HBaseMasterPortScanner scaner;
+ HBaseMasterPortScanner scanner;
+ @Inject
+ private Gson gson;
private Map<String, Long> hostResponseIds = new HashMap<String, Long>();
private Map<String, HeartBeatResponse> hostResponses = new HashMap<String, HeartBeatResponse>();
@@ -78,7 +81,7 @@ public class HeartBeatHandler {
this.actionQueue = aq;
this.actionManager = am;
this.heartbeatMonitor = new HeartbeatMonitor(fsm, aq, am, 60000);
- this.heartbeatMonitor.setScaner(scaner);
+ this.heartbeatMonitor.setScanner(scanner);
injector.injectMembers(this);
}
@@ -151,7 +154,7 @@ public class HeartBeatHandler {
hostObject.handleEvent(new HostUnhealthyHeartbeatEvent(hostname, now,
null));
}
- if(hostState != hostObject.getState()) scaner.updateHBaseMaster(hostObject);
+ if(hostState != hostObject.getState()) scanner.updateHBaseMaster(hostObject);
} catch (InvalidStateTransitionException ex) {
LOG.warn("Asking agent to reregister due to " + ex.getMessage(), ex);
hostObject.setState(HostState.INIT);
@@ -205,7 +208,9 @@ public class HeartBeatHandler {
scHost.handleEvent(new ServiceComponentHostOpInProgressEvent(schName,
hostname, now));
}
- if(state != scHost.getState() && schName.equals(Role.HBASE_MASTER.toString())) scaner.updateHBaseMaster(cl);
+ if(state != scHost.getState() && schName.equals(Role.HBASE_MASTER.toString())) {
+ scanner.updateHBaseMaster(cl);
+ }
} catch (ServiceComponentNotFoundException scnex) {
LOG.warn("Service component not found ", scnex);
} catch (InvalidStateTransitionException ex) {
@@ -220,7 +225,7 @@ public class HeartBeatHandler {
protected void processStatusReports(HeartBeat heartbeat,
String hostname,
Clusters clusterFsm) throws
- AmbariException {
+ AmbariException {
Set<Cluster> clusters = clusterFsm.getClustersForHost(hostname);
for (Cluster cl : clusters) {
for (ComponentStatus status : heartbeat.componentStatus) {
@@ -230,9 +235,9 @@ public class HeartBeatHandler {
String componentName = status.getComponentName();
if (svc.getServiceComponents().containsKey(componentName)) {
ServiceComponent svcComp = svc.getServiceComponent(
- componentName);
+ componentName);
ServiceComponentHost scHost = svcComp.getServiceComponentHost(
- hostname);
+ hostname);
State prevState = scHost.getState();
State liveState = State.valueOf(State.class, status.getStatus());
if (prevState.equals(State.INSTALLED)
@@ -242,62 +247,58 @@ public class HeartBeatHandler {
|| prevState.equals(State.STOPPING)
|| prevState.equals(State.STOP_FAILED)) {
scHost.setState(liveState);
- LOG.info("State of service component " + componentName
- + " of service " + status.getServiceName()
- + " of cluster " + status.getClusterName()
- + " has changed from " + prevState + " to " + liveState
- + " at host " + hostname);
- if (!prevState.equals(liveState)
- && scHost.getServiceComponentName().equals(Role.HBASE_MASTER.toString())) {
- scaner.updateHBaseMaster(scHost);
+ if (!prevState.equals(liveState)) {
+ LOG.info("State of service component " + componentName
+ + " of service " + status.getServiceName()
+ + " of cluster " + status.getClusterName()
+ + " has changed from " + prevState + " to " + liveState
+ + " at host " + hostname);
+ if (scHost.getServiceComponentName().equals(Role.HBASE_MASTER.toString())) {
+ scanner.updateHBaseMaster(scHost);
+ }
}
}
- if(null != status.getStackVersion() && !status.getStackVersion().isEmpty())
- {
- scHost.setStackVersion(new StackId(status.getStackVersion()));
+ if (null != status.getStackVersion() && !status.getStackVersion().isEmpty()) {
+ scHost.setStackVersion(gson.fromJson(status.getStackVersion(), StackId.class));
}
// TODO need to get config version and stack version from live state
} else {
// TODO: What should be done otherwise?
}
- }
- catch (ServiceNotFoundException e) {
+ } catch (ServiceNotFoundException e) {
LOG.warn("Received a live status update for a non-initialized"
- + " service"
- + ", clusterName=" + status.getClusterName()
- + ", serviceName=" + status.getServiceName());
+ + " service"
+ + ", clusterName=" + status.getClusterName()
+ + ", serviceName=" + status.getServiceName());
// FIXME ignore invalid live update and continue for now?
continue;
- }
- catch (ServiceComponentNotFoundException e) {
+ } catch (ServiceComponentNotFoundException e) {
LOG.warn("Received a live status update for a non-initialized"
- + " servicecomponent"
- + ", clusterName=" + status.getClusterName()
- + ", serviceName=" + status.getServiceName()
- + ", componentName=" + status.getComponentName());
+ + " servicecomponent"
+ + ", clusterName=" + status.getClusterName()
+ + ", serviceName=" + status.getServiceName()
+ + ", componentName=" + status.getComponentName());
// FIXME ignore invalid live update and continue for now?
continue;
- }
- catch (ServiceComponentHostNotFoundException e) {
+ } catch (ServiceComponentHostNotFoundException e) {
LOG.warn("Received a live status update for a non-initialized"
- + " service"
- + ", clusterName=" + status.getClusterName()
- + ", serviceName=" + status.getServiceName()
- + ", componentName=" + status.getComponentName()
- + ", hostname=" + hostname);
+ + " service"
+ + ", clusterName=" + status.getClusterName()
+ + ", serviceName=" + status.getServiceName()
+ + ", componentName=" + status.getComponentName()
+ + ", hostname=" + hostname);
// FIXME ignore invalid live update and continue for now?
continue;
- }
- catch (RuntimeException e) {
+ } catch (RuntimeException e) {
LOG.warn("Received a live status with invalid payload"
- + " service"
- + ", clusterName=" + status.getClusterName()
- + ", serviceName=" + status.getServiceName()
- + ", componentName=" + status.getComponentName()
- + ", hostname=" + hostname
- + ", error=" + e.getMessage());
+ + " service"
+ + ", clusterName=" + status.getClusterName()
+ + ", serviceName=" + status.getServiceName()
+ + ", componentName=" + status.getComponentName()
+ + ", hostname=" + hostname
+ + ", error=" + e.getMessage());
continue;
}
}
Modified: incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatMonitor.java
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatMonitor.java?rev=1457194&r1=1457193&r2=1457194&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatMonitor.java (original)
+++ incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatMonitor.java Sat Mar 16 03:39:02 2013
@@ -47,10 +47,10 @@ public class HeartbeatMonitor implements
private final int threadWakeupInterval; //1 minute
private volatile boolean shouldRun = true;
private Thread monitorThread = null;
- private HBaseMasterPortScanner scaner;
+ private HBaseMasterPortScanner scanner;
- public void setScaner(HBaseMasterPortScanner scaner) {
- this.scaner = scaner;
+ public void setScanner(HBaseMasterPortScanner scanner) {
+ this.scanner = scanner;
}
public HeartbeatMonitor(Clusters fsm, ActionQueue aq, ActionManager am,
@@ -116,7 +116,7 @@ public class HeartbeatMonitor implements
LOG.warn("Hearbeat lost from host "+host);
//Heartbeat is expired
hostObj.handleEvent(new HostHeartbeatLostEvent(host));
- if(hostState != hostObj.getState() && scaner != null) scaner.updateHBaseMaster(hostObj);
+ if(hostState != hostObj.getState() && scanner != null) scanner.updateHBaseMaster(hostObj);
//Purge action queue
actionQueue.dequeueAll(host);
//notify action manager
Modified: incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java?rev=1457194&r1=1457193&r2=1457194&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java (original)
+++ incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java Sat Mar 16 03:39:02 2013
@@ -30,7 +30,23 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;
-import org.apache.ambari.server.*;
+
+import com.google.gson.Gson;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+import com.google.inject.Singleton;
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.ClusterNotFoundException;
+import org.apache.ambari.server.DuplicateResourceException;
+import org.apache.ambari.server.HostNotFoundException;
+import org.apache.ambari.server.ObjectNotFoundException;
+import org.apache.ambari.server.ParentObjectNotFoundException;
+import org.apache.ambari.server.Role;
+import org.apache.ambari.server.RoleCommand;
+import org.apache.ambari.server.ServiceComponentHostNotFoundException;
+import org.apache.ambari.server.ServiceComponentNotFoundException;
+import org.apache.ambari.server.ServiceNotFoundException;
+import org.apache.ambari.server.StackAccessException;
import org.apache.ambari.server.actionmanager.ActionManager;
import org.apache.ambari.server.actionmanager.HostRoleCommand;
import org.apache.ambari.server.actionmanager.RequestStatus;
@@ -45,19 +61,40 @@ import org.apache.ambari.server.security
import org.apache.ambari.server.security.authorization.Users;
import org.apache.ambari.server.serveraction.ServerAction;
import org.apache.ambari.server.stageplanner.RoleGraph;
-import org.apache.ambari.server.state.*;
+import org.apache.ambari.server.state.Cluster;
+import org.apache.ambari.server.state.Clusters;
+import org.apache.ambari.server.state.ComponentInfo;
+import org.apache.ambari.server.state.Config;
+import org.apache.ambari.server.state.ConfigFactory;
+import org.apache.ambari.server.state.DesiredConfig;
+import org.apache.ambari.server.state.Host;
+import org.apache.ambari.server.state.OperatingSystemInfo;
+import org.apache.ambari.server.state.PropertyInfo;
+import org.apache.ambari.server.state.RepositoryInfo;
+import org.apache.ambari.server.state.Service;
+import org.apache.ambari.server.state.ServiceComponent;
+import org.apache.ambari.server.state.ServiceComponentFactory;
+import org.apache.ambari.server.state.ServiceComponentHost;
+import org.apache.ambari.server.state.ServiceComponentHostEvent;
+import org.apache.ambari.server.state.ServiceComponentHostFactory;
+import org.apache.ambari.server.state.ServiceFactory;
+import org.apache.ambari.server.state.ServiceInfo;
+import org.apache.ambari.server.state.StackId;
+import org.apache.ambari.server.state.StackInfo;
+import org.apache.ambari.server.state.State;
import org.apache.ambari.server.state.fsm.InvalidStateTransitionException;
-import org.apache.ambari.server.state.svccomphost.*;
+import org.apache.ambari.server.state.svccomphost.ServiceComponentHostInstallEvent;
+import org.apache.ambari.server.state.svccomphost.ServiceComponentHostMaintenanceEvent;
+import org.apache.ambari.server.state.svccomphost.ServiceComponentHostOpInProgressEvent;
+import org.apache.ambari.server.state.svccomphost.ServiceComponentHostRestoreEvent;
+import org.apache.ambari.server.state.svccomphost.ServiceComponentHostStartEvent;
+import org.apache.ambari.server.state.svccomphost.ServiceComponentHostStopEvent;
+import org.apache.ambari.server.state.svccomphost.ServiceComponentHostUpgradeEvent;
import org.apache.ambari.server.utils.StageUtils;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.gson.Gson;
-import com.google.inject.Inject;
-import com.google.inject.Injector;
-import com.google.inject.Singleton;
-
@Singleton
public class AmbariManagementControllerImpl implements
AmbariManagementController {
@@ -103,7 +140,6 @@ public class AmbariManagementControllerI
@Inject
private Configuration configs;
-
final private String masterHostname;
final private static String JDK_RESOURCE_LOCATION =
@@ -1388,11 +1424,17 @@ public class AmbariManagementControllerI
boolean requiresVersionUpdate = requestedVersionString != null
&& !requestedVersionString.isEmpty();
if (requiresVersionUpdate) {
+ LOG.info("Received a cluster update request"
+ + ", clusterName=" + request.getClusterName()
+ + ", request=" + request);
requestedVersion = new StackId(requestedVersionString);
if (!requestedVersion.getStackName().equals(currentVersion.getStackName())) {
throw new AmbariException("Upgrade not possible between different stacks.");
}
requiresVersionUpdate = !currentVersion.equals(requestedVersion);
+ if(!requiresVersionUpdate) {
+ LOG.info("The cluster is already at " + currentVersion);
+ }
}
if (requiresVersionUpdate && requiresHostListUpdate) {
@@ -1407,6 +1449,7 @@ public class AmbariManagementControllerI
}
if (requiresVersionUpdate) {
+ LOG.info("Upgrade cluster request received for stack " + requestedVersion);
boolean retry = false;
if (0 == currentVersion.compareTo(desiredVersion)) {
if (1 != requestedVersion.compareTo(currentVersion)) {
@@ -1427,6 +1470,7 @@ public class AmbariManagementControllerI
}
} else {
retry = true;
+ LOG.info("Received upgrade request is a retry.");
if (0 != requestedVersion.compareTo(desiredVersion)) {
throw new AmbariException("Upgrade in progress to target version : "
+ desiredVersion
@@ -1472,11 +1516,13 @@ public class AmbariManagementControllerI
Map<String, Map<State, List<ServiceComponentHost>>> changedScHosts =
new HashMap<String, Map<State, List<ServiceComponentHost>>>();
+ LOG.info("Identifying components to upgrade.");
fillComponentsToUpgrade(request, cluster, changedServices, changedComps, changedScHosts);
Map<String, String> requestParameters = new HashMap<String, String>();
requestParameters.put(Configuration.UPGRADE_TO_STACK, gson.toJson(requestedVersion));
requestParameters.put(Configuration.UPGRADE_FROM_STACK, gson.toJson(currentVersion));
+ LOG.info("Creating stages for upgrade.");
List<Stage> stages = doStageCreation(cluster, changedServices,
changedComps, changedScHosts, requestParameters);
@@ -1487,7 +1533,9 @@ public class AmbariManagementControllerI
addFinalizeUpgradeAction(cluster, stages);
persistStages(stages);
updateServiceStates(changedServices, changedComps, changedScHosts);
- return getRequestStatusResponse(stages.get(0).getRequestId());
+ long requestId = stages.get(0).getRequestId();
+ LOG.info(stages.size() + " stages created for upgrade and the request id is " + requestId);
+ return getRequestStatusResponse(requestId);
}
return null;
@@ -2895,6 +2943,9 @@ public class AmbariManagementControllerI
}
}
+ // If upgrade request comes without state information then its an error
+ boolean upgradeRequest = checkIfUpgradeRequestAndValidate(request, cluster, s, sc, sch);
+
if (newState == null) {
if (LOG.isDebugEnabled()) {
LOG.debug("Nothing to do for new updateServiceComponentHost request"
@@ -2915,8 +2966,6 @@ public class AmbariManagementControllerI
seenNewStates.add(newState);
- boolean upgradeRequest = checkIfUpgradeRequestAndValidate(request, cluster, s, sc, sch);
-
if (!processingUpgradeRequest && upgradeRequest) {
processingUpgradeRequest = true;
// this needs to be the first request
@@ -3185,19 +3234,29 @@ public class AmbariManagementControllerI
throw getHostComponentUpgradeException(request, cluster, s, sc, sch,
"Upgrade cannot be accompanied with config modification");
}
- if (!request.getDesiredState().equals(State.INSTALLED.toString())) {
+ if (request.getDesiredState() == null
+ || !request.getDesiredState().equals(State.INSTALLED.toString())) {
throw getHostComponentUpgradeException(request, cluster, s, sc, sch,
"The desired state for an upgrade request must be " + State.INSTALLED);
}
+ LOG.info("Received upgrade request to " + requestedStackId + " for "
+ + "component " + sch.getServiceComponentName()
+ + " on " + sch.getHostName());
+ } else {
+ LOG.info("Stack id " + requestedStackId + " provided in the request matches"
+ + " the current stack id of the "
+ + "component " + sch.getServiceComponentName()
+ + " on " + sch.getHostName() + ". It will not be upgraded.");
}
}
return isUpgradeRequest;
}
- private AmbariException getHostComponentUpgradeException(ServiceComponentHostRequest request, Cluster cluster,
- Service s, ServiceComponent sc, ServiceComponentHost sch,
- String message) throws AmbariException {
+ private AmbariException getHostComponentUpgradeException(
+ ServiceComponentHostRequest request, Cluster cluster,
+ Service s, ServiceComponent sc, ServiceComponentHost sch,
+ String message) throws AmbariException {
return new AmbariException(message
+ ", clusterName=" + cluster.getClusterName()
+ ", clusterId=" + cluster.getClusterId()
Modified: incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java?rev=1457194&r1=1457193&r2=1457194&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java (original)
+++ incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java Sat Mar 16 03:39:02 2013
@@ -140,11 +140,14 @@ class ClusterResourceProvider extends Ab
public RequestStatus updateResources(Request request, Predicate predicate)
throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException {
-
- for (Map<String, Object> propertyMap : getPropertyMaps(request.getProperties().iterator().next(), predicate)) {
+ RequestStatusResponse response = null;
+ Set<Map<String, Object>> propertyMaps = getPropertyMaps(request.getProperties().iterator().next(), predicate);
+ if (propertyMaps.size() > 1) {
+ throw new SystemException("Single update request cannot modify multiple clusters.", null);
+ }
+ for (Map<String, Object> propertyMap : propertyMaps) {
final ClusterRequest clusterRequest = getRequest(propertyMap);
-
- modifyResources(new Command<RequestStatusResponse>() {
+ response = modifyResources(new Command<RequestStatusResponse>() {
@Override
public RequestStatusResponse invoke() throws AmbariException {
return getManagementController().updateCluster(clusterRequest);
@@ -152,7 +155,7 @@ class ClusterResourceProvider extends Ab
});
}
notifyUpdate(Resource.Type.Cluster, request, predicate);
- return getRequestStatus(null);
+ return getRequestStatus(response);
}
@Override
Modified: incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java?rev=1457194&r1=1457193&r2=1457194&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java (original)
+++ incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java Sat Mar 16 03:39:02 2013
@@ -737,12 +737,12 @@ public class TestHeartbeatHandler {
hb.setReports(new ArrayList<CommandReport>());
ArrayList<ComponentStatus> componentStatuses = new ArrayList<ComponentStatus>();
- ComponentStatus componentStatus1 =
- createComponentStatus(DummyCluster, HDFS, DummyHostStatus, State.STARTED, DATANODE, "HDP-1.3.0");
+ ComponentStatus componentStatus1 = createComponentStatus(DummyCluster, HDFS, DummyHostStatus, State.STARTED,
+ DATANODE, "{\"stackName\":\"HDP\",\"stackVersion\":\"1.3.0\"}");
ComponentStatus componentStatus2 =
createComponentStatus(DummyCluster, HDFS, DummyHostStatus, State.STARTED, NAMENODE, "");
- ComponentStatus componentStatus3 =
- createComponentStatus(DummyCluster, HDFS, DummyHostStatus, State.INSTALLED, HDFS_CLIENT, "HDP-1.3.0");
+ ComponentStatus componentStatus3 = createComponentStatus(DummyCluster, HDFS, DummyHostStatus, State.INSTALLED,
+ HDFS_CLIENT, "{\"stackName\":\"HDP\",\"stackVersion\":\"1.3.0\"}");
componentStatuses.add(componentStatus1);
componentStatuses.add(componentStatus2);
Modified: incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java?rev=1457194&r1=1457193&r2=1457194&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java (original)
+++ incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java Sat Mar 16 03:39:02 2013
@@ -3157,6 +3157,15 @@ public class AmbariManagementControllerT
updateHostAndCompareExpectedFailure(reqs, "The desired state for an upgrade request must be");
c1.setCurrentStackVersion(new StackId("HDP-0.2"));
+ sch1.setState(State.UPGRADING);
+ reqs.clear();
+ req1 = new ServiceComponentHostRequest(clusterName, serviceName1,
+ componentName1, host1, null, null);
+ req1.setDesiredStackId("HDP-0.2");
+ reqs.add(req1);
+ updateHostAndCompareExpectedFailure(reqs, "The desired state for an upgrade request must be");
+
+ c1.setCurrentStackVersion(new StackId("HDP-0.2"));
sch1.setState(State.INSTALLED);
sch1.setDesiredState(State.INSTALLED);
sch2.setState(State.INSTALLED);
@@ -3174,7 +3183,8 @@ public class AmbariManagementControllerT
updateHostAndCompareExpectedFailure(reqs, "An upgrade request cannot be combined with other");
c1.setCurrentStackVersion(new StackId("HDP-0.2"));
- sch1.setState(State.UPGRADING);
+ sch1.setState(State.INSTALLED);
+ sch1.setStackVersion(new StackId("HDP-0.2"));
reqs.clear();
req1 = new ServiceComponentHostRequest(clusterName, serviceName1,
componentName1, host1,
@@ -3183,6 +3193,18 @@ public class AmbariManagementControllerT
reqs.add(req1);
RequestStatusResponse resp = controller.updateHostComponents(reqs);
Assert.assertNull(resp);
+
+ c1.setCurrentStackVersion(new StackId("HDP-0.2"));
+ sch1.setState(State.INSTALLED);
+ sch1.setStackVersion(new StackId("HDP-0.2"));
+ reqs.clear();
+ req1 = new ServiceComponentHostRequest(clusterName, serviceName1,
+ componentName1, host1,
+ null, State.INSTALLED.toString());
+ req1.setDesiredStackId("HDP-0.2");
+ reqs.add(req1);
+ resp = controller.updateHostComponents(reqs);
+ Assert.assertNull(resp);
}
private void updateHostAndCompareExpectedFailure(Set<ServiceComponentHostRequest> reqs,