From b79a539191468dd7f2e33888a1feaf19b5357243 Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Thu, 23 Jan 2020 16:53:43 +0100 Subject: [PATCH 1/2] server: fix resource count error when upgrade a vm (#3759) Steps to reproduce the issue (1) create an account (test) (2) create a vm with the account (test) (3) login with admin, and upgrade the vm to another offering (4) the resource count (cpu,memory) of admin increases, not the account (test). --- .../java/com/cloud/vm/UserVmManagerImpl.java | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java index 3e6022cf6ef..e21047fb510 100644 --- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java @@ -995,11 +995,12 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir int currentCpu = currentServiceOffering.getCpu(); int currentMemory = currentServiceOffering.getRamSize(); + Account owner = _accountMgr.getActiveAccountById(vmInstance.getAccountId()); if (newCpu > currentCpu) { - _resourceLimitMgr.checkResourceLimit(caller, ResourceType.cpu, newCpu - currentCpu); + _resourceLimitMgr.checkResourceLimit(owner, ResourceType.cpu, newCpu - currentCpu); } if (newMemory > currentMemory) { - _resourceLimitMgr.checkResourceLimit(caller, ResourceType.memory, newMemory - currentMemory); + _resourceLimitMgr.checkResourceLimit(owner, ResourceType.memory, newMemory - currentMemory); } // Check that the specified service offering ID is valid @@ -1016,14 +1017,14 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir // Increment or decrement CPU and Memory count accordingly. if (newCpu > currentCpu) { - _resourceLimitMgr.incrementResourceCount(caller.getAccountId(), ResourceType.cpu, new Long(newCpu - currentCpu)); + _resourceLimitMgr.incrementResourceCount(owner.getAccountId(), ResourceType.cpu, new Long(newCpu - currentCpu)); } else if (currentCpu > newCpu) { - _resourceLimitMgr.decrementResourceCount(caller.getAccountId(), ResourceType.cpu, new Long(currentCpu - newCpu)); + _resourceLimitMgr.decrementResourceCount(owner.getAccountId(), ResourceType.cpu, new Long(currentCpu - newCpu)); } if (newMemory > currentMemory) { - _resourceLimitMgr.incrementResourceCount(caller.getAccountId(), ResourceType.memory, new Long(newMemory - currentMemory)); + _resourceLimitMgr.incrementResourceCount(owner.getAccountId(), ResourceType.memory, new Long(newMemory - currentMemory)); } else if (currentMemory > newMemory) { - _resourceLimitMgr.decrementResourceCount(caller.getAccountId(), ResourceType.memory, new Long(currentMemory - newMemory)); + _resourceLimitMgr.decrementResourceCount(owner.getAccountId(), ResourceType.memory, new Long(currentMemory - newMemory)); } // Generate usage event for VM upgrade @@ -1101,11 +1102,12 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir int currentCpu = currentServiceOffering.getCpu(); int currentMemory = currentServiceOffering.getRamSize(); + Account owner = _accountMgr.getActiveAccountById(vmInstance.getAccountId()); if (newCpu > currentCpu) { - _resourceLimitMgr.checkResourceLimit(caller, ResourceType.cpu, newCpu - currentCpu); + _resourceLimitMgr.checkResourceLimit(owner, ResourceType.cpu, newCpu - currentCpu); } if (newMemory > currentMemory) { - _resourceLimitMgr.checkResourceLimit(caller, ResourceType.memory, newMemory - currentMemory); + _resourceLimitMgr.checkResourceLimit(owner, ResourceType.memory, newMemory - currentMemory); } // Check that the specified service offering ID is valid @@ -1127,7 +1129,6 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir // Check if the new service offering can be applied to vm instance ServiceOffering newSvcOffering = _offeringDao.findById(svcOffId); - Account owner = _accountMgr.getActiveAccountById(vmInstance.getAccountId()); _accountMgr.checkAccess(owner, newSvcOffering, _dcDao.findById(vmInstance.getDataCenterId())); _itMgr.upgradeVmDb(vmId, svcOffId); @@ -1141,14 +1142,14 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir // Increment or decrement CPU and Memory count accordingly. if (newCpu > currentCpu) { - _resourceLimitMgr.incrementResourceCount(caller.getAccountId(), ResourceType.cpu, new Long(newCpu - currentCpu)); + _resourceLimitMgr.incrementResourceCount(owner.getAccountId(), ResourceType.cpu, new Long(newCpu - currentCpu)); } else if (currentCpu > newCpu) { - _resourceLimitMgr.decrementResourceCount(caller.getAccountId(), ResourceType.cpu, new Long(currentCpu - newCpu)); + _resourceLimitMgr.decrementResourceCount(owner.getAccountId(), ResourceType.cpu, new Long(currentCpu - newCpu)); } if (newMemory > currentMemory) { - _resourceLimitMgr.incrementResourceCount(caller.getAccountId(), ResourceType.memory, new Long(newMemory - currentMemory)); + _resourceLimitMgr.incrementResourceCount(owner.getAccountId(), ResourceType.memory, new Long(newMemory - currentMemory)); } else if (currentMemory > newMemory) { - _resourceLimitMgr.decrementResourceCount(caller.getAccountId(), ResourceType.memory, new Long(currentMemory - newMemory)); + _resourceLimitMgr.decrementResourceCount(owner.getAccountId(), ResourceType.memory, new Long(currentMemory - newMemory)); } return _vmDao.findById(vmInstance.getId()); From b581f85d4bfcb132c7b9fc04933d3e2289529a3f Mon Sep 17 00:00:00 2001 From: Pearl Dsilva Date: Thu, 23 Jan 2020 21:29:00 +0530 Subject: [PATCH 2/2] =?UTF-8?q?fixed=20inconsistency=20of=20IP=20on=20VR?= =?UTF-8?q?=20when=20VR=20is=20destroyed=20and=20recrea=E2=80=A6=20(#3825)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/src/main/java/com/cloud/network/NetworkModelImpl.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/src/main/java/com/cloud/network/NetworkModelImpl.java b/server/src/main/java/com/cloud/network/NetworkModelImpl.java index 1ea43221ce4..b8bd2c38d0d 100644 --- a/server/src/main/java/com/cloud/network/NetworkModelImpl.java +++ b/server/src/main/java/com/cloud/network/NetworkModelImpl.java @@ -2298,6 +2298,10 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel, Confi } else { ipv6 = _ipv6Dao.findByNetworkIdAndIp(network.getId(), nic.getIPv6Address()); } + + if (vlans.isEmpty()) { + return nic; + } //return nic only when its ip address belong to the pod range (for the Basic zone case) for (Vlan vlan : vlans) { if (ip != null && ip.getVlanId() == vlan.getId()) {