This is an automated email from the ASF dual-hosted git repository.

rafael pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/master by this push:
     new 4c42aaf  [CLOUDSTACK-10356] Fix NPE in Cloudstack found with 
NPEDetector  (#2573)
4c42aaf is described below

commit 4c42aafae0d3286a38d796a7c69a6aec6810cf79
Author: brett <1099446...@qq.com>
AuthorDate: Thu Apr 26 21:03:46 2018 +0800

    [CLOUDSTACK-10356] Fix NPE in Cloudstack found with NPEDetector  (#2573)
    
    * fix https://issues.apache.org/jira/browse/CLOUDSTACK-10356
    
    * del patch file
    
    * Update ResourceCountDaoImpl.java
    
    * fix some format
    
    * fix code
    
    * fix error message in VolumeOrchestrator
    
    * add check null stmt
    
    * del import unuse class
    
    * use BooleanUtils to check Boolean
    
    * fix error message
    
    * delete unuse function
    
    * delete the deprecated function  updateDomainCount
    
    * add error log and throw exception in ProjectManagerImpl.java
---
 .../engine/orchestration/VolumeOrchestrator.java           |  3 +++
 .../java/com/cloud/configuration/dao/ResourceCountDao.java |  3 ---
 .../com/cloud/configuration/dao/ResourceCountDaoImpl.java  | 10 ----------
 .../java/com/cloud/deploy/ImplicitDedicationPlanner.java   | 12 +++++++-----
 .../hypervisor/kvm/resource/LibvirtComputingResource.java  | 10 ++++++++--
 .../hypervisor/kvm/storage/LibvirtStorageAdaptor.java      |  4 +++-
 .../network/router/VirtualNetworkApplianceManagerImpl.java |  6 ++++++
 .../router/VpcVirtualNetworkApplianceManagerImpl.java      | 14 ++++++++------
 .../main/java/com/cloud/projects/ProjectManagerImpl.java   |  4 ++++
 .../main/java/com/cloud/template/TemplateManagerImpl.java  |  5 ++++-
 .../region/gslb/GlobalLoadBalancingRulesServiceImpl.java   |  9 ++++++---
 11 files changed, 49 insertions(+), 31 deletions(-)

diff --git 
a/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
 
b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
index f02fdc4..c8279ff 100644
--- 
a/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
+++ 
b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
@@ -499,6 +499,9 @@ public class VolumeOrchestrator extends ManagerBase 
implements VolumeOrchestrati
 
         // Find a suitable storage to create volume on
         StoragePool destPool = findStoragePool(dskCh, dc, pod, clusterId, 
null, vm, avoidPools);
+        if (destPool == null) {
+            throw new CloudRuntimeException("Failed to find a suitable storage 
pool to create Volume in the pod/cluster of the provided VM "+ vm.getUuid());
+        }
         DataStore destStore = dataStoreMgr.getDataStore(destPool.getId(), 
DataStoreRole.Primary);
         AsyncCallFuture<VolumeApiResult> future = 
volService.copyVolume(volume, destStore);
 
diff --git 
a/engine/schema/src/main/java/com/cloud/configuration/dao/ResourceCountDao.java 
b/engine/schema/src/main/java/com/cloud/configuration/dao/ResourceCountDao.java
index b5a75d1..28f2a53 100644
--- 
a/engine/schema/src/main/java/com/cloud/configuration/dao/ResourceCountDao.java
+++ 
b/engine/schema/src/main/java/com/cloud/configuration/dao/ResourceCountDao.java
@@ -39,9 +39,6 @@ public interface ResourceCountDao extends 
GenericDao<ResourceCountVO, Long> {
      */
     void setResourceCount(long ownerId, ResourceOwnerType ownerType, 
ResourceType type, long count);
 
-    @Deprecated
-    void updateDomainCount(long domainId, ResourceType type, boolean 
increment, long delta);
-
     boolean updateById(long id, boolean increment, long delta);
 
     void createResourceCounts(long ownerId, ResourceOwnerType ownerType);
diff --git 
a/engine/schema/src/main/java/com/cloud/configuration/dao/ResourceCountDaoImpl.java
 
b/engine/schema/src/main/java/com/cloud/configuration/dao/ResourceCountDaoImpl.java
index 5626133..dbf22281 100644
--- 
a/engine/schema/src/main/java/com/cloud/configuration/dao/ResourceCountDaoImpl.java
+++ 
b/engine/schema/src/main/java/com/cloud/configuration/dao/ResourceCountDaoImpl.java
@@ -121,16 +121,6 @@ public class ResourceCountDaoImpl extends 
GenericDaoBase<ResourceCountVO, Long>
     }
 
     @Override
-    @Deprecated
-    public void updateDomainCount(long domainId, ResourceType type, boolean 
increment, long delta) {
-        delta = increment ? delta : delta * -1;
-
-        ResourceCountVO resourceCountVO = findByOwnerAndType(domainId, 
ResourceOwnerType.Domain, type);
-        resourceCountVO.setCount(resourceCountVO.getCount() + delta);
-        update(resourceCountVO.getId(), resourceCountVO);
-    }
-
-    @Override
     public boolean updateById(long id, boolean increment, long delta) {
         delta = increment ? delta : delta * -1;
 
diff --git 
a/plugins/deployment-planners/implicit-dedication/src/main/java/com/cloud/deploy/ImplicitDedicationPlanner.java
 
b/plugins/deployment-planners/implicit-dedication/src/main/java/com/cloud/deploy/ImplicitDedicationPlanner.java
index 5bad922..45f16ab 100644
--- 
a/plugins/deployment-planners/implicit-dedication/src/main/java/com/cloud/deploy/ImplicitDedicationPlanner.java
+++ 
b/plugins/deployment-planners/implicit-dedication/src/main/java/com/cloud/deploy/ImplicitDedicationPlanner.java
@@ -39,6 +39,7 @@ import com.cloud.utils.DateUtil;
 import com.cloud.utils.NumbersUtil;
 import com.cloud.vm.VMInstanceVO;
 import com.cloud.vm.VirtualMachineProfile;
+import org.springframework.util.CollectionUtils;
 
 public class ImplicitDedicationPlanner extends FirstFitPlanner implements 
DeploymentClusterPlanner {
 
@@ -256,14 +257,15 @@ public class ImplicitDedicationPlanner extends 
FirstFitPlanner implements Deploy
 
             // Get the list of all the hosts in the given clusters
             List<Long> allHosts = new ArrayList<Long>();
-            for (Long cluster : clusterList) {
-                List<HostVO> hostsInCluster = 
resourceMgr.listAllHostsInCluster(cluster);
-                for (HostVO hostVO : hostsInCluster) {
+            if (!CollectionUtils.isEmpty(clusterList)) {
+                for (Long cluster : clusterList) {
+                    List<HostVO> hostsInCluster = 
resourceMgr.listAllHostsInCluster(cluster);
+                    for (HostVO hostVO : hostsInCluster) {
 
-                    allHosts.add(hostVO.getId());
+                        allHosts.add(hostVO.getId());
+                    }
                 }
             }
-
             // Go over all the hosts in the cluster and get a list of
             // 1. All empty hosts, not running any vms.
             // 2. Hosts running vms for this account and created by a service
diff --git 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
index fc5e539..f26d8de 100644
--- 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
+++ 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
@@ -2339,7 +2339,10 @@ public class LibvirtComputingResource extends 
ServerResourceBase implements Serv
                     
disk.setCacheMode(DiskDef.DiskCacheMode.valueOf(volumeObjectTO.getCacheMode().toString().toUpperCase()));
                 }
             }
-
+            if (vm.getDevices() == null) {
+                s_logger.error("There is no devices for" + vm);
+                throw new RuntimeException("There is no devices for" + vm);
+            }
             vm.getDevices().addDevice(disk);
         }
 
@@ -2393,7 +2396,10 @@ public class LibvirtComputingResource extends 
ServerResourceBase implements Serv
                         + ") is " + nic.getType() + " traffic type. So, 
vsp-vr-ip " + vrIp + " is set in the metadata");
             }
         }
-
+        if (vm.getDevices() == null) {
+            s_logger.error("LibvirtVMDef object get devices with null result");
+            throw new InternalErrorException("LibvirtVMDef object get devices 
with null result");
+        }
         vm.getDevices().addDevice(getVifDriver(nic.getType(), 
nic.getName()).plug(nic, vm.getPlatformEmulator(), nicAdapter));
     }
 
diff --git 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
index 792fc69..63f7872 100644
--- 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
+++ 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
@@ -522,7 +522,9 @@ public class LibvirtStorageAdaptor implements 
StorageAdaptor {
                     s_logger.debug("Checking path of existing pool " + 
poolname + " against pool we want to create");
                     StoragePool p = conn.storagePoolLookupByName(poolname);
                     LibvirtStoragePoolDef pdef = getStoragePoolDef(conn, p);
-
+                    if (pdef == null) {
+                        throw new CloudRuntimeException("Unable to parse the 
storage pool definition for storage pool " + poolname);
+                    }
                     String targetPath = pdef.getTargetPath();
                     if (targetPath != null && targetPath.equals(path)) {
                         s_logger.debug("Storage pool utilizing path '" + path 
+ "' already exists as pool " + poolname +
diff --git 
a/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
 
b/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
index 1985dea..63587a8 100644
--- 
a/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
+++ 
b/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
@@ -2139,6 +2139,12 @@ Configurable, StateListener<VirtualMachine.State, 
VirtualMachine.Event, VirtualM
             }
 
             Answer answer = cmds.getAnswer("users");
+            if (answer == null) {
+                s_logger.error("Unable to start vpn: unable add users to vpn 
in zone " + router.getDataCenterId() + " for account " + vpn.getAccountId() + " 
on domR: "
+                        + router.getInstanceName() + " due to null answer");
+                throw new ResourceUnavailableException("Unable to start vpn in 
zone " + router.getDataCenterId() + " for account " + vpn.getAccountId() + " on 
domR: "
+                        + router.getInstanceName() + " due to null answer", 
DataCenter.class, router.getDataCenterId());
+            }
             if (!answer.getResult()) {
                 s_logger.error("Unable to start vpn: unable add users to vpn 
in zone " + router.getDataCenterId() + " for account " + vpn.getAccountId() + " 
on domR: "
                         + router.getInstanceName() + " due to " + 
answer.getDetails());
diff --git 
a/server/src/main/java/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
 
b/server/src/main/java/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
index d22dcba..eabfb43 100644
--- 
a/server/src/main/java/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
+++ 
b/server/src/main/java/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
@@ -740,18 +740,20 @@ public class VpcVirtualNetworkApplianceManagerImpl 
extends VirtualNetworkApplian
             throw new AgentUnavailableException("Unable to send commands to 
virtual router ", router.getHostId(), e);
         }
         Answer answer = cmds.getAnswer("users");
-        if (!answer.getResult()) {
+        if (answer == null || !answer.getResult()) {
+            String errorMessage = (answer == null) ? "null answer object" : 
answer.getDetails();
             s_logger.error("Unable to start vpn: unable add users to vpn in 
zone " + router.getDataCenterId() + " for account " + vpn.getAccountId() + " on 
domR: "
-                    + router.getInstanceName() + " due to " + 
answer.getDetails());
+                    + router.getInstanceName() + " due to " + errorMessage);
             throw new ResourceUnavailableException("Unable to start vpn: 
Unable to add users to vpn in zone " + router.getDataCenterId() + " for account 
" + vpn.getAccountId()
-            + " on domR: " + router.getInstanceName() + " due to " + 
answer.getDetails(), DataCenter.class, router.getDataCenterId());
+            + " on domR: " + router.getInstanceName() + " due to " + 
errorMessage, DataCenter.class, router.getDataCenterId());
         }
         answer = cmds.getAnswer("startVpn");
-        if (!answer.getResult()) {
+        if (answer == null || !answer.getResult()) {
+            String errorMessage = (answer == null) ? "null answer object" : 
answer.getDetails();
             s_logger.error("Unable to start vpn in zone " + 
router.getDataCenterId() + " for account " + vpn.getAccountId() + " on domR: " 
+ router.getInstanceName() + " due to "
-                    + answer.getDetails());
+                    + errorMessage);
             throw new ResourceUnavailableException("Unable to start vpn in 
zone " + router.getDataCenterId() + " for account " + vpn.getAccountId() + " on 
domR: "
-                    + router.getInstanceName() + " due to " + 
answer.getDetails(), DataCenter.class, router.getDataCenterId());
+                    + router.getInstanceName() + " due to " + errorMessage, 
DataCenter.class, router.getDataCenterId());
         }
 
         return true;
diff --git a/server/src/main/java/com/cloud/projects/ProjectManagerImpl.java 
b/server/src/main/java/com/cloud/projects/ProjectManagerImpl.java
index a8dd225..48d6518 100644
--- a/server/src/main/java/com/cloud/projects/ProjectManagerImpl.java
+++ b/server/src/main/java/com/cloud/projects/ProjectManagerImpl.java
@@ -479,6 +479,10 @@ public class ProjectManagerImpl extends ManagerBase 
implements ProjectManager {
                 throw new InvalidParameterValueException("Unable to find 
account name=" + newOwnerName + " in domain id=" + project.getDomainId());
             }
             Account currentOwnerAccount = getProjectOwner(projectId);
+            if (currentOwnerAccount == null) {
+                s_logger.error("Unable to find the current owner for the 
project id=" + projectId);
+                throw new InvalidParameterValueException("Unable to find the 
current owner for the project id=" + projectId);
+            }
             if (currentOwnerAccount.getId() != futureOwnerAccount.getId()) {
                 ProjectAccountVO futureOwner = 
_projectAccountDao.findByProjectIdAccountId(projectId, 
futureOwnerAccount.getAccountId());
                 if (futureOwner == null) {
diff --git a/server/src/main/java/com/cloud/template/TemplateManagerImpl.java 
b/server/src/main/java/com/cloud/template/TemplateManagerImpl.java
index 42bdd72..c862ada 100755
--- a/server/src/main/java/com/cloud/template/TemplateManagerImpl.java
+++ b/server/src/main/java/com/cloud/template/TemplateManagerImpl.java
@@ -1232,7 +1232,10 @@ public class TemplateManagerImpl extends ManagerBase 
implements TemplateManager,
 
         // prepare ISO ready to mount on hypervisor resource level
         TemplateInfo tmplt = prepareIso(isoId, vm.getDataCenterId(), 
vm.getHostId(), null);
-
+        if (tmplt == null) {
+            s_logger.error("Failed to prepare ISO ready to mount on hypervisor 
resource level");
+            throw new CloudRuntimeException("Failed to prepare ISO ready to 
mount on hypervisor resource level");
+        }
         String vmName = vm.getInstanceName();
 
         HostVO host = _hostDao.findById(vm.getHostId());
diff --git 
a/server/src/main/java/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java
 
b/server/src/main/java/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java
index 583dcfc..baa3ba0 100644
--- 
a/server/src/main/java/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java
+++ 
b/server/src/main/java/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java
@@ -650,9 +650,12 @@ public class GlobalLoadBalancingRulesServiceImpl 
implements GlobalLoadBalancingR
             SiteLoadBalancerConfig siteLb =
                 new SiteLoadBalancerConfig(gslbLbMapVo.isRevoke(), 
serviceType, ip.getAddress().addr(), 
Integer.toString(loadBalancer.getDefaultPortStart()),
                     dataCenterId);
-
-            
siteLb.setGslbProviderPublicIp(lookupGslbServiceProvider().getZoneGslbProviderPublicIp(dataCenterId,
 physicalNetworkId));
-            
siteLb.setGslbProviderPrivateIp(lookupGslbServiceProvider().getZoneGslbProviderPrivateIp(dataCenterId,
 physicalNetworkId));
+            GslbServiceProvider gslbProvider = lookupGslbServiceProvider();
+            if (gslbProvider == null) {
+                throw new CloudRuntimeException("No GSLB provider is 
available");
+            }
+            
siteLb.setGslbProviderPublicIp(gslbProvider.getZoneGslbProviderPublicIp(dataCenterId,
 physicalNetworkId));
+            
siteLb.setGslbProviderPrivateIp(gslbProvider.getZoneGslbProviderPrivateIp(dataCenterId,
 physicalNetworkId));
             siteLb.setWeight(gslbLbMapVo.getWeight());
 
             zoneSiteLoadbalancerMap.put(network.getDataCenterId(), siteLb);

-- 
To stop receiving notification emails like this one, please contact
raf...@apache.org.

Reply via email to