You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by hu...@apache.org on 2013/07/01 13:49:04 UTC
[2/3] git commit: updated refs/heads/4.1.1-sbp to 45b691a
Improve tracelogging and exception handling in CitrixResourceBase.
Custom fix for SBP
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/5702b9b6
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/5702b9b6
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/5702b9b6
Branch: refs/heads/4.1.1-sbp
Commit: 5702b9b6fd85c43d148e57a2a0fcbc552728d93a
Parents: 8f70981
Author: Hugo Trippaers <ht...@schubergphilis.com>
Authored: Mon Jul 1 13:47:38 2013 +0200
Committer: Hugo Trippaers <ht...@schubergphilis.com>
Committed: Mon Jul 1 13:47:38 2013 +0200
----------------------------------------------------------------------
.../xen/resource/CitrixResourceBase.java | 162 +++++++++++++------
1 file changed, 110 insertions(+), 52 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5702b9b6/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
index 2a0b6d2..f0ca691 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
@@ -680,8 +680,12 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
_host.vswitchNetwork = vswitchNw;
}
return _host.vswitchNetwork;
- } catch (Exception e) {
- e.printStackTrace();
+ } catch (BadServerResponse e) {
+ s_logger.error("Failure in setupvSwitchNetwork", e);
+ } catch (XenAPIException e) {
+ s_logger.error("Failure in setupvSwitchNetwork", e);
+ } catch (XmlRpcException e) {
+ s_logger.error("Failure in setupvSwitchNetwork", e);
}
return null;
@@ -2493,14 +2497,11 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
try {
host_uuid = host.getUuid(conn);
} catch (BadServerResponse e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
+ s_logger.error("Failure when calling getUuid on host", e);
} catch (XenAPIException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
+ s_logger.error("Failure when calling getUuid on host", e);
} catch (XmlRpcException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
+ s_logger.error("Failure when calling getUuid on host", e);
}
vmStates.put(record.nameLabel, new Pair<String, State>(host_uuid, state));
}
@@ -2585,7 +2586,13 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
s_logger.debug("4. The VM " + vm.getName() + " is in Migrating state");
return new PrepareForMigrationAnswer(cmd);
- } catch (Exception e) {
+ } catch (BadServerResponse e) {
+ s_logger.warn("Catch Exception " + e.getClass().getName() + " prepare for migration failed due to " + e.toString(), e);
+ return new PrepareForMigrationAnswer(cmd, e);
+ } catch (XenAPIException e) {
+ s_logger.warn("Catch Exception " + e.getClass().getName() + " prepare for migration failed due to " + e.toString(), e);
+ return new PrepareForMigrationAnswer(cmd, e);
+ } catch (XmlRpcException e) {
s_logger.warn("Catch Exception " + e.getClass().getName() + " prepare for migration failed due to " + e.toString(), e);
return new PrepareForMigrationAnswer(cmd, e);
}
@@ -2677,9 +2684,11 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
try {
vdi.destroy(conn);
} catch (Exception e) {
+ s_logger.warn("Ignoring exception in vdi.detroy", e);
}
}
} catch (Exception e){
+ s_logger.warn("Ignoring exception in vdi.detroy", e);
}
}
@@ -2738,14 +2747,27 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
poolsr.scan(conn);
try{
Thread.sleep(5000);
- } catch (Exception e) {
+ } catch (InterruptedException e) {
}
return new PrimaryStorageDownloadAnswer(snapshotvdi.getUuid(conn), phySize);
- } catch (Exception e) {
+ } catch (BadServerResponse e) {
String msg = "Catch Exception " + e.getClass().getName() + " on host:" + _host.uuid + " for template: "
- + tmplturl + " due to " + e.toString();
+ + tmplturl;
s_logger.warn(msg, e);
return new PrimaryStorageDownloadAnswer(msg);
+ } catch (XenAPIException e) {
+ String msg = "Catch Exception " + e.getClass().getName() + " on host:" + _host.uuid + " for template: "
+ + tmplturl;
+ s_logger.warn(msg, e);
+ return new PrimaryStorageDownloadAnswer(msg);
+ } catch (XmlRpcException e) {
+ String msg = "Catch Exception " + e.getClass().getName() + " on host:" + _host.uuid + " for template: "
+ + tmplturl;
+ s_logger.warn(msg, e);
+ return new PrimaryStorageDownloadAnswer(msg);
+ } catch (URISyntaxException e1) {
+ s_logger.error("Failed to parse template uri: " + tmplturl, e1);
+ return new PrimaryStorageDownloadAnswer("Failed to parse template uri : " + e1.getMessage());
}
}
@@ -2882,7 +2904,15 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
state = State.Stopping;
}
return new MigrateAnswer(cmd, true, "migration succeeded", null);
- } catch (Exception e) {
+ } catch (BadServerResponse e) {
+ String msg = "Catch Exception " + e.getClass().getName() + ": Migration failed due to " + e.toString();
+ s_logger.warn(msg, e);
+ return new MigrateAnswer(cmd, false, msg, null);
+ } catch (XenAPIException e) {
+ String msg = "Catch Exception " + e.getClass().getName() + ": Migration failed due to " + e.toString();
+ s_logger.warn(msg, e);
+ return new MigrateAnswer(cmd, false, msg, null);
+ } catch (XmlRpcException e) {
String msg = "Catch Exception " + e.getClass().getName() + ": Migration failed due to " + e.toString();
s_logger.warn(msg, e);
return new MigrateAnswer(cmd, false, msg, null);
@@ -2957,7 +2987,12 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
for ( VM vm : vms ) {
destroyPatchVbd(conn, vm.getNameLabel(conn));
}
- } catch (Exception e) {
+ } catch (BadServerResponse e) {
+ s_logger.warn("Ignoring exception during execution of ReadyCommand", e);
+ } catch (XenAPIException e) {
+ s_logger.warn("Ignoring exception during execution of ReadyCommand", e);
+ } catch (XmlRpcException e) {
+ s_logger.warn("Ignoring exception during execution of ReadyCommand", e);
}
try {
boolean result = cleanupHaltedVms(conn);
@@ -3057,11 +3092,11 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
try {
vms = VM.getByNameLabel(conn, cmd.getVmName());
} catch (XenAPIException e0) {
- s_logger.debug("getByNameLabel failed " + e0.toString());
+ s_logger.error("getByNameLabel failed " + e0.toString(), e0);
return new RebootAnswer(cmd, "getByNameLabel failed " + e0.toString(), false);
- } catch (Exception e0) {
- s_logger.debug("getByNameLabel failed " + e0.getMessage());
- return new RebootAnswer(cmd, "getByNameLabel failed", false);
+ } catch (XmlRpcException e) {
+ s_logger.error("getByNameLabel failed " + e.toString(), e);
+ return new RebootAnswer(cmd, "getByNameLabel failed " + e.toString(), false);
}
for (VM vm : vms) {
try {
@@ -3153,8 +3188,16 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
private void waitForTask(Connection c, Task task, long pollInterval, long timeout) throws XenAPIException, XmlRpcException {
long beginTime = System.currentTimeMillis();
+ if (s_logger.isTraceEnabled()) {
+ s_logger.trace("Task " + task.getNameLabel(c) + " (" + task.getUuid(c) + ") sent to " + c.getSessionReference()
+ + " is pending completion with a " + timeout + "ms timeout");
+ }
while (task.getStatus(c) == Types.TaskStatusType.PENDING) {
try {
+ if (s_logger.isTraceEnabled()) {
+ s_logger.trace("Task " + task.getNameLabel(c) + " (" + task.getUuid(c) + ") is pending, sleeping for "
+ + pollInterval + "ms");
+ }
Thread.sleep(pollInterval);
} catch (InterruptedException e) {
}
@@ -3169,6 +3212,9 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
private void checkForSuccess(Connection c, Task task) throws XenAPIException, XmlRpcException {
if (task.getStatus(c) == Types.TaskStatusType.SUCCESS) {
+ if (s_logger.isTraceEnabled()) {
+ s_logger.trace("Task " + task.getNameLabel(c) + " (" + task.getUuid(c) + ") completed");
+ }
return;
} else {
String msg = "Task failed! Task record: " + task.getRecord(c);
@@ -3178,6 +3224,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
}
}
+
void rebootVM(Connection conn, VM vm, String vmName) throws XmlRpcException {
Task task = null;
try {
@@ -5214,39 +5261,37 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
} else {
return new Answer(cmd, false, result);
}
- } catch (Exception e) {
- e.printStackTrace();
+ } catch (BadServerResponse e) {
+ s_logger.error("Failure during execution of OvsDeleteFlowCommand", e);
+ } catch (XenAPIException e) {
+ s_logger.error("Failure during execution of OvsDeleteFlowCommand", e);
+ } catch (XmlRpcException e) {
+ s_logger.error("Failure during execution of OvsDeleteFlowCommand", e);
}
return new Answer(cmd, false, "failed to delete flow for " + cmd.getVmName());
}
private List<Pair<String, Long>> ovsFullSyncStates() {
Connection conn = getConnection();
- try {
- String result = callHostPlugin(conn, "ovsgre", "ovs_get_vm_log", "host_uuid", _host.uuid);
- String [] logs = result != null ?result.split(";"): new String [0];
- List<Pair<String, Long>> states = new ArrayList<Pair<String, Long>>();
- for (String log: logs){
- String [] info = log.split(",");
- if (info.length != 5) {
- s_logger.warn("Wrong element number in ovs log(" + log +")");
- continue;
- }
-
- //','.join([bridge, vmName, vmId, seqno, tag])
- try {
- states.add(new Pair<String,Long>(info[0], Long.parseLong(info[3])));
- } catch (NumberFormatException nfe) {
- states.add(new Pair<String,Long>(info[0], -1L));
- }
+ String result = callHostPlugin(conn, "ovsgre", "ovs_get_vm_log", "host_uuid", _host.uuid);
+ String [] logs = result != null ?result.split(";"): new String [0];
+ List<Pair<String, Long>> states = new ArrayList<Pair<String, Long>>();
+ for (String log: logs){
+ String [] info = log.split(",");
+ if (info.length != 5) {
+ s_logger.warn("Wrong element number in ovs log(" + log +")");
+ continue;
}
- return states;
- } catch (Exception e) {
- e.printStackTrace();
+ //','.join([bridge, vmName, vmId, seqno, tag])
+ try {
+ states.add(new Pair<String,Long>(info[0], Long.parseLong(info[3])));
+ } catch (NumberFormatException nfe) {
+ states.add(new Pair<String,Long>(info[0], -1L));
+ }
}
- return null;
+ return states;
}
private OvsSetTagAndFlowAnswer execute(OvsSetTagAndFlowCommand cmd) {
@@ -5271,8 +5316,12 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
} else {
return new OvsSetTagAndFlowAnswer(cmd, false, result);
}
- } catch (Exception e) {
- e.printStackTrace();
+ } catch (BadServerResponse e) {
+ s_logger.error("Failure during execution of OvsSetTagAndFlowCommand", e);
+ } catch (XenAPIException e) {
+ s_logger.error("Failure during execution of OvsSetTagAndFlowCommand", e);
+ } catch (XmlRpcException e) {
+ s_logger.error("Failure during execution of OvsSetTagAndFlowCommand", e);
}
return new OvsSetTagAndFlowAnswer(cmd, false, "EXCEPTION");
@@ -5292,11 +5341,17 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
s_logger.debug("PIF object:" + pifRec.uuid + "(" + pifRec.device + ")");
return new OvsFetchInterfaceAnswer(cmd, true, "Interface " + pifRec.device + " retrieved successfully",
pifRec.IP, pifRec.netmask, pifRec.MAC);
- } catch (Exception e) {
- e.printStackTrace();
+ } catch (BadServerResponse e) {
+ s_logger.error("An error occurred while fetching the interface for " +
+ label + " on host " + _host.ip, e);
+ return new OvsFetchInterfaceAnswer(cmd, false, "EXCEPTION:" + e.getMessage());
+ } catch (XenAPIException e) {
s_logger.error("An error occurred while fetching the interface for " +
- label + " on host " + _host.ip + ":" + e.toString() +
- "(" + e.getClass() + ")");
+ label + " on host " + _host.ip, e);
+ return new OvsFetchInterfaceAnswer(cmd, false, "EXCEPTION:" + e.getMessage());
+ } catch (XmlRpcException e) {
+ s_logger.error("An error occurred while fetching the interface for " +
+ label + " on host " + _host.ip, e);
return new OvsFetchInterfaceAnswer(cmd, false, "EXCEPTION:" + e.getMessage());
}
}
@@ -5321,12 +5376,15 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
} else {
return new OvsCreateGreTunnelAnswer(cmd, true, result, _host.ip, bridge, Integer.parseInt(res[1]));
}
- } catch (Exception e) {
- e.printStackTrace();
+ } catch (BadServerResponse e) {
s_logger.error("An error occurred while creating a GRE tunnel to " +
- cmd.getRemoteIp() + " on host " + _host.ip + ":" + e.getMessage() +
- "(" + e.getClass() + ")");
-
+ cmd.getRemoteIp() + " on host " + _host.ip, e);
+ } catch (XenAPIException e) {
+ s_logger.error("An error occurred while creating a GRE tunnel to " +
+ cmd.getRemoteIp() + " on host " + _host.ip, e);
+ } catch (XmlRpcException e) {
+ s_logger.error("An error occurred while creating a GRE tunnel to " +
+ cmd.getRemoteIp() + " on host " + _host.ip, e);
}
return new OvsCreateGreTunnelAnswer(cmd, false, "EXCEPTION", _host.ip, bridge);