mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	server: fix resource count during assign volume (#8171)
ResourceType.volume stores the count of the volume and not the size so increment decrement should be just 1 when assigning a volume to a different account.
This commit is contained in:
		
							parent
							
								
									a11fc43788
								
							
						
					
					
						commit
						ce586e3eca
					
				| @ -100,7 +100,6 @@ import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailsDao; | |||||||
| import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreDao; | import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreDao; | ||||||
| import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreVO; | import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreVO; | ||||||
| import org.apache.cloudstack.storage.image.datastore.ImageStoreEntity; | import org.apache.cloudstack.storage.image.datastore.ImageStoreEntity; | ||||||
| import org.apache.cloudstack.utils.bytescale.ByteScaleUtils; |  | ||||||
| import org.apache.cloudstack.utils.identity.ManagementServerNode; | import org.apache.cloudstack.utils.identity.ManagementServerNode; | ||||||
| import org.apache.cloudstack.utils.imagestore.ImageStoreUtil; | import org.apache.cloudstack.utils.imagestore.ImageStoreUtil; | ||||||
| import org.apache.cloudstack.utils.reflectiontostringbuilderutils.ReflectionToStringBuilderUtils; | import org.apache.cloudstack.utils.reflectiontostringbuilderutils.ReflectionToStringBuilderUtils; | ||||||
| @ -3784,7 +3783,7 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic | |||||||
|         _accountMgr.checkAccess(caller, null, true, oldAccount); |         _accountMgr.checkAccess(caller, null, true, oldAccount); | ||||||
|         _accountMgr.checkAccess(caller, null, true, newAccount); |         _accountMgr.checkAccess(caller, null, true, newAccount); | ||||||
| 
 | 
 | ||||||
|         _resourceLimitMgr.checkResourceLimit(newAccount, ResourceType.volume, ByteScaleUtils.bytesToGibibytes(volume.getSize())); |         _resourceLimitMgr.checkResourceLimit(newAccount, ResourceType.volume); | ||||||
|         _resourceLimitMgr.checkResourceLimit(newAccount, ResourceType.primary_storage, volume.getSize()); |         _resourceLimitMgr.checkResourceLimit(newAccount, ResourceType.primary_storage, volume.getSize()); | ||||||
| 
 | 
 | ||||||
|         Transaction.execute(new TransactionCallbackNoReturn() { |         Transaction.execute(new TransactionCallbackNoReturn() { | ||||||
| @ -3800,14 +3799,14 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic | |||||||
|     protected void updateVolumeAccount(Account oldAccount, VolumeVO volume, Account newAccount) { |     protected void updateVolumeAccount(Account oldAccount, VolumeVO volume, Account newAccount) { | ||||||
|         UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VOLUME_DELETE, volume.getAccountId(), volume.getDataCenterId(), volume.getId(), volume.getName(), |         UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VOLUME_DELETE, volume.getAccountId(), volume.getDataCenterId(), volume.getId(), volume.getName(), | ||||||
|                 Volume.class.getName(), volume.getUuid(), volume.isDisplayVolume()); |                 Volume.class.getName(), volume.getUuid(), volume.isDisplayVolume()); | ||||||
|         _resourceLimitMgr.decrementResourceCount(oldAccount.getAccountId(), ResourceType.volume, ByteScaleUtils.bytesToGibibytes(volume.getSize())); |         _resourceLimitMgr.decrementResourceCount(oldAccount.getAccountId(), ResourceType.volume); | ||||||
|         _resourceLimitMgr.decrementResourceCount(oldAccount.getAccountId(), ResourceType.primary_storage, volume.getSize()); |         _resourceLimitMgr.decrementResourceCount(oldAccount.getAccountId(), ResourceType.primary_storage, volume.getSize()); | ||||||
| 
 | 
 | ||||||
|         volume.setAccountId(newAccount.getAccountId()); |         volume.setAccountId(newAccount.getAccountId()); | ||||||
|         volume.setDomainId(newAccount.getDomainId()); |         volume.setDomainId(newAccount.getDomainId()); | ||||||
|         _volsDao.persist(volume); |         _volsDao.persist(volume); | ||||||
| 
 | 
 | ||||||
|         _resourceLimitMgr.incrementResourceCount(newAccount.getAccountId(), ResourceType.volume, ByteScaleUtils.bytesToGibibytes(volume.getSize())); |         _resourceLimitMgr.incrementResourceCount(newAccount.getAccountId(), ResourceType.volume); | ||||||
|         _resourceLimitMgr.incrementResourceCount(newAccount.getAccountId(), ResourceType.primary_storage, volume.getSize()); |         _resourceLimitMgr.incrementResourceCount(newAccount.getAccountId(), ResourceType.primary_storage, volume.getSize()); | ||||||
| 
 | 
 | ||||||
|         UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VOLUME_CREATE, volume.getAccountId(), volume.getDataCenterId(), volume.getId(), volume.getName(), |         UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VOLUME_CREATE, volume.getAccountId(), volume.getDataCenterId(), volume.getId(), volume.getName(), | ||||||
|  | |||||||
| @ -63,7 +63,6 @@ import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao; | |||||||
| import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; | import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; | ||||||
| import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreDao; | import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreDao; | ||||||
| import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreVO; | import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreVO; | ||||||
| import org.apache.cloudstack.utils.bytescale.ByteScaleUtils; |  | ||||||
| import org.apache.commons.collections.CollectionUtils; | import org.apache.commons.collections.CollectionUtils; | ||||||
| import org.junit.After; | import org.junit.After; | ||||||
| import org.junit.Assert; | import org.junit.Assert; | ||||||
| @ -119,8 +118,8 @@ import com.cloud.user.ResourceLimitService; | |||||||
| import com.cloud.user.User; | import com.cloud.user.User; | ||||||
| import com.cloud.user.UserVO; | import com.cloud.user.UserVO; | ||||||
| import com.cloud.user.dao.AccountDao; | import com.cloud.user.dao.AccountDao; | ||||||
| import com.cloud.utils.exception.CloudRuntimeException; |  | ||||||
| import com.cloud.utils.db.TransactionLegacy; | import com.cloud.utils.db.TransactionLegacy; | ||||||
|  | import com.cloud.utils.exception.CloudRuntimeException; | ||||||
| import com.cloud.utils.fsm.NoTransitionException; | import com.cloud.utils.fsm.NoTransitionException; | ||||||
| import com.cloud.vm.UserVmManager; | import com.cloud.vm.UserVmManager; | ||||||
| import com.cloud.vm.UserVmVO; | import com.cloud.vm.UserVmVO; | ||||||
| @ -1413,7 +1412,7 @@ public class VolumeApiServiceImplTest { | |||||||
|         UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VOLUME_DELETE, volumeVoMock.getAccountId(), volumeVoMock.getDataCenterId(), volumeVoMock.getId(), |         UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VOLUME_DELETE, volumeVoMock.getAccountId(), volumeVoMock.getDataCenterId(), volumeVoMock.getId(), | ||||||
|                 volumeVoMock.getName(), Volume.class.getName(), volumeVoMock.getUuid(), volumeVoMock.isDisplayVolume()); |                 volumeVoMock.getName(), Volume.class.getName(), volumeVoMock.getUuid(), volumeVoMock.isDisplayVolume()); | ||||||
| 
 | 
 | ||||||
|         Mockito.verify(resourceLimitServiceMock).decrementResourceCount(accountMock.getAccountId(), ResourceType.volume, ByteScaleUtils.bytesToGibibytes(volumeVoMock.getSize())); |         Mockito.verify(resourceLimitServiceMock).decrementResourceCount(accountMock.getAccountId(), ResourceType.volume); | ||||||
|         Mockito.verify(resourceLimitServiceMock).decrementResourceCount(accountMock.getAccountId(), ResourceType.primary_storage, volumeVoMock.getSize()); |         Mockito.verify(resourceLimitServiceMock).decrementResourceCount(accountMock.getAccountId(), ResourceType.primary_storage, volumeVoMock.getSize()); | ||||||
| 
 | 
 | ||||||
|         Mockito.verify(volumeVoMock).setAccountId(newAccountMock.getAccountId()); |         Mockito.verify(volumeVoMock).setAccountId(newAccountMock.getAccountId()); | ||||||
| @ -1421,7 +1420,7 @@ public class VolumeApiServiceImplTest { | |||||||
| 
 | 
 | ||||||
|         Mockito.verify(volumeDaoMock).persist(volumeVoMock); |         Mockito.verify(volumeDaoMock).persist(volumeVoMock); | ||||||
| 
 | 
 | ||||||
|         Mockito.verify(resourceLimitServiceMock).incrementResourceCount(newAccountMock.getAccountId(), ResourceType.volume, ByteScaleUtils.bytesToGibibytes(volumeVoMock.getSize())); |         Mockito.verify(resourceLimitServiceMock).incrementResourceCount(newAccountMock.getAccountId(), ResourceType.volume); | ||||||
|         Mockito.verify(resourceLimitServiceMock).incrementResourceCount(newAccountMock.getAccountId(), ResourceType.primary_storage, volumeVoMock.getSize()); |         Mockito.verify(resourceLimitServiceMock).incrementResourceCount(newAccountMock.getAccountId(), ResourceType.primary_storage, volumeVoMock.getSize()); | ||||||
| 
 | 
 | ||||||
|         PowerMockito.verifyStatic(UsageEventUtils.class); |         PowerMockito.verifyStatic(UsageEventUtils.class); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user