bug 11307: Add BumpUpPriorityCommand

This commit is contained in:
Sheng Yang 2011-09-14 02:58:43 -07:00
parent dfd36e4ae2
commit 3549067d55
6 changed files with 88 additions and 1 deletions

View File

@ -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());
}
@ -754,6 +770,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;
}

View File

@ -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;
@ -387,6 +388,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);
}
@ -929,6 +932,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<Boolean, String> 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));

View File

@ -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;
@ -502,6 +503,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);
}
@ -1221,6 +1224,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();

View File

@ -1125,6 +1125,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,
@ -1138,4 +1153,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 })

View File

@ -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

View File

@ -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