Return-Path: X-Original-To: apmail-incubator-cloudstack-commits-archive@minotaur.apache.org Delivered-To: apmail-incubator-cloudstack-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 3A905EB1A for ; Mon, 18 Mar 2013 10:15:02 +0000 (UTC) Received: (qmail 65876 invoked by uid 500); 18 Mar 2013 10:14:55 -0000 Delivered-To: apmail-incubator-cloudstack-commits-archive@incubator.apache.org Received: (qmail 65809 invoked by uid 500); 18 Mar 2013 10:14:55 -0000 Mailing-List: contact cloudstack-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: cloudstack-dev@incubator.apache.org Delivered-To: mailing list cloudstack-commits@incubator.apache.org Received: (qmail 62310 invoked by uid 99); 18 Mar 2013 10:14:50 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 18 Mar 2013 10:14:50 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 20BB135BC3; Mon, 18 Mar 2013 10:14:50 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: muralireddy@apache.org To: cloudstack-commits@incubator.apache.org X-Mailer: ASF-Git Admin Mailer Subject: [2/50] [abbrv] git commit: refs/heads/gslb-wip - CLOUDSTACK-1535: kvm agent will silently ignore many exceptions Current kvm agent will silently ignore many exception, and there's no way to see what really happened. This patch will log in trace level log Message-Id: <20130318101450.20BB135BC3@tyr.zones.apache.org> Date: Mon, 18 Mar 2013 10:14:50 +0000 (UTC) CLOUDSTACK-1535: kvm agent will silently ignore many exceptions Current kvm agent will silently ignore many exception, and there's no way to see what really happened. This patch will log in trace level log that was silently ignored. And also, it will fix huge bare Exception catch, which is very harmful because it also catches RuntimeException. Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/19c6d805 Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/19c6d805 Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/19c6d805 Branch: refs/heads/gslb-wip Commit: 19c6d8054ba4f79b70ba7acbf67dce5a57856f73 Parents: a452155 Author: Hiroaki Kawai Authored: Wed Mar 6 10:22:44 2013 -0800 Committer: Edison Su Committed: Wed Mar 6 10:22:44 2013 -0800 ---------------------------------------------------------------------- .../virtualnetwork/VirtualRoutingResource.java | 48 ++--- .../cloud/hypervisor/kvm/resource/KVMHABase.java | 6 +- .../kvm/resource/LibvirtComputingResource.java | 146 +++++++-------- .../hypervisor/kvm/resource/LibvirtXMLParser.java | 8 +- 4 files changed, 98 insertions(+), 110 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/19c6d805/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java ---------------------------------------------------------------------- diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java index fc7f08f..9dd471d 100755 --- a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java @@ -859,35 +859,29 @@ public class VirtualRoutingResource implements Manager { } public void assignVpcIpToRouter(final String routerIP, final boolean add, final String pubIP, - final String nicname, final String gateway, final String netmask, final String subnet) throws Exception { - try { - String args = ""; - - if (add) { - args += " -A "; - } else { - args += " -D "; - } + final String nicname, final String gateway, final String netmask, final String subnet) throws InternalErrorException { + String args = ""; - args += " -l "; - args += pubIP; - args += " -c "; - args += nicname; - args += " -g "; - args += gateway; - args += " -m "; - args += netmask; - args += " -n "; - args += subnet; + if (add) { + args += " -A "; + } else { + args += " -D "; + } - String result = routerProxy("vpc_ipassoc.sh", routerIP, args); - if (result != null) { - throw new InternalErrorException("KVM plugin \"vpc_ipassoc\" failed:"+result); - } - } catch (Exception e) { - String msg = "Unable to assign public IP address due to " + e.toString(); - s_logger.warn(msg, e); - throw new Exception(msg); + args += " -l "; + args += pubIP; + args += " -c "; + args += nicname; + args += " -g "; + args += gateway; + args += " -m "; + args += netmask; + args += " -n "; + args += subnet; + + String result = routerProxy("vpc_ipassoc.sh", routerIP, args); + if (result != null) { + throw new InternalErrorException("KVM plugin \"vpc_ipassoc\" failed:"+result); } } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/19c6d805/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMHABase.java ---------------------------------------------------------------------- diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMHABase.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMHABase.java index af89d9b..d067b35 100644 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMHABase.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMHABase.java @@ -23,6 +23,7 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; +import org.apache.log4j.Logger; import org.libvirt.LibvirtException; import org.libvirt.StoragePool; import org.libvirt.StoragePoolInfo; @@ -33,6 +34,7 @@ import com.cloud.utils.script.OutputInterpreter.AllLinesParser; import com.cloud.utils.script.Script; public class KVMHABase { + private static final Logger s_logger = Logger.getLogger(KVMHABase.class); private long _timeout = 60000; /* 1 minutes */ protected static String _heartBeatPath; protected long _heartBeatUpdateTimeout = 60000; @@ -124,14 +126,14 @@ public class KVMHABase { } poolName = pool.getName(); } catch (LibvirtException e) { - + s_logger.debug("Ignoring libvirt error.", e); } finally { try { if (pool != null) { pool.free(); } } catch (LibvirtException e) { - + s_logger.debug("Ignoring libvirt error.", e); } } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/19c6d805/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java ---------------------------------------------------------------------- diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java index 3c848de..aa4acbb 100755 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java @@ -692,7 +692,7 @@ ServerResource { _hvVersion = conn.getVersion(); _hvVersion = (_hvVersion % 1000000) / 1000; } catch (LibvirtException e) { - + s_logger.trace("Ignoring libvirt error.", e); } String[] info = NetUtils.getNetworkParams(_privateNic); @@ -764,8 +764,8 @@ ServerResource { if (tokens.length == 2) { try { _migrateSpeed = Integer.parseInt(tokens[0]); - } catch (Exception e) { - + } catch (NumberFormatException e) { + s_logger.trace("Ignoring migrateSpeed extraction error.", e); } s_logger.debug("device " + _pifs.get("public") + " has speed: " + String.valueOf(_migrateSpeed)); } @@ -846,8 +846,8 @@ ServerResource { throw new ConfigurationException("Unable to find class for libvirt.vif.driver " + e); } catch (InstantiationException e) { throw new ConfigurationException("Unable to instantiate class for libvirt.vif.driver " + e); - } catch (Exception e) { - throw new ConfigurationException("Failed to initialize libvirt.vif.driver " + e); + } catch (IllegalAccessException e) { + throw new ConfigurationException("Unable to instantiate class for libvirt.vif.driver " + e); } return vifDriver; } @@ -1043,7 +1043,6 @@ ServerResource { protected String startVM(Connect conn, String vmName, String domainXML) throws LibvirtException, InternalErrorException { - Domain dm = null; try { /* We create a transient domain here. When this method gets @@ -1053,12 +1052,11 @@ ServerResource { This also makes sure we never have any old "garbage" defined in libvirt which might haunt us. */ - dm = conn.domainCreateXML(domainXML, 0); + conn.domainCreateXML(domainXML, 0); } catch (final LibvirtException e) { s_logger.warn("Failed to start domain " + vmName + ": " - + e.getMessage()); + + e.getMessage(), e); } - return null; } @@ -1068,6 +1066,7 @@ ServerResource { Connect conn = LibvirtConnection.getConnection(); conn.close(); } catch (LibvirtException e) { + s_logger.trace("Ignoring libvirt error.", e); } return true; @@ -1516,11 +1515,10 @@ ServerResource { } private PlugNicAnswer execute(PlugNicCommand cmd) { - Connect conn; NicTO nic = cmd.getNic(); String vmName = cmd.getVmName(); try { - conn = LibvirtConnection.getConnection(); + Connect conn = LibvirtConnection.getConnection(); Domain vm = getDomain(conn, vmName); List pluggedNics = getInterfaces(conn, vmName); Integer nicnum = 0; @@ -1533,7 +1531,11 @@ ServerResource { } vm.attachDevice(getVifDriver(nic.getType()).plug(nic, "Other PV (32-bit)").toString()); return new PlugNicAnswer(cmd, true, "success"); - } catch (Exception e) { + } catch (LibvirtException e) { + String msg = " Plug Nic failed due to " + e.toString(); + s_logger.warn(msg, e); + return new PlugNicAnswer(cmd, false, msg); + } catch (InternalErrorException e) { String msg = " Plug Nic failed due to " + e.toString(); s_logger.warn(msg, e); return new PlugNicAnswer(cmd, false, msg); @@ -1555,7 +1557,7 @@ ServerResource { } } return new UnPlugNicAnswer(cmd, true, "success"); - } catch (Exception e) { + } catch (LibvirtException e) { String msg = " Unplug Nic failed due to " + e.toString(); s_logger.warn(msg, e); return new UnPlugNicAnswer(cmd, false, msg); @@ -1609,7 +1611,7 @@ ServerResource { return new SetupGuestNetworkAnswer(cmd, false, "Creating guest network failed due to " + result); } return new SetupGuestNetworkAnswer(cmd, true, "success"); - } catch (Exception e) { + } catch (LibvirtException e) { String msg = "Creating guest network failed due to " + e.toString(); s_logger.warn(msg, e); return new SetupGuestNetworkAnswer(cmd, false, msg); @@ -1649,7 +1651,7 @@ ServerResource { } return new SetNetworkACLAnswer(cmd, true, results); - } catch (Exception e) { + } catch (LibvirtException e) { String msg = "SetNetworkACL failed due to " + e.toString(); s_logger.error(msg, e); return new SetNetworkACLAnswer(cmd, false, results); @@ -1694,7 +1696,7 @@ ServerResource { return new SetSourceNatAnswer(cmd, false, "KVM plugin \"vpc_snat\" failed:"+result); } return new SetSourceNatAnswer(cmd, true, "success"); - } catch (Exception e) { + } catch (LibvirtException e) { String msg = "Ip SNAT failure due to " + e.toString(); s_logger.error(msg, e); return new SetSourceNatAnswer(cmd, false, msg); @@ -1739,7 +1741,10 @@ ServerResource { results[i++] = ip.getPublicIp() + " - success"; } - } catch (Exception e) { + } catch (LibvirtException e) { + s_logger.error("Ip Assoc failure on applying one ip due to exception: ", e); + results[i++] = IpAssocAnswer.errorResult; + } catch (InternalErrorException e) { s_logger.error("Ip Assoc failure on applying one ip due to exception: ", e); results[i++] = IpAssocAnswer.errorResult; } @@ -1819,7 +1824,7 @@ ServerResource { vm = getDomain(conn, cmd.getVmName()); state = vm.getInfo().state; } catch (LibvirtException e) { - + s_logger.trace("Ignoring libvirt error.", e); } } @@ -1938,7 +1943,7 @@ ServerResource { vm = getDomain(conn, cmd.getVmName()); state = vm.getInfo().state; } catch (LibvirtException e) { - + s_logger.trace("Ignoring libvirt error.", e); } } @@ -2380,7 +2385,7 @@ ServerResource { Connect conn = LibvirtConnection.getConnection(); Integer vncPort = getVncPort(conn, cmd.getName()); return new GetVncPortAnswer(cmd, _privateIp, 5900 + vncPort); - } catch (Exception e) { + } catch (LibvirtException e) { return new GetVncPortAnswer(cmd, e.toString()); } } @@ -2501,16 +2506,13 @@ ServerResource { } catch (final LibvirtException e) { s_logger.warn("Can't get vm state " + vmName + e.getMessage() + "retry:" + retry); - } catch (Exception e) { - s_logger.warn("Can't get vm state " + vmName + e.getMessage() - + "retry:" + retry); } finally { try { if (vms != null) { vms.free(); } - } catch (final LibvirtException e) { - + } catch (final LibvirtException l) { + s_logger.trace("Ignoring libvirt error.", l); } } } @@ -2603,9 +2605,6 @@ ServerResource { } catch (LibvirtException e) { s_logger.debug("Can't migrate domain: " + e.getMessage()); result = e.getMessage(); - } catch (Exception e) { - s_logger.debug("Can't migrate domain: " + e.getMessage()); - result = e.getMessage(); } finally { try { if (dm != null) { @@ -2618,7 +2617,7 @@ ServerResource { destDomain.free(); } } catch (final LibvirtException e) { - + s_logger.trace("Ignoring libvirt error.", e); } } @@ -2795,8 +2794,8 @@ ServerResource { Integer vncPort = null; try { vncPort = getVncPort(conn, cmd.getVmName()); - } catch (Exception e) { - + } catch (LibvirtException e) { + s_logger.trace("Ignoring libvirt error.", e); } get_rule_logs_for_vms(); return new RebootAnswer(cmd, null, vncPort); @@ -3124,8 +3123,20 @@ ServerResource { state = State.Running; return new StartAnswer(cmd); - } catch (Exception e) { - s_logger.warn("Exception ", e); + } catch (LibvirtException e) { + s_logger.warn("LibvirtException ", e); + if (conn != null) { + handleVmStartFailure(conn, vmName, vm); + } + return new StartAnswer(cmd, e.getMessage()); + } catch (InternalErrorException e) { + s_logger.warn("InternalErrorException ", e); + if (conn != null) { + handleVmStartFailure(conn, vmName, vm); + } + return new StartAnswer(cmd, e.getMessage()); + } catch (URISyntaxException e) { + s_logger.warn("URISyntaxException ", e); if (conn != null) { handleVmStartFailure(conn, vmName, vm); } @@ -3325,14 +3336,10 @@ ServerResource { s_logger.debug("Ping command port, " + privateIp + ":" + cmdPort); } - try { - String result = _virtRouterResource.connect(privateIp, cmdPort); - if (result != null) { - return new CheckSshAnswer(cmd, "Can not ping System vm " - + vmName + "due to:" + result); - } - } catch (Exception e) { - return new CheckSshAnswer(cmd, e); + String result = _virtRouterResource.connect(privateIp, cmdPort); + if (result != null) { + return new CheckSshAnswer(cmd, "Can not ping System vm " + + vmName + "due to:" + result); } if (s_logger.isDebugEnabled()) { @@ -3479,14 +3486,12 @@ ServerResource { + e.getMessage()); } throw e; - } catch (Exception e) { - throw new InternalErrorException(e.toString()); } finally { if (dm != null) { try { dm.free(); } catch (LibvirtException l) { - + s_logger.trace("Ignoring libvirt error.", l); } } } @@ -3704,22 +3709,21 @@ ServerResource { return convertToState(vps); } } catch (final LibvirtException e) { - s_logger.trace(e.getMessage()); - } catch (Exception e) { - s_logger.trace(e.getMessage()); + s_logger.trace("Ignoring libvirt error.", e); } finally { try { if (dm != null) { dm.free(); } - } catch (final LibvirtException e) { - + } catch (final LibvirtException l) { + s_logger.trace("Ignoring libvirt error.", l); } } try { Thread.sleep(1000); } catch (InterruptedException e) { + s_logger.trace("Ignoring InterruptedException.", e); } } return State.Stopped; @@ -3757,7 +3761,7 @@ ServerResource { dm.free(); } } catch (final LibvirtException e) { - + s_logger.trace("Ignoring libvirt error.", e); } } } @@ -3812,7 +3816,7 @@ ServerResource { dm.free(); } } catch (LibvirtException e) { - + s_logger.trace("Ignoring libvirt error.", e); } } } @@ -3832,15 +3836,13 @@ ServerResource { vmStates.put(vmName, state); } catch (final LibvirtException e) { s_logger.warn("Unable to get vms", e); - } catch (Exception e) { - s_logger.warn("Unable to get vms", e); } finally { try { if (dm != null) { dm.free(); } } catch (LibvirtException e) { - + s_logger.trace("Ignoring libvirt error.", e); } } } @@ -3891,7 +3893,7 @@ ServerResource { } } } catch (LibvirtException e) { - + s_logger.trace("Ignoring libvirt error.", e); } if (isSnapshotSupported()) { @@ -3938,7 +3940,7 @@ ServerResource { } catch (LibvirtException e) { s_logger.warn("Failed to create vm", e); msg = e.getMessage(); - } catch (Exception e) { + } catch (InternalErrorException e) { s_logger.warn("Failed to create vm", e); msg = e.getMessage(); } finally { @@ -3947,7 +3949,7 @@ ServerResource { dm.free(); } } catch (LibvirtException e) { - + s_logger.trace("Ignoring libvirt error.", e); } } @@ -3977,15 +3979,13 @@ ServerResource { break; } catch (LibvirtException e) { s_logger.debug("Failed to get vm status:" + e.getMessage()); - } catch (Exception e) { - s_logger.debug("Failed to get vm status:" + e.getMessage()); } finally { try { if (dm != null) { dm.free(); } } catch (LibvirtException l) { - + s_logger.trace("Ignoring libvirt error.", l); } } } @@ -4040,15 +4040,13 @@ ServerResource { } catch (InterruptedException ie) { s_logger.debug("Interrupted sleep"); return ie.getMessage(); - } catch (Exception e) { - s_logger.debug("Failed to stop VM :" + vmName + " :", e); - return e.getMessage(); } finally { try { if (dm != null) { dm.free(); } } catch (LibvirtException e) { + s_logger.trace("Ignoring libvirt error.", e); } } @@ -4094,7 +4092,7 @@ ServerResource { dm.free(); } } catch (LibvirtException l) { - + s_logger.trace("Ignoring libvirt error.", l); } } } @@ -4110,7 +4108,7 @@ ServerResource { } } } catch (LibvirtException e) { - + s_logger.trace("Ignoring libvirt error.", e); } return false; } @@ -4135,8 +4133,7 @@ ServerResource { parser.parseDomainXML(xmlDesc); return parser.getDescription(); } catch (LibvirtException e) { - return null; - } catch (Exception e) { + s_logger.trace("Ignoring libvirt error.", e); return null; } finally { try { @@ -4144,7 +4141,7 @@ ServerResource { dm.free(); } } catch (LibvirtException l) { - + s_logger.trace("Ignoring libvirt error.", l); } } } @@ -4242,16 +4239,13 @@ ServerResource { } catch (LibvirtException e) { s_logger.debug("Failed to get dom xml: " + e.toString()); return new ArrayList(); - } catch (Exception e) { - s_logger.debug("Failed to get dom xml: " + e.toString()); - return new ArrayList(); } finally { try { if (dm != null) { dm.free(); } } catch (LibvirtException e) { - + s_logger.trace("Ignoring libvirt error.", e); } } } @@ -4268,16 +4262,13 @@ ServerResource { } catch (LibvirtException e) { s_logger.debug("Failed to get dom xml: " + e.toString()); return new ArrayList(); - } catch (Exception e) { - s_logger.debug("Failed to get dom xml: " + e.toString()); - return new ArrayList(); } finally { try { if (dm != null) { dm.free(); } } catch (LibvirtException e) { - + s_logger.trace("Ignoring libvirt error.", e); } } } @@ -4625,8 +4616,7 @@ ServerResource { conn = LibvirtConnection.getConnection(); success = default_network_rules_for_systemvm(conn, cmd.getVmName()); } catch (LibvirtException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + s_logger.trace("Ignoring libvirt error.", e); } return new Answer(cmd, success, ""); http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/19c6d805/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtXMLParser.java ---------------------------------------------------------------------- diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtXMLParser.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtXMLParser.java index 3a61403..dd0d772 100644 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtXMLParser.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtXMLParser.java @@ -19,6 +19,7 @@ package com.cloud.hypervisor.kvm.resource; import java.io.IOException; import java.io.StringReader; +import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; @@ -40,13 +41,14 @@ public class LibvirtXMLParser extends DefaultHandler { protected boolean _initialized = false; public LibvirtXMLParser() { - try { _sp = s_spf.newSAXParser(); _initialized = true; - } catch (Exception ex) { + } catch (ParserConfigurationException e) { + s_logger.trace("Ignoring xml parser error.", e); + } catch (SAXException e) { + s_logger.trace("Ignoring xml parser error.", e); } - } public boolean parseDomainXML(String domXML) {