Fix CID 1127045 Dead local store

Fix CID 1127041,1127040, 1127039, 1127038, 1127037 String concatenation in loop
This commit is contained in:
Hugo Trippaers 2013-11-07 14:40:14 +01:00
parent 9631df8d0e
commit ad0d7f882f
1 changed files with 57 additions and 52 deletions

View File

@ -19,7 +19,6 @@ package com.cloud.hypervisor.hyperv.resource;
import java.io.File;
import java.io.IOException;
import java.net.ConnectException;
import java.net.InetSocketAddress;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
@ -27,16 +26,11 @@ import java.nio.channels.SocketChannel;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.UUID;
import javax.ejb.Local;
import javax.inject.Inject;
import javax.naming.ConfigurationException;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
import org.apache.cloudstack.utils.identity.ManagementServerNode;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
@ -47,6 +41,8 @@ import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.apache.log4j.Logger;
import com.google.gson.Gson;
import com.cloud.agent.api.Answer;
import com.cloud.agent.api.CheckRouterAnswer;
import com.cloud.agent.api.CheckRouterCommand;
@ -60,7 +56,6 @@ import com.cloud.agent.api.NetworkUsageCommand;
import com.cloud.agent.api.PingCommand;
import com.cloud.agent.api.PingRoutingCommand;
import com.cloud.agent.api.PingTestCommand;
import com.cloud.agent.api.StartCommand;
import com.cloud.agent.api.StartupCommand;
import com.cloud.agent.api.StartupRoutingCommand;
import com.cloud.agent.api.StartupRoutingCommand.VmState;
@ -95,8 +90,6 @@ import com.cloud.agent.api.to.FirewallRuleTO;
import com.cloud.agent.api.to.IpAddressTO;
import com.cloud.agent.api.to.PortForwardingRuleTO;
import com.cloud.agent.api.to.StaticNatRuleTO;
import com.cloud.agent.api.to.VirtualMachineTO;
import com.cloud.configuration.Config;
import com.cloud.dc.DataCenter.NetworkType;
import com.cloud.host.Host.Type;
import com.cloud.hypervisor.Hypervisor;
@ -107,20 +100,11 @@ import com.cloud.network.rules.FirewallRule;
import com.cloud.resource.ServerResource;
import com.cloud.resource.ServerResourceBase;
import com.cloud.serializer.GsonHelper;
import com.cloud.storage.JavaStorageLayer;
import com.cloud.storage.StorageLayer;
import com.cloud.utils.FileUtil;
import com.cloud.utils.NumbersUtil;
import com.cloud.utils.Pair;
import com.cloud.utils.StringUtils;
import com.cloud.utils.db.GlobalLock;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.net.NetUtils;
import com.cloud.utils.script.Script;
import com.cloud.utils.ssh.SshHelper;
import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachineName;
import com.google.gson.Gson;
/**
* Implementation of dummy resource to be returned from discoverer.
@ -164,8 +148,8 @@ public class HypervDirectConnectResource extends ServerResourceBase implements S
if (!_configureCalled) {
String errMsg =
this.getClass().getName()
+ " requires configure() be called before"
+ " initialize()";
+ " requires configure() be called before"
+ " initialize()";
s_logger.error(errMsg);
}
@ -220,7 +204,7 @@ public class HypervDirectConnectResource extends ServerResourceBase implements S
"Host %s (IP %s) changed zone/data center. Was "
+ defaultStartRoutCmd.getDataCenter()
+ " NOW its " + startCmd.getDataCenter(),
_name, _agentIp);
_name, _agentIp);
s_logger.error(errMsg);
// TODO: valid to return null, or should we throw?
return null;
@ -267,8 +251,8 @@ public class HypervDirectConnectResource extends ServerResourceBase implements S
String errMsg =
String.format(
"Host %s (IP %s) name. Was " + startCmd.getName()
+ " NOW its "
+ defaultStartRoutCmd.getName(), _name,
+ " NOW its "
+ defaultStartRoutCmd.getName(), _name,
_agentIp);
s_logger.error(errMsg);
// TODO: valid to return null, or should we throw?
@ -315,7 +299,7 @@ public class HypervDirectConnectResource extends ServerResourceBase implements S
s_logger.debug("Ping host " + _name + " (IP " + _agentIp + ")");
}
Answer pingAns = this.executeRequest(pingCmd);
Answer pingAns = executeRequest(pingCmd);
if (pingAns == null || !pingAns.getResult()) {
s_logger.info("Cannot ping host " + _name + " (IP " + _agentIp
@ -390,9 +374,9 @@ public class HypervDirectConnectResource extends ServerResourceBase implements S
} else if (clazz == GetDomRVersionCmd.class) {
answer = execute((GetDomRVersionCmd)cmd);
} else if (cmd instanceof NetworkUsageCommand) {
answer = execute((NetworkUsageCommand) cmd);
answer = execute((NetworkUsageCommand) cmd);
} else if (clazz == IpAssocCommand.class) {
answer = execute((IpAssocCommand) cmd);
answer = execute((IpAssocCommand) cmd);
} else if (clazz == DnsMasqConfigCommand.class) {
return execute((DnsMasqConfigCommand) cmd);
} else if (clazz == CreateIpAliasCommand.class) {
@ -430,7 +414,7 @@ public class HypervDirectConnectResource extends ServerResourceBase implements S
// Else send the cmd to hyperv agent.
String ansStr = postHttpRequest(s_gson.toJson(cmd), agentUri);
if (ansStr == null) {
return Answer.createUnsupportedCommandAnswer(cmd);
return Answer.createUnsupportedCommandAnswer(cmd);
}
// Only Answer instances are returned by remote agents.
// E.g. see Response.getAnswers()
@ -498,12 +482,13 @@ public class HypervDirectConnectResource extends ServerResourceBase implements S
Pair<Boolean, String> result;
try {
String controlIp = getRouterSshControlIp(cmd);
String cmdline = "/opt/cloud/bin/checkbatchs2svpn.sh ";
StringBuilder cmdline = new StringBuilder("/opt/cloud/bin/checkbatchs2svpn.sh ");
for (String ip : cmd.getVpnIps()) {
cmdline += " " + ip;
cmdline.append(" ");
cmdline.append(ip);
}
result = SshHelper.sshExecute(controlIp, DEFAULT_DOMR_SSHPORT, "root", getSystemVMKeyFile(), null, cmdline);
result = SshHelper.sshExecute(controlIp, DEFAULT_DOMR_SSHPORT, "root", getSystemVMKeyFile(), null, cmdline.toString());
if (!result.first()) {
s_logger.error("check site-to-site vpn connections command on domR " + cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP) + " failed, message: "
@ -833,13 +818,23 @@ public class HypervDirectConnectResource extends ServerResourceBase implements S
if (s_logger.isInfoEnabled()) {
s_logger.info("Executing deleteIpAlias command: " + s_gson.toJson(cmd));
}
String args = "";
StringBuilder args = new StringBuilder();
for (IpAliasTO ipAliasTO : revokedIpAliasTOs) {
args = args + ipAliasTO.getAlias_count() + ":" + ipAliasTO.getRouterip() + ":" + ipAliasTO.getNetmask() + "-";
args.append(ipAliasTO.getAlias_count());
args.append(":");
args.append(ipAliasTO.getRouterip());
args.append(":");
args.append(ipAliasTO.getNetmask());
args.append("-");
}
args = args + "- ";
args.append("- ");
for (IpAliasTO ipAliasTO : activeIpAliasTOs) {
args = args + ipAliasTO.getAlias_count() + ":" + ipAliasTO.getRouterip() + ":" + ipAliasTO.getNetmask() + "-";
args.append(ipAliasTO.getAlias_count());
args.append(":");
args.append(ipAliasTO.getRouterip());
args.append(":");
args.append(ipAliasTO.getNetmask());
args.append("-");
}
if (s_logger.isDebugEnabled()) {
s_logger.debug("Run command on domR " + cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP) + ", /root/deleteIpAlias " + args);
@ -887,14 +882,14 @@ public class HypervDirectConnectResource extends ServerResourceBase implements S
String[][] rules = cfgtr.generateFwRules(cmd);
String tmpCfgFilePath = "/tmp/" + routerIp.replace('.', '_') + ".cfg";
String tmpCfgFileContents = "";
StringBuilder tmpCfgFileContents = new StringBuilder();
for (int i = 0; i < config.length; i++) {
tmpCfgFileContents += config[i];
tmpCfgFileContents += "\n";
tmpCfgFileContents.append(config[i]);
tmpCfgFileContents.append("\n");
}
try {
SshHelper.scpTo(controlIp, DEFAULT_DOMR_SSHPORT, "root", keyFile, null, "/tmp/", tmpCfgFileContents.getBytes(), routerIp.replace('.', '_') + ".cfg", null);
SshHelper.scpTo(controlIp, DEFAULT_DOMR_SSHPORT, "root", keyFile, null, "/tmp/", tmpCfgFileContents.toString().getBytes(), routerIp.replace('.', '_') + ".cfg", null);
try {
String[] addRules = rules[LoadBalancerConfigurator.ADD];
@ -1076,7 +1071,7 @@ public class HypervDirectConnectResource extends ServerResourceBase implements S
} catch (Throwable e) {
s_logger.error("SetFirewallRulesCommand(args: " + args
+ ") failed on setting one rule due to "
,e);
,e);
//FIXME - in the future we have to process each rule separately; now we temporarily set every rule to be false if single rule fails
for (int i=0; i < results.length; i++) {
results[i] = "Failed";
@ -1229,9 +1224,14 @@ public class HypervDirectConnectResource extends ServerResourceBase implements S
}
cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP);
List<IpAliasTO> ipAliasTOs = cmd.getIpAliasList();
String args="";
StringBuilder args = new StringBuilder();
for (IpAliasTO ipaliasto : ipAliasTOs) {
args = args + ipaliasto.getAlias_count()+":"+ipaliasto.getRouterip()+":"+ipaliasto.getNetmask()+"-";
args.append(ipaliasto.getAlias_count());
args.append(":");
args.append(ipaliasto.getRouterip());
args.append(":");
args.append(ipaliasto.getNetmask());
args.append("-");
}
if (s_logger.isDebugEnabled()) {
s_logger.debug("Run command on domR " + cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP) + ", /root/createIpAlias " + args);
@ -1271,9 +1271,16 @@ public class HypervDirectConnectResource extends ServerResourceBase implements S
assert(controlIp != null);
List<DhcpTO> dhcpTos = cmd.getIps();
String args ="";
StringBuilder args = new StringBuilder();
for(DhcpTO dhcpTo : dhcpTos) {
args = args + dhcpTo.getRouterIp()+":"+dhcpTo.getGateway()+":"+dhcpTo.getNetmask()+":"+dhcpTo.getStartIpOfSubnet()+"-";
args.append(dhcpTo.getRouterIp());
args.append(":");
args.append(dhcpTo.getGateway());
args.append(":");
args.append(dhcpTo.getNetmask());
args.append(":");
args.append(dhcpTo.getStartIpOfSubnet());
args.append("-");
}
try {
@ -1320,7 +1327,7 @@ public class HypervDirectConnectResource extends ServerResourceBase implements S
for (; i < cmd.getIpAddresses().length; i++) {
results[i++] = IpAssocAnswer.errorResult;
}
} catch (Throwable e) {
} catch (Throwable e) {
s_logger.error("Unexpected exception: " + e.toString() + " will shortcut rest of IPAssoc commands", e);
for (; i < cmd.getIpAddresses().length; i++) {
@ -1335,14 +1342,12 @@ public class HypervDirectConnectResource extends ServerResourceBase implements S
final boolean sourceNat, final String vlanId, final String vlanGateway, final String vlanNetmask, final String vifMacAddress) throws Exception {
boolean addVif = false;
boolean removeVif = false;
if (add) {
if (s_logger.isDebugEnabled()) {
s_logger.debug("Plug new NIC to associate" + privateIpAddress + " to " + publicIpAddress);
}
addVif = true;
} else if (!add && firstIP) {
removeVif = true;
}
String args = null;
@ -1448,7 +1453,7 @@ public class HypervDirectConnectResource extends ServerResourceBase implements S
s_logger.info("Executing resource NetworkUsageCommand "+ s_gson.toJson(cmd));
}
if(cmd.getOption()!=null && cmd.getOption().equals("create") ){
String result = networkUsage(cmd.getPrivateIP(), "create", null);
networkUsage(cmd.getPrivateIP(), "create", null);
NetworkUsageAnswer answer = new NetworkUsageAnswer(cmd, "true", 0L, 0L);
return answer;
}
@ -1594,7 +1599,7 @@ public class HypervDirectConnectResource extends ServerResourceBase implements S
// Unsupported commands will not route.
if (response.getStatusLine().getStatusCode()
== HttpStatus.SC_NOT_FOUND) {
== HttpStatus.SC_NOT_FOUND) {
String errMsg =
"Failed to send : HTTP error code : "
+ response.getStatusLine().getStatusCode();
@ -1608,11 +1613,11 @@ public class HypervDirectConnectResource extends ServerResourceBase implements S
s_logger.error(ans);
result = s_gson.toJson(new Answer[] {ans});
} else if (response.getStatusLine().getStatusCode()
!= HttpStatus.SC_OK) {
!= HttpStatus.SC_OK) {
String errMsg =
"Failed send to " + agentUri.toString()
+ " : HTTP error code : "
+ response.getStatusLine().getStatusCode();
+ " : HTTP error code : "
+ response.getStatusLine().getStatusCode();
s_logger.error(errMsg);
return null;
} else {
@ -1707,7 +1712,7 @@ public class HypervDirectConnectResource extends ServerResourceBase implements S
sch.configureBlocking(true);
sch.socket().setSoTimeout(5000);
// we need to connect to the public ip address to check the status of the VM
/*
/*
InetSocketAddress addr = new InetSocketAddress(ipAddress, port);
sch.connect(addr);*/
return null;