Repository: cloudstack Updated Branches: refs/heads/4.3 c8b80893a -> ab8fcd0b2
CLOUDSTACK-6531: stopping the router in case of command failures. Also added alerts for failures. Signed-off-by: Jayapal <jaya...@apache.org> (cherry picked from commit 59bf3559196a9452a1a048849f4f9971753d373b) Signed-off-by: Rohit Yadav <rohit.ya...@shapeblue.com> Conflicts: server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/ab8fcd0b Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/ab8fcd0b Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/ab8fcd0b Branch: refs/heads/4.3 Commit: ab8fcd0b22286f51bd86b1c83ed8f36d6c845f70 Parents: c8b8089 Author: Rajani Karuturi <rajanikarut...@gmail.com> Authored: Mon May 5 15:31:35 2014 +0530 Committer: Rohit Yadav <rohit.ya...@shapeblue.com> Committed: Tue Sep 2 14:33:31 2014 +0200 ---------------------------------------------------------------------- .../VirtualNetworkApplianceManagerImpl.java | 58 ++++++++------------ 1 file changed, 24 insertions(+), 34 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ab8fcd0b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index 466b861..bab1419 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -43,6 +43,10 @@ import javax.ejb.Local; import javax.inject.Inject; import javax.naming.ConfigurationException; +import org.apache.log4j.Logger; + +import org.apache.cloudstack.alert.AlertService; +import org.apache.cloudstack.alert.AlertService.AlertType; import org.apache.cloudstack.api.command.admin.router.RebootRouterCmd; import org.apache.cloudstack.api.command.admin.router.UpgradeRouterCmd; import org.apache.cloudstack.api.command.admin.router.UpgradeRouterTemplateCmd; @@ -76,7 +80,6 @@ import com.cloud.agent.api.NetworkUsageAnswer; import com.cloud.agent.api.NetworkUsageCommand; import com.cloud.agent.api.PvlanSetupCommand; import com.cloud.agent.api.StartupCommand; -import com.cloud.agent.api.check.CheckSshAnswer; import com.cloud.agent.api.check.CheckSshCommand; import com.cloud.agent.api.routing.CreateIpAliasCommand; import com.cloud.agent.api.routing.DeleteIpAliasCommand; @@ -2682,23 +2685,24 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V public boolean finalizeStart(VirtualMachineProfile profile, long hostId, Commands cmds, ReservationContext context) { DomainRouterVO router = _routerDao.findById(profile.getId()); - - boolean result = true; - Answer answer = cmds.getAnswer("checkSsh"); - if (answer != null && answer instanceof CheckSshAnswer) { - CheckSshAnswer sshAnswer = (CheckSshAnswer) answer; - if (sshAnswer == null || !sshAnswer.getResult()) { - s_logger.warn("Unable to ssh to the VM: " + sshAnswer.getDetails()); - result = false; + //process all the answers + for (Answer answer : cmds.getAnswers()) { + // handle any command failures + if (!answer.getResult()) { + String cmdClassName = answer.getClass().getCanonicalName().replace("Answer", "Command"); + String errorMessage = "Command: " + cmdClassName + " failed while starting virtual router"; + String errorDetails = "Details: " + answer.getDetails() + " " + answer.toString(); + //add alerts for the failed commands + _alertMgr.sendAlert(AlertService.AlertType.ALERT_TYPE_DOMAIN_ROUTER, router.getDataCenterId(), router.getPodIdToDeployIn(), errorMessage, errorDetails); + s_logger.warn(errorMessage); + //Stop the router if any of the commands failed + return false; } - } else { - result = false; } - if (result == false) { - return result; - } - + + // at this point, all the router command are successful. + boolean result = true; //Get guest networks info List<Network> guestNetworks = new ArrayList<Network>(); @@ -2713,25 +2717,11 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V } } } - - if (!result) { - return result; - } - - answer = cmds.getAnswer("getDomRVersion"); - if (answer != null && answer instanceof GetDomRVersionAnswer) { - GetDomRVersionAnswer versionAnswer = (GetDomRVersionAnswer)answer; - if (answer == null || !answer.getResult()) { - s_logger.warn("Unable to get the template/scripts version of router " + router.getInstanceName() + - " due to: " + versionAnswer.getDetails()); - result = false; - } else { - router.setTemplateVersion(versionAnswer.getTemplateVersion()); - router.setScriptsVersion(versionAnswer.getScriptsVersion()); - router = _routerDao.persist(router, guestNetworks); - } - } else { - result = false; + if (result) { + GetDomRVersionAnswer versionAnswer = (GetDomRVersionAnswer)cmds.getAnswer("getDomRVersion"); + router.setTemplateVersion(versionAnswer.getTemplateVersion()); + router.setScriptsVersion(versionAnswer.getScriptsVersion()); + router = _routerDao.persist(router, guestNetworks); } return result;