Repository: cloudstack Updated Branches: refs/heads/master acffe5ac3 -> b73fe3251
Fixing Coverity Issues(2nd) in CitrixResourceBase.java Signed-off-by: Santhosh Edukulla <santhosh.eduku...@gmail.com> Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/b73fe325 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/b73fe325 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/b73fe325 Branch: refs/heads/master Commit: b73fe325199705eaedb0b8a9a3927f7063875c0e Parents: acffe5a Author: Damodar <damoder.re...@citrix.com> Authored: Mon Aug 4 17:24:43 2014 +0530 Committer: Santhosh Edukulla <santhosh.eduku...@gmail.com> Committed: Mon Aug 4 17:30:43 2014 +0530 ---------------------------------------------------------------------- .../xenserver/resource/CitrixResourceBase.java | 166 ++++++++++++------- 1 file changed, 107 insertions(+), 59 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b73fe325/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java ---------------------------------------------------------------------- diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java index 775f5455..d7abab5 100644 --- a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java +++ b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java @@ -32,6 +32,7 @@ import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; +import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -353,19 +354,21 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe Host host = Host.getByUuid(conn, _host.uuid); Map<VM, VM.Record> vms = VM.getAllRecords(conn); boolean success = true; - for (Map.Entry<VM, VM.Record> entry : vms.entrySet()) { - VM vm = entry.getKey(); - VM.Record vmRec = entry.getValue(); - if (vmRec.isATemplate || vmRec.isControlDomain) { - continue; - } + if(vms != null && !vms.isEmpty()) { + for (Map.Entry<VM, VM.Record> entry : vms.entrySet()) { + VM vm = entry.getKey(); + VM.Record vmRec = entry.getValue(); + if (vmRec.isATemplate || vmRec.isControlDomain) { + continue; + } - if (VmPowerState.HALTED.equals(vmRec.powerState) && vmRec.affinity.equals(host) && !isAlienVm(vm, conn)) { - try { - vm.destroy(conn); - } catch (Exception e) { - s_logger.warn("Catch Exception " + e.getClass().getName() + ": unable to destroy VM " + vmRec.nameLabel + " due to ", e); - success = false; + if (VmPowerState.HALTED.equals(vmRec.powerState) && vmRec.affinity.equals(host) && !isAlienVm(vm, conn)) { + try { + vm.destroy(conn); + } catch (Exception e) { + s_logger.warn("Catch Exception " + e.getClass().getName() + ": unable to destroy VM " + vmRec.nameLabel + " due to ", e); + success = false; + } } } } @@ -1652,6 +1655,10 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe String nwNameLabel = null; try { nw = getNativeNetworkForTraffic(conn, TrafficType.Guest, networkTag); + if (nw == null) { + s_logger.error("Network is not configured on the backend for pvlan " + primaryPvlan); + throw new CloudRuntimeException("Network for the backend is not configured correctly for pvlan primary: " + primaryPvlan); + } nwNameLabel = nw.getNetwork().getNameLabel(conn); } catch (XenAPIException e) { s_logger.warn("Fail to get network", e); @@ -2920,11 +2927,13 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe Set<Host> hosts = Host.getAll(conn); Host dsthost = null; - for (Host host : hosts) { + if(hosts != null) { + for (Host host : hosts) { if (host.getAddress(conn).equals(ipaddr)) { - dsthost = host; - break; + dsthost = host; + break; } + } } if (dsthost == null) { String msg = "Migration failed due to unable to find host " + ipaddr + " in XenServer pool " + _host.pool; @@ -3998,6 +4007,9 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe nwr.tags.add(generateTimeStamp()); vlanNetwork = Network.create(conn, nwr); vlanNic = getNetworkByName(conn, newName); + if(vlanNic == null) { //Still vlanNic is null means we could not create it for some reason and no exception capture happened. + throw new CloudRuntimeException("Could not find/create vlan network with name: " + newName); + } } PIF nPif = network.getPif(conn); @@ -4026,25 +4038,27 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe protected SR getLocalLVMSR(Connection conn) { try { Map<SR, SR.Record> map = SR.getAllRecords(conn); - for (Map.Entry<SR, SR.Record> entry : map.entrySet()) { + if(map != null && !map.isEmpty()) { + for (Map.Entry<SR, SR.Record> entry : map.entrySet()) { SR.Record srRec = entry.getValue(); if (SRType.LVM.equals(srRec.type)) { - Set<PBD> pbds = srRec.PBDs; - if (pbds == null) { - continue; - } - for (PBD pbd : pbds) { - Host host = pbd.getHost(conn); - if (!isRefNull(host) && host.getUuid(conn).equals(_host.uuid)) { - if (!pbd.getCurrentlyAttached(conn)) { - pbd.plug(conn); - } - SR sr = entry.getKey(); - sr.scan(conn); - return sr; - } + Set<PBD> pbds = srRec.PBDs; + if (pbds == null) { + continue; + } + for (PBD pbd : pbds) { + Host host = pbd.getHost(conn); + if (!isRefNull(host) && host.getUuid(conn).equals(_host.uuid)) { + if (!pbd.getCurrentlyAttached(conn)) { + pbd.plug(conn); + } + SR sr = entry.getKey(); + sr.scan(conn); + return sr; } + } } + } } } catch (XenAPIException e) { String msg = "Unable to get local LVMSR in host:" + _host.uuid + e.toString(); @@ -4059,25 +4073,27 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe protected SR getLocalEXTSR(Connection conn) { try { Map<SR, SR.Record> map = SR.getAllRecords(conn); - for (Map.Entry<SR, SR.Record> entry : map.entrySet()) { + if(map != null && !map.isEmpty()) { + for (Map.Entry<SR, SR.Record> entry : map.entrySet()) { SR.Record srRec = entry.getValue(); if (SRType.FILE.equals(srRec.type) || SRType.EXT.equals(srRec.type)) { - Set<PBD> pbds = srRec.PBDs; - if (pbds == null) { - continue; - } - for (PBD pbd : pbds) { - Host host = pbd.getHost(conn); - if (!isRefNull(host) && host.getUuid(conn).equals(_host.uuid)) { - if (!pbd.getCurrentlyAttached(conn)) { - pbd.plug(conn); - } - SR sr = entry.getKey(); - sr.scan(conn); - return sr; - } + Set<PBD> pbds = srRec.PBDs; + if (pbds == null) { + continue; + } + for (PBD pbd : pbds) { + Host host = pbd.getHost(conn); + if (!isRefNull(host) && host.getUuid(conn).equals(_host.uuid)) { + if (!pbd.getCurrentlyAttached(conn)) { + pbd.plug(conn); + } + SR sr = entry.getKey(); + sr.scan(conn); + return sr; } + } } + } } } catch (XenAPIException e) { String msg = "Unable to get local EXTSR in host:" + _host.uuid + e.toString(); @@ -4211,9 +4227,11 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe Set<HostCpu> hcs = null; for (int i = 0; i < 10; i++) { hcs = myself.getHostCPUs(conn); - _host.cpus = hcs.size(); - if (_host.cpus > 0) { + if(hcs != null) { + _host.cpus = hcs.size(); + if (_host.cpus > 0) { break; + } } Thread.sleep(5000); } @@ -4285,8 +4303,9 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe XsLocalNetwork storageNic2 = null; if (_storageNetworkName2 != null) { storageNic2 = getNetworkByName(conn, _storageNetworkName2); - _host.storageNetwork2 = storageNic2.getNetworkRecord(conn).uuid; - _host.storagePif2 = storageNic2.getPifRecord(conn).uuid; + if(storageNic2 != null) { + _host.storagePif2 = storageNic2.getPifRecord(conn).uuid; + } } s_logger.info("Private Network is " + _privateNetworkName + " for host " + _host.ip); @@ -4578,6 +4597,11 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe } Map<Network, Network.Record> networks = Network.getAllRecords(conn); + if(networks == null) { + String msg = "Unable to setup as there are no networks in the host: " + _host.uuid; + s_logger.warn(msg); + return new SetupAnswer(cmd, msg); + } for (Network.Record network : networks.values()) { if (network.nameLabel.equals("cloud-private")) { for (PIF pif : network.PIFs) { @@ -5305,6 +5329,9 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe Connection conn = getConnection(); try { XsLocalNetwork nw = getNetworkByName(conn, label); + if(nw == null) { + throw new CloudRuntimeException("Unable to locate the network with name-label: " + label + " on host: " + _host.ip); + } s_logger.debug("Network object:" + nw.getNetwork().getUuid(conn)); PIF pif = nw.getPif(conn); PIF.Record pifRec = pif.getRecord(conn); @@ -5578,7 +5605,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe throw new ConfigurationException("Unable to get the username"); } - if (_password == null) { + if (_password.peek() == null) { throw new ConfigurationException("Unable to get the password"); } @@ -5932,7 +5959,11 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe } Set<Host> setHosts = Host.getAll(conn); - + if(setHosts == null) { + String msg = "Unable to create Iscsi SR " + deviceConfig + " due to hosts not available."; + s_logger.warn(msg); + throw new CloudRuntimeException(msg); + } for (Host currentHost : setHosts) { PBD.Record rec = new PBD.Record(); @@ -6230,7 +6261,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe if (volumeTo.getVolumeType() == Volume.Type.ROOT) { Map<VM, VM.Record> allVMs = VM.getAllRecords(conn); // add size of memory snapshot vdi - if (allVMs.size() > 0) { + if (allVMs != null && allVMs.size() > 0) { for (VM vmr : allVMs.keySet()) { try { String vName = vmr.getNameLabel(conn); @@ -6275,7 +6306,13 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe // check if there is already a task for this VM snapshot Task task = null; Set<Task> tasks = Task.getByNameLabel(conn, "Async.VM.snapshot"); - tasks.addAll(Task.getByNameLabel(conn, "Async.VM.checkpoint")); + if(tasks == null) { + tasks = new LinkedHashSet<>(); + } + Set<Task> tasksByName = Task.getByNameLabel(conn, "Async.VM.checkpoint"); + if(tasksByName != null) { + tasks.addAll(tasksByName); + } for (Task taskItem : tasks) { if (taskItem.getOtherConfig(conn).containsKey("CS_VM_SNAPSHOT_KEY")) { String vmSnapshotTaskName = taskItem.getOtherConfig(conn).get("CS_VM_SNAPSHOT_KEY"); @@ -6948,7 +6985,6 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe public String linkLocalNetwork; public Network vswitchNetwork; public String storageNetwork1; - public String storageNetwork2; public String guestNetwork; public String guestPif; public String publicPif; @@ -7023,11 +7059,13 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe final HashMap<String, String> vmMetaDatum = new HashMap<String, String>(); try { Map<VM, VM.Record> vm_map = VM.getAllRecords(conn); //USE THIS TO GET ALL VMS FROM A CLUSTER - for (VM.Record record: vm_map.values()) { + if(vm_map != null) { + for (VM.Record record : vm_map.values()) { if (record.isControlDomain || record.isASnapshot || record.isATemplate) { - continue; // Skip DOM0 + continue; // Skip DOM0 } vmMetaDatum.put(record.nameLabel, StringUtils.mapToString(record.platform)); + } } } catch (final Throwable e) { String msg = "Unable to get vms through host " + _host.uuid + " due to to " + e.toString(); @@ -7200,9 +7238,19 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe VM router = getVM(conn, routerName); NicTO nic = cmd.getNic(); - VIF vif = getVifByMac(conn, router, nic.getMac()); - - nic.setDeviceId(Integer.valueOf(vif.getDevice(conn))); + if(nic != null) { + VIF vif = getVifByMac(conn, router, nic.getMac()); + if(vif == null) { + String msg = "Prepare SetNetworkACL failed due to VIF is null for : " + nic.getMac() +" with routername: " + routerName; + s_logger.error(msg); + return new ExecutionResult(false, msg); + } + nic.setDeviceId(Integer.valueOf(vif.getDevice(conn))); + } else { + String msg = "Prepare SetNetworkACL failed due to nic is null for : " + routerName; + s_logger.error(msg); + return new ExecutionResult(false, msg); + } } catch (Exception e) { String msg = "Prepare SetNetworkACL failed due to " + e.toString(); s_logger.error(msg, e);