diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java index 6cb822ebdc6..e9c1c3d1c5c 100755 --- a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java @@ -40,6 +40,7 @@ import org.apache.commons.codec.binary.Base64; import org.apache.log4j.Logger; import com.cloud.agent.api.Answer; +import com.cloud.agent.api.BumpUpPriorityCommand; import com.cloud.agent.api.CheckRouterAnswer; import com.cloud.agent.api.CheckRouterCommand; import com.cloud.agent.api.Command; @@ -91,6 +92,7 @@ public class VirtualRoutingResource implements Manager { private String _publicEthIf; private String _privateEthIf; private String _getRouterStatusPath; + private String _bumpUpPriorityPath; private int _timeout; @@ -125,6 +127,8 @@ public class VirtualRoutingResource implements Manager { return execute ((CheckRouterCommand)cmd); } else if (cmd instanceof SetFirewallRulesCommand) { return execute((SetFirewallRulesCommand)cmd); + } else if (cmd instanceof BumpUpPriorityCommand) { + return execute((BumpUpPriorityCommand)cmd); } else { return Answer.createUnsupportedCommandAnswer(cmd); } @@ -433,6 +437,18 @@ public class VirtualRoutingResource implements Manager { return new CheckRouterAnswer(cmd, result, true); } + protected Answer execute(BumpUpPriorityCommand cmd) { + final String routerPrivateIPAddress = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP); + final Script command = new Script(_bumpUpPriorityPath, _timeout, s_logger); + final OutputInterpreter.OneLineParser parser = new OutputInterpreter.OneLineParser(); + command.add(routerPrivateIPAddress); + String result = command.execute(parser); + if (result != null) { + return new Answer(cmd, false, "BumpUpPriorityCommand failed: " + result); + } + return new Answer(cmd, true, null); + } + protected Answer execute(final CheckConsoleProxyLoadCommand cmd) { return executeProxyLoadScan(cmd, cmd.getProxyVmId(), cmd.getProxyVmName(), cmd.getProxyManagementIp(), cmd.getProxyCmdPort()); } @@ -755,6 +771,11 @@ public class VirtualRoutingResource implements Manager { } _privateEthIf = _privateEthIf.toLowerCase(); + _bumpUpPriorityPath = findScript("bumpUpPriority.sh"); + if(_bumpUpPriorityPath == null) { + throw new ConfigurationException("Unable to find bumpUpPriority.sh"); + } + return true; } diff --git a/core/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/core/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java index 6075f11b14f..1fc661b42f6 100755 --- a/core/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/core/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -35,6 +35,7 @@ import com.cloud.agent.api.AttachVolumeAnswer; import com.cloud.agent.api.AttachVolumeCommand; import com.cloud.agent.api.BackupSnapshotAnswer; import com.cloud.agent.api.BackupSnapshotCommand; +import com.cloud.agent.api.BumpUpPriorityCommand; import com.cloud.agent.api.CheckHealthAnswer; import com.cloud.agent.api.CheckHealthCommand; import com.cloud.agent.api.CheckOnHostAnswer; @@ -386,6 +387,8 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa answer = execute((CheckRouterCommand) cmd); } else if (cmd instanceof SetFirewallRulesCommand) { answer = execute((SetFirewallRulesCommand)cmd); + } else if (cmd instanceof BumpUpPriorityCommand) { + answer = execute((BumpUpPriorityCommand)cmd); } else { answer = Answer.createUnsupportedCommandAnswer(cmd); } @@ -928,6 +931,38 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa return new CheckRouterAnswer(cmd, result.second(), true); } + protected Answer execute(BumpUpPriorityCommand cmd) { + if (s_logger.isDebugEnabled()) { + s_logger.debug("Executing resource BumpUpPriorityCommand: " + _gson.toJson(cmd)); + s_logger.debug("Run command on domR " + cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP) + ", /root/bumpup_priority.sh "); + } + + Pair result; + try { + VmwareManager mgr = getServiceContext().getStockObject(VmwareManager.CONTEXT_STOCK_NAME); + result = SshHelper.sshExecute(cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP), DEFAULT_DOMR_SSHPORT, "root", mgr.getSystemVMKeyFile(), null, + "/root/bumpup_priority.sh "); + + if (!result.first()) { + s_logger.error("BumpUpPriority command on domR " + cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP) + " failed, message: " + result.second()); + + return new Answer(cmd, false, "BumpUpPriorityCommand failed due to " + result.second()); + } + + if (s_logger.isDebugEnabled()) { + s_logger.debug("BumpUpPriorityCommand on domain router " + cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP) + " completed"); + } + } catch (Throwable e) { + String msg = "BumpUpPriorityCommand failed due to " + VmwareHelper.getExceptionMessage(e); + s_logger.error(msg); + return new Answer(cmd, false, msg); + } + if (result.second() == null || result.second().isEmpty()) { + return new Answer(cmd, true, result.second()); + } + return new Answer(cmd, false, result.second()); + } + protected Answer execute(VmDataCommand cmd) { if (s_logger.isInfoEnabled()) { s_logger.info("Executing resource VmDataCommand: " + _gson.toJson(cmd)); diff --git a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java index 06821510065..1e6950d2533 100644 --- a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java +++ b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java @@ -61,6 +61,7 @@ import com.cloud.agent.api.AttachVolumeAnswer; import com.cloud.agent.api.AttachVolumeCommand; import com.cloud.agent.api.BackupSnapshotAnswer; import com.cloud.agent.api.BackupSnapshotCommand; +import com.cloud.agent.api.BumpUpPriorityCommand; import com.cloud.agent.api.CheckHealthAnswer; import com.cloud.agent.api.CheckHealthCommand; import com.cloud.agent.api.CheckOnHostAnswer; @@ -500,6 +501,8 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe return execute((CheckRouterCommand)cmd); } else if (cmd instanceof SetFirewallRulesCommand) { return execute((SetFirewallRulesCommand)cmd); + } else if (cmd instanceof BumpUpPriorityCommand) { + return execute((BumpUpPriorityCommand)cmd); } else { return Answer.createUnsupportedCommandAnswer(cmd); } @@ -1213,6 +1216,16 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe } return new CheckRouterAnswer(cmd, result, true); } + + private Answer execute(BumpUpPriorityCommand cmd) { + Connection conn = getConnection(); + String args = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP); + String result = callHostPlugin(conn, "vmops", "bumpUpPriority", "args", args); + if (result == null || result.isEmpty()) { + return new Answer(cmd, false, "BumpUpPriorityCommand failed"); + } + return new Answer(cmd, true, result); + } protected MaintainAnswer execute(MaintainCommand cmd) { Connection conn = getConnection(); diff --git a/scripts/vm/hypervisor/xenserver/vmops b/scripts/vm/hypervisor/xenserver/vmops index eab747c50c3..9490b05f5b4 100755 --- a/scripts/vm/hypervisor/xenserver/vmops +++ b/scripts/vm/hypervisor/xenserver/vmops @@ -1124,6 +1124,21 @@ def checkRouter(session, args): return txt +@echo +def bumpUpPriority(session, args): + sargs = args['args'] + cmd = sargs.split(' ') + cmd.insert(0, "/opt/xensource/bin/bumpUpPriority.sh") + cmd.insert(0, "/bin/bash") + try: + txt = util.pread2(cmd) + txt = 'success' + except: + util.SMlog("bump up priority fail! ") + txt = '' + + return txt + if __name__ == "__main__": XenAPIPlugin.dispatch({"pingtest": pingtest, "setup_iscsi":setup_iscsi, "gethostvmstats": gethostvmstats, "getvncport": getvncport, "getgateway": getgateway, "preparemigration": preparemigration, @@ -1137,4 +1152,5 @@ if __name__ == "__main__": "default_network_rules_systemvm":default_network_rules_systemvm, "get_rule_logs_for_vms":get_rule_logs_for_vms, "setLinkLocalIP":setLinkLocalIP, "lt2p_vpn":lt2p_vpn, - "cleanup_rules":cleanup_rules, "checkRouter": checkRouter}) + "cleanup_rules":cleanup_rules, "checkRouter":checkRouter, + "bumpUpPriority":bumpUpPriority }) diff --git a/scripts/vm/hypervisor/xenserver/xenserver56/patch b/scripts/vm/hypervisor/xenserver/xenserver56/patch index 8a3fe90f8ac..baed83d28cd 100644 --- a/scripts/vm/hypervisor/xenserver/xenserver56/patch +++ b/scripts/vm/hypervisor/xenserver/xenserver56/patch @@ -46,3 +46,4 @@ upgrade_snapshot.sh=..,0755,/opt/xensource/bin cloud-clean-vlan.sh=..,0755,/opt/xensource/bin cloud-prepare-upgrade.sh=..,0755,/opt/xensource/bin getRouterStatus.sh=../../../../network/domr/,0755,/opt/xensource/bin +bumpUpPriority.sh=../../../../network/domr/,0755,/opt/xensource/bin diff --git a/scripts/vm/hypervisor/xenserver/xenserver56fp1/patch b/scripts/vm/hypervisor/xenserver/xenserver56fp1/patch index 9b18f2f456a..69458dd7e52 100644 --- a/scripts/vm/hypervisor/xenserver/xenserver56fp1/patch +++ b/scripts/vm/hypervisor/xenserver/xenserver56fp1/patch @@ -46,3 +46,4 @@ upgrade_snapshot.sh=..,0755,/opt/xensource/bin cloud-clean-vlan.sh=..,0755,/opt/xensource/bin cloud-prepare-upgrade.sh=..,0755,/opt/xensource/bin getRouterStatus.sh=../../../../network/domr/,0755,/opt/xensource/bin +bumpUpPriority.sh=../../../../network/domr/,0755,/opt/xensource/bin