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 <[email protected]>
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
[email protected].