From dc8f4ef7f662d6ab0e0639b9fa610f87fb93c9a7 Mon Sep 17 00:00:00 2001 From: brettkk <1099446733@qq.com> Date: Sun, 15 Apr 2018 14:16:00 +0800 Subject: [PATCH 01/13] fix https://issues.apache.org/jira/browse/CLOUDSTACK-10356 --- .../orchestration/VolumeOrchestrator.java | 3 + .../dao/ResourceCountDaoImpl.java | 6 +- patch | 192 ++++++++++++++++++ .../deploy/ImplicitDedicationPlanner.java | 11 +- .../resource/LibvirtComputingResource.java | 12 +- .../kvm/storage/LibvirtStorageAdaptor.java | 4 +- .../VirtualNetworkApplianceManagerImpl.java | 4 +- ...VpcVirtualNetworkApplianceManagerImpl.java | 4 +- .../cloud/projects/ProjectManagerImpl.java | 2 +- .../cloud/template/TemplateManagerImpl.java | 5 +- .../GlobalLoadBalancingRulesServiceImpl.java | 9 +- 11 files changed, 231 insertions(+), 21 deletions(-) create mode 100755 patch 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 f02fdc495f9b..a4c2d64aef95 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 VolumeInfo copyVolumeFromSecToPrimary(VolumeInfo volume, VirtualMachine v // 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 storage pool with enough capacity to copy the volume to."); + } DataStore destStore = dataStoreMgr.getDataStore(destPool.getId(), DataStoreRole.Primary); AsyncCallFuture future = volService.copyVolume(volume, destStore); 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 56261337faf1..26f09f273a9b 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 @@ -126,8 +126,10 @@ public void updateDomainCount(long domainId, ResourceType type, boolean incremen delta = increment ? delta : delta * -1; ResourceCountVO resourceCountVO = findByOwnerAndType(domainId, ResourceOwnerType.Domain, type); - resourceCountVO.setCount(resourceCountVO.getCount() + delta); - update(resourceCountVO.getId(), resourceCountVO); + if (resourceCountVO != null) { + resourceCountVO.setCount(resourceCountVO.getCount() + delta); + update(resourceCountVO.getId(), resourceCountVO); + } } @Override diff --git a/patch b/patch new file mode 100755 index 000000000000..44e18677a81a --- /dev/null +++ b/patch @@ -0,0 +1,192 @@ +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..a4c2d64 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 storage pool with enough capacity to copy the volume to."); ++ } + DataStore destStore = dataStoreMgr.getDataStore(destPool.getId(), DataStoreRole.Primary); + AsyncCallFuture future = volService.copyVolume(volume, destStore); + +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..26f09f2 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 +@@ -126,8 +126,10 @@ public class ResourceCountDaoImpl extends GenericDaoBase + delta = increment ? delta : delta * -1; + + ResourceCountVO resourceCountVO = findByOwnerAndType(domainId, ResourceOwnerType.Domain, type); +- resourceCountVO.setCount(resourceCountVO.getCount() + delta); +- update(resourceCountVO.getId(), resourceCountVO); ++ if (resourceCountVO != null) { ++ resourceCountVO.setCount(resourceCountVO.getCount() + delta); ++ update(resourceCountVO.getId(), resourceCountVO); ++ } + } + + @Override +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..b132ce1 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 +@@ -256,14 +256,15 @@ public class ImplicitDedicationPlanner extends FirstFitPlanner implements Deploy + + // Get the list of all the hosts in the given clusters + List allHosts = new ArrayList(); +- for (Long cluster : clusterList) { +- List hostsInCluster = resourceMgr.listAllHostsInCluster(cluster); +- for (HostVO hostVO : hostsInCluster) { ++ if (clusterList != null && !clusterList.isEmpty()) { ++ for (Long cluster : clusterList) { ++ List 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 dd039e5..d1e1b6d 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 +@@ -2337,8 +2337,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv + disk.setCacheMode(DiskDef.DiskCacheMode.valueOf(volumeObjectTO.getCacheMode().toString().toUpperCase())); + } + } +- +- vm.getDevices().addDevice(disk); ++ if (vm.getDevices() != null) { ++ vm.getDevices().addDevice(disk); ++ } + } + + if (vmSpec.getType() != VirtualMachine.Type.User) { +@@ -2391,8 +2392,11 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv + + ") is " + nic.getType() + " traffic type. So, vsp-vr-ip " + vrIp + " is set in the metadata"); + } + } +- +- vm.getDevices().addDevice(getVifDriver(nic.getType(), nic.getName()).plug(nic, vm.getPlatformEmulator(), nicAdapter)); ++ ++ if (vm.getDevices() != null) { ++ vm.getDevices().addDevice(getVifDriver(nic.getType(), nic.getName()) ++ .plug(nic, vm.getPlatformEmulator(), nicAdapter)); ++ } + } + + public boolean cleanupDisk(Map volumeToDisconnect) { +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..86cbe00 100644 +--- a/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java ++++ b/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +@@ -2139,14 +2139,14 @@ Configurable, StateListener allHosts = new ArrayList(); - for (Long cluster : clusterList) { - List hostsInCluster = resourceMgr.listAllHostsInCluster(cluster); - for (HostVO hostVO : hostsInCluster) { + if (clusterList != null && !clusterList.isEmpty()) { + for (Long cluster : clusterList) { + List 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 dd039e54263b..d1e1b6d63326 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 @@ -2337,8 +2337,9 @@ public int compare(final DiskTO arg0, final DiskTO arg1) { disk.setCacheMode(DiskDef.DiskCacheMode.valueOf(volumeObjectTO.getCacheMode().toString().toUpperCase())); } } - - vm.getDevices().addDevice(disk); + if (vm.getDevices() != null) { + vm.getDevices().addDevice(disk); + } } if (vmSpec.getType() != VirtualMachine.Type.User) { @@ -2391,8 +2392,11 @@ private void createVif(final LibvirtVMDef vm, final NicTO nic, final String nicA + ") is " + nic.getType() + " traffic type. So, vsp-vr-ip " + vrIp + " is set in the metadata"); } } - - vm.getDevices().addDevice(getVifDriver(nic.getType(), nic.getName()).plug(nic, vm.getPlatformEmulator(), nicAdapter)); + + if (vm.getDevices() != null) { + vm.getDevices().addDevice(getVifDriver(nic.getType(), nic.getName()) + .plug(nic, vm.getPlatformEmulator(), nicAdapter)); + } } public boolean cleanupDisk(Map volumeToDisconnect) { 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 792fc6958cdc..63f7872d05e8 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 KVMStoragePool createStoragePool(String name, String host, int port, Stri 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 1985deaefa80..86cbe002eab7 100644 --- a/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -2139,14 +2139,14 @@ public boolean startRemoteAccessVpn(final Network network, final RemoteAccessVpn } Answer answer = cmds.getAnswer("users"); - if (!answer.getResult()) { + if (answer != null && !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()); 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()); } answer = cmds.getAnswer("startVpn"); - if (!answer.getResult()) { + if (answer != null && !answer.getResult()) { s_logger.error("Unable to start vpn in zone " + router.getDataCenterId() + " for account " + vpn.getAccountId() + " on domR: " + router.getInstanceName() + " due to " + answer.getDetails()); throw new ResourceUnavailableException("Unable to start vpn in zone " + router.getDataCenterId() + " for account " + vpn.getAccountId() + " on domR: " 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 d22dcbafbba5..0d421762dd99 100644 --- a/server/src/main/java/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java +++ b/server/src/main/java/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java @@ -740,14 +740,14 @@ public boolean startRemoteAccessVpn(final RemoteAccessVpn vpn, final VirtualRout 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()) { 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()); 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()); } answer = cmds.getAnswer("startVpn"); - if (!answer.getResult()) { + if (answer != null && !answer.getResult()) { s_logger.error("Unable to start vpn in zone " + router.getDataCenterId() + " for account " + vpn.getAccountId() + " on domR: " + router.getInstanceName() + " due to " + answer.getDetails()); throw new ResourceUnavailableException("Unable to start vpn in zone " + router.getDataCenterId() + " for account " + vpn.getAccountId() + " on domR: " diff --git a/server/src/main/java/com/cloud/projects/ProjectManagerImpl.java b/server/src/main/java/com/cloud/projects/ProjectManagerImpl.java index a8dd225c54c6..efbba165428e 100644 --- a/server/src/main/java/com/cloud/projects/ProjectManagerImpl.java +++ b/server/src/main/java/com/cloud/projects/ProjectManagerImpl.java @@ -479,7 +479,7 @@ public void doInTransactionWithoutResult(TransactionStatus status) throws Resour throw new InvalidParameterValueException("Unable to find account name=" + newOwnerName + " in domain id=" + project.getDomainId()); } Account currentOwnerAccount = getProjectOwner(projectId); - if (currentOwnerAccount.getId() != futureOwnerAccount.getId()) { + if (currentOwnerAccount !=null && currentOwnerAccount.getId() != futureOwnerAccount.getId()) { ProjectAccountVO futureOwner = _projectAccountDao.findByProjectIdAccountId(projectId, futureOwnerAccount.getAccountId()); if (futureOwner == null) { throw new InvalidParameterValueException("Account " + newOwnerName + diff --git a/server/src/main/java/com/cloud/template/TemplateManagerImpl.java b/server/src/main/java/com/cloud/template/TemplateManagerImpl.java index 42bdd72af63e..c862adae61fc 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 @@ private boolean attachISOToVM(long vmId, long isoId, boolean attach) { // 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 583dcfc0ef5c..baa3ba025622 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 @@ private boolean applyGlobalLoadBalancerRuleConfig(long gslbRuleId, boolean revok 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); From f26edcfa0d429c2ca8d1202db2e43ff5dcb7b636 Mon Sep 17 00:00:00 2001 From: brettkk <1099446733@qq.com> Date: Sun, 15 Apr 2018 14:17:58 +0800 Subject: [PATCH 02/13] del patch file --- patch | 192 ---------------------------------------------------------- 1 file changed, 192 deletions(-) delete mode 100755 patch diff --git a/patch b/patch deleted file mode 100755 index 44e18677a81a..000000000000 --- a/patch +++ /dev/null @@ -1,192 +0,0 @@ -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..a4c2d64 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 storage pool with enough capacity to copy the volume to."); -+ } - DataStore destStore = dataStoreMgr.getDataStore(destPool.getId(), DataStoreRole.Primary); - AsyncCallFuture future = volService.copyVolume(volume, destStore); - -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..26f09f2 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 -@@ -126,8 +126,10 @@ public class ResourceCountDaoImpl extends GenericDaoBase - delta = increment ? delta : delta * -1; - - ResourceCountVO resourceCountVO = findByOwnerAndType(domainId, ResourceOwnerType.Domain, type); -- resourceCountVO.setCount(resourceCountVO.getCount() + delta); -- update(resourceCountVO.getId(), resourceCountVO); -+ if (resourceCountVO != null) { -+ resourceCountVO.setCount(resourceCountVO.getCount() + delta); -+ update(resourceCountVO.getId(), resourceCountVO); -+ } - } - - @Override -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..b132ce1 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 -@@ -256,14 +256,15 @@ public class ImplicitDedicationPlanner extends FirstFitPlanner implements Deploy - - // Get the list of all the hosts in the given clusters - List allHosts = new ArrayList(); -- for (Long cluster : clusterList) { -- List hostsInCluster = resourceMgr.listAllHostsInCluster(cluster); -- for (HostVO hostVO : hostsInCluster) { -+ if (clusterList != null && !clusterList.isEmpty()) { -+ for (Long cluster : clusterList) { -+ List 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 dd039e5..d1e1b6d 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 -@@ -2337,8 +2337,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv - disk.setCacheMode(DiskDef.DiskCacheMode.valueOf(volumeObjectTO.getCacheMode().toString().toUpperCase())); - } - } -- -- vm.getDevices().addDevice(disk); -+ if (vm.getDevices() != null) { -+ vm.getDevices().addDevice(disk); -+ } - } - - if (vmSpec.getType() != VirtualMachine.Type.User) { -@@ -2391,8 +2392,11 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv - + ") is " + nic.getType() + " traffic type. So, vsp-vr-ip " + vrIp + " is set in the metadata"); - } - } -- -- vm.getDevices().addDevice(getVifDriver(nic.getType(), nic.getName()).plug(nic, vm.getPlatformEmulator(), nicAdapter)); -+ -+ if (vm.getDevices() != null) { -+ vm.getDevices().addDevice(getVifDriver(nic.getType(), nic.getName()) -+ .plug(nic, vm.getPlatformEmulator(), nicAdapter)); -+ } - } - - public boolean cleanupDisk(Map volumeToDisconnect) { -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..86cbe00 100644 ---- a/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java -+++ b/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java -@@ -2139,14 +2139,14 @@ Configurable, StateListener Date: Mon, 16 Apr 2018 09:04:12 +0200 Subject: [PATCH 03/13] Update ResourceCountDaoImpl.java --- .../com/cloud/configuration/dao/ResourceCountDaoImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 26f09f273a9b..f2d466af50b2 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 @@ -127,8 +127,8 @@ public void updateDomainCount(long domainId, ResourceType type, boolean incremen ResourceCountVO resourceCountVO = findByOwnerAndType(domainId, ResourceOwnerType.Domain, type); if (resourceCountVO != null) { - resourceCountVO.setCount(resourceCountVO.getCount() + delta); - update(resourceCountVO.getId(), resourceCountVO); + resourceCountVO.setCount(resourceCountVO.getCount() + delta); + update(resourceCountVO.getId(), resourceCountVO); } } @@ -291,4 +291,4 @@ private long executeSqlCountComputingResourcesForAccount(long accountId, String } } -} \ No newline at end of file +} From da92138fe07e5423806ab6507f9c452b9ab2b612 Mon Sep 17 00:00:00 2001 From: brettkk <1099446733@qq.com> Date: Mon, 16 Apr 2018 22:03:59 +0800 Subject: [PATCH 04/13] fix some format --- .../com/cloud/configuration/dao/ResourceCountDaoImpl.java | 4 ++-- .../hypervisor/kvm/resource/LibvirtComputingResource.java | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) 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 26f09f273a9b..2c6c57de59eb 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 @@ -127,8 +127,8 @@ public void updateDomainCount(long domainId, ResourceType type, boolean incremen ResourceCountVO resourceCountVO = findByOwnerAndType(domainId, ResourceOwnerType.Domain, type); if (resourceCountVO != null) { - resourceCountVO.setCount(resourceCountVO.getCount() + delta); - update(resourceCountVO.getId(), resourceCountVO); + resourceCountVO.setCount(resourceCountVO.getCount() + delta); + update(resourceCountVO.getId(), resourceCountVO); } } 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 d1e1b6d63326..304374732f03 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 @@ -2394,8 +2394,7 @@ private void createVif(final LibvirtVMDef vm, final NicTO nic, final String nicA } if (vm.getDevices() != null) { - vm.getDevices().addDevice(getVifDriver(nic.getType(), nic.getName()) - .plug(nic, vm.getPlatformEmulator(), nicAdapter)); + vm.getDevices().addDevice(getVifDriver(nic.getType(), nic.getName()).plug(nic, vm.getPlatformEmulator(), nicAdapter)); } } From 812d265675e9562bb847c5a88b4ed4b0e8d80f22 Mon Sep 17 00:00:00 2001 From: brettkk <1099446733@qq.com> Date: Mon, 16 Apr 2018 23:20:01 +0800 Subject: [PATCH 05/13] fix code --- .../cloud/configuration/dao/ResourceCountDaoImpl.java | 8 +++----- .../com/cloud/deploy/ImplicitDedicationPlanner.java | 3 ++- .../kvm/resource/LibvirtComputingResource.java | 7 ++++--- .../router/VirtualNetworkApplianceManagerImpl.java | 11 +++++++++-- 4 files changed, 18 insertions(+), 11 deletions(-) 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 f2d466af50b2..56261337faf1 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 @@ -126,10 +126,8 @@ public void updateDomainCount(long domainId, ResourceType type, boolean incremen delta = increment ? delta : delta * -1; ResourceCountVO resourceCountVO = findByOwnerAndType(domainId, ResourceOwnerType.Domain, type); - if (resourceCountVO != null) { - resourceCountVO.setCount(resourceCountVO.getCount() + delta); - update(resourceCountVO.getId(), resourceCountVO); - } + resourceCountVO.setCount(resourceCountVO.getCount() + delta); + update(resourceCountVO.getId(), resourceCountVO); } @Override @@ -291,4 +289,4 @@ private long executeSqlCountComputingResourcesForAccount(long accountId, String } } -} +} \ No newline at end of file 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 b132ce1f3c19..45f16abd2af6 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.NumbersUtil; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachineProfile; +import org.springframework.util.CollectionUtils; public class ImplicitDedicationPlanner extends FirstFitPlanner implements DeploymentClusterPlanner { @@ -256,7 +257,7 @@ public PlannerResourceUsage getResourceUsage(VirtualMachineProfile vmProfile, De // Get the list of all the hosts in the given clusters List allHosts = new ArrayList(); - if (clusterList != null && !clusterList.isEmpty()) { + if (!CollectionUtils.isEmpty(clusterList)) { for (Long cluster : clusterList) { List hostsInCluster = resourceMgr.listAllHostsInCluster(cluster); for (HostVO hostVO : hostsInCluster) { 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 304374732f03..5f648636022f 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 @@ -2392,10 +2392,11 @@ private void createVif(final LibvirtVMDef vm, final NicTO nic, final String nicA + ") is " + nic.getType() + " traffic type. So, vsp-vr-ip " + vrIp + " is set in the metadata"); } } - - if (vm.getDevices() != null) { - vm.getDevices().addDevice(getVifDriver(nic.getType(), nic.getName()).plug(nic, vm.getPlatformEmulator(), nicAdapter)); + 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)); } public boolean cleanupDisk(Map volumeToDisconnect) { 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 86cbe002eab7..d191331cdb19 100644 --- a/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -42,6 +42,7 @@ import javax.inject.Inject; import javax.naming.ConfigurationException; +import org.apache.commons.lang.BooleanUtils; import org.apache.log4j.Logger; import org.cloud.network.router.deployment.RouterDeploymentDefinitionBuilder; import org.springframework.beans.factory.annotation.Autowired; @@ -2139,14 +2140,20 @@ public boolean startRemoteAccessVpn(final Network network, final RemoteAccessVpn } Answer answer = cmds.getAnswer("users"); - if (answer != null && !answer.getResult()) { + 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()); 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()); } answer = cmds.getAnswer("startVpn"); - if (answer != null && !answer.getResult()) { + if (!answer.getResult()) { s_logger.error("Unable to start vpn in zone " + router.getDataCenterId() + " for account " + vpn.getAccountId() + " on domR: " + router.getInstanceName() + " due to " + answer.getDetails()); throw new ResourceUnavailableException("Unable to start vpn in zone " + router.getDataCenterId() + " for account " + vpn.getAccountId() + " on domR: " From 9e2764b9fd3aa2f743fb8db7c0678e31830e5b85 Mon Sep 17 00:00:00 2001 From: brettkk <1099446733@qq.com> Date: Mon, 16 Apr 2018 23:24:32 +0800 Subject: [PATCH 06/13] fix error message in VolumeOrchestrator --- .../cloudstack/engine/orchestration/VolumeOrchestrator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 a4c2d64aef95..c8279ff3f99c 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 @@ -500,7 +500,7 @@ public VolumeInfo copyVolumeFromSecToPrimary(VolumeInfo volume, VirtualMachine v // 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 storage pool with enough capacity to copy the volume to."); + 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 future = volService.copyVolume(volume, destStore); From 52bd1d32a3b72658473a85f8c65f729e2317b133 Mon Sep 17 00:00:00 2001 From: brettkk <1099446733@qq.com> Date: Mon, 16 Apr 2018 23:42:54 +0800 Subject: [PATCH 07/13] add check null stmt --- .../hypervisor/kvm/resource/LibvirtComputingResource.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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 5f648636022f..bd639fb76bae 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 @@ -2337,9 +2337,11 @@ public int compare(final DiskTO arg0, final DiskTO arg1) { disk.setCacheMode(DiskDef.DiskCacheMode.valueOf(volumeObjectTO.getCacheMode().toString().toUpperCase())); } } - if (vm.getDevices() != null) { - vm.getDevices().addDevice(disk); + 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); } if (vmSpec.getType() != VirtualMachine.Type.User) { From 362d79df12432d77f36a4c395ca6b2a38a6e6d5d Mon Sep 17 00:00:00 2001 From: brettkk <1099446733@qq.com> Date: Tue, 17 Apr 2018 22:07:41 +0800 Subject: [PATCH 08/13] del import unuse class --- .../cloud/network/router/VirtualNetworkApplianceManagerImpl.java | 1 - 1 file changed, 1 deletion(-) 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 d191331cdb19..63587a898359 100644 --- a/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -42,7 +42,6 @@ import javax.inject.Inject; import javax.naming.ConfigurationException; -import org.apache.commons.lang.BooleanUtils; import org.apache.log4j.Logger; import org.cloud.network.router.deployment.RouterDeploymentDefinitionBuilder; import org.springframework.beans.factory.annotation.Autowired; From 0bc887e49c875a64d4198f5981a7773a51bed76b Mon Sep 17 00:00:00 2001 From: brettkk <1099446733@qq.com> Date: Tue, 17 Apr 2018 23:22:20 +0800 Subject: [PATCH 09/13] use BooleanUtils to check Boolean --- .../VpcVirtualNetworkApplianceManagerImpl.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) 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 0d421762dd99..1d7de4c3be55 100644 --- a/server/src/main/java/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java +++ b/server/src/main/java/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java @@ -93,6 +93,7 @@ import com.cloud.hypervisor.HypervisorGuru; import com.cloud.hypervisor.HypervisorGuruManager; +import org.apache.commons.lang.BooleanUtils; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; @@ -740,14 +741,25 @@ public boolean startRemoteAccessVpn(final RemoteAccessVpn vpn, final VirtualRout throw new AgentUnavailableException("Unable to send commands to virtual router ", router.getHostId(), e); } Answer answer = cmds.getAnswer("users"); - if (answer != null && !answer.getResult()) { + 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 object"); + 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 null Answer object", DataCenter.class, router.getDataCenterId()); + } + if (BooleanUtils.isFalse(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()); 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()); } answer = cmds.getAnswer("startVpn"); - if (answer != null && !answer.getResult()) { + if (answer == null) { + s_logger.error("Unable to start vpn in zone " + router.getDataCenterId() + " for account " + vpn.getAccountId() + " on domR: " + router.getInstanceName() + " due to null Answer object"); + throw new ResourceUnavailableException("Unable to start vpn in zone " + router.getDataCenterId() + " for account " + vpn.getAccountId() + " on domR: " + + router.getInstanceName() + " due to null Answer object", DataCenter.class, router.getDataCenterId()); + } + if (BooleanUtils.isFalse(answer.getResult())) { s_logger.error("Unable to start vpn in zone " + router.getDataCenterId() + " for account " + vpn.getAccountId() + " on domR: " + router.getInstanceName() + " due to " + answer.getDetails()); throw new ResourceUnavailableException("Unable to start vpn in zone " + router.getDataCenterId() + " for account " + vpn.getAccountId() + " on domR: " From 8e06b689c61d7515f12b3ccc1856b477c7f9926e Mon Sep 17 00:00:00 2001 From: brettkk <1099446733@qq.com> Date: Tue, 17 Apr 2018 23:37:49 +0800 Subject: [PATCH 10/13] fix error message --- ...VpcVirtualNetworkApplianceManagerImpl.java | 26 ++++++------------- 1 file changed, 8 insertions(+), 18 deletions(-) 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 1d7de4c3be55..eabfb4337f4e 100644 --- a/server/src/main/java/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java +++ b/server/src/main/java/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java @@ -93,7 +93,6 @@ import com.cloud.hypervisor.HypervisorGuru; import com.cloud.hypervisor.HypervisorGuruManager; -import org.apache.commons.lang.BooleanUtils; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; @@ -741,29 +740,20 @@ public boolean startRemoteAccessVpn(final RemoteAccessVpn vpn, final VirtualRout throw new AgentUnavailableException("Unable to send commands to virtual router ", router.getHostId(), e); } Answer answer = cmds.getAnswer("users"); - if (answer == null) { + 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 null Answer object"); + + 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 null Answer object", DataCenter.class, router.getDataCenterId()); - } - if (BooleanUtils.isFalse(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()); - 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 == null) { - s_logger.error("Unable to start vpn in zone " + router.getDataCenterId() + " for account " + vpn.getAccountId() + " on domR: " + router.getInstanceName() + " due to null Answer object"); - throw new ResourceUnavailableException("Unable to start vpn in zone " + router.getDataCenterId() + " for account " + vpn.getAccountId() + " on domR: " - + router.getInstanceName() + " due to null Answer object", DataCenter.class, router.getDataCenterId()); - } - if (BooleanUtils.isFalse(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; From ebdae7a4a88a9ac00cd501bd28770dbca8d6d079 Mon Sep 17 00:00:00 2001 From: brettkk <1099446733@qq.com> Date: Tue, 17 Apr 2018 23:53:36 +0800 Subject: [PATCH 11/13] delete unuse function --- .../cloud/configuration/dao/ResourceCountDaoImpl.java | 10 ---------- 1 file changed, 10 deletions(-) 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 56261337faf1..dbf2228183bc 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 @@ -120,16 +120,6 @@ public void setResourceCount(long ownerId, ResourceOwnerType ownerType, Resource } } - @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; From fade0a16d90f5a4743dc34c0b5e482fbf23abac9 Mon Sep 17 00:00:00 2001 From: brettkk <1099446733@qq.com> Date: Wed, 18 Apr 2018 20:31:01 +0800 Subject: [PATCH 12/13] delete the deprecated function updateDomainCount --- .../java/com/cloud/configuration/dao/ResourceCountDao.java | 3 --- 1 file changed, 3 deletions(-) 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 b5a75d196fa5..28f2a5360716 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 { */ 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); From df90d8c9796478d25aa6e4d1cbf59cd98a951c57 Mon Sep 17 00:00:00 2001 From: brettkk <1099446733@qq.com> Date: Wed, 18 Apr 2018 22:46:13 +0800 Subject: [PATCH 13/13] add error log and throw exception in ProjectManagerImpl.java --- .../main/java/com/cloud/projects/ProjectManagerImpl.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/server/src/main/java/com/cloud/projects/ProjectManagerImpl.java b/server/src/main/java/com/cloud/projects/ProjectManagerImpl.java index efbba165428e..48d65189476f 100644 --- a/server/src/main/java/com/cloud/projects/ProjectManagerImpl.java +++ b/server/src/main/java/com/cloud/projects/ProjectManagerImpl.java @@ -479,7 +479,11 @@ public void doInTransactionWithoutResult(TransactionStatus status) throws Resour throw new InvalidParameterValueException("Unable to find account name=" + newOwnerName + " in domain id=" + project.getDomainId()); } Account currentOwnerAccount = getProjectOwner(projectId); - if (currentOwnerAccount !=null && currentOwnerAccount.getId() != futureOwnerAccount.getId()) { + 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) { throw new InvalidParameterValueException("Account " + newOwnerName +