@@ -458,8 +458,16 @@ public VolumeVO allocVolume(CreateVolumeCmd cmd) throws ResourceAllocationExcept
458458 // permission check
459459 _accountMgr .checkAccess (caller , null , true , _accountMgr .getActiveAccountById (ownerId ));
460460
461+ if (displayVolumeEnabled == null ) {
462+ displayVolumeEnabled = true ;
463+ } else {
464+ if (!_accountMgr .isRootAdmin (caller .getType ())) {
465+ throw new PermissionDeniedException ("Cannot update parameter displayvolume, only admin permitted " );
466+ }
467+ }
468+
461469 // Check that the resource limit for volumes won't be exceeded
462- _resourceLimitMgr .checkResourceLimit (_accountMgr .getAccount (ownerId ), ResourceType .volume );
470+ _resourceLimitMgr .checkResourceLimit (_accountMgr .getAccount (ownerId ), ResourceType .volume , displayVolumeEnabled );
463471
464472 Long zoneId = cmd .getZoneId ();
465473 Long diskOfferingId = null ;
@@ -574,16 +582,8 @@ public VolumeVO allocVolume(CreateVolumeCmd cmd) throws ResourceAllocationExcept
574582 _accountMgr .checkAccess (caller , null , true , snapshotCheck );
575583 }
576584
577- if (displayVolumeEnabled == null ) {
578- displayVolumeEnabled = true ;
579- } else {
580- if (!_accountMgr .isRootAdmin (caller .getType ())) {
581- throw new PermissionDeniedException ("Cannot update parameter displayvolume, only admin permitted " );
582- }
583- }
584-
585585 // Check that the resource limit for primary storage won't be exceeded
586- _resourceLimitMgr .checkResourceLimit (_accountMgr .getAccount (ownerId ), ResourceType .primary_storage , new Long (size ));
586+ _resourceLimitMgr .checkResourceLimit (_accountMgr .getAccount (ownerId ), ResourceType .primary_storage , displayVolumeEnabled , new Long (size ));
587587
588588 // Verify that zone exists
589589 DataCenterVO zone = _dcDao .findById (zoneId );
@@ -652,8 +652,8 @@ public VolumeVO doInTransaction(TransactionStatus status) {
652652
653653 // Increment resource count during allocation; if actual creation fails,
654654 // decrement it
655- _resourceLimitMgr .incrementResourceCount (volume .getAccountId (), ResourceType .volume );
656- _resourceLimitMgr .incrementResourceCount (volume .getAccountId (), ResourceType .primary_storage , new Long (volume .getSize ()));
655+ _resourceLimitMgr .incrementResourceCount (volume .getAccountId (), ResourceType .volume , displayVolumeEnabled );
656+ _resourceLimitMgr .incrementResourceCount (volume .getAccountId (), ResourceType .primary_storage , displayVolumeEnabled , new Long (volume .getSize ()));
657657 return volume ;
658658 }
659659 });
@@ -691,8 +691,8 @@ public VolumeVO createVolume(CreateVolumeCmd cmd) {
691691 } finally {
692692 if (!created ) {
693693 s_logger .trace ("Decrementing volume resource count for account id=" + volume .getAccountId () + " as volume failed to create on the backend" );
694- _resourceLimitMgr .decrementResourceCount (volume .getAccountId (), ResourceType .volume );
695- _resourceLimitMgr .decrementResourceCount (volume .getAccountId (), ResourceType .primary_storage , new Long (volume .getSize ()));
694+ _resourceLimitMgr .decrementResourceCount (volume .getAccountId (), ResourceType .volume , cmd . getDisplayVolume () );
695+ _resourceLimitMgr .decrementResourceCount (volume .getAccountId (), ResourceType .primary_storage , cmd . getDisplayVolume (), new Long (volume .getSize ()));
696696 }
697697 }
698698 }
@@ -825,7 +825,7 @@ public VolumeVO resizeVolume(ResizeVolumeCmd cmd) throws ResourceAllocationExcep
825825
826826 if (!shrinkOk ) {
827827 /* Check resource limit for this account on primary storage resource */
828- _resourceLimitMgr .checkResourceLimit (_accountMgr .getAccount (volume .getAccountId ()), ResourceType .primary_storage , new Long (newSize - currentSize ));
828+ _resourceLimitMgr .checkResourceLimit (_accountMgr .getAccount (volume .getAccountId ()), ResourceType .primary_storage , volume . isDisplayVolume (), new Long (newSize - currentSize ));
829829 }
830830
831831 /*
@@ -875,9 +875,9 @@ public VolumeVO resizeVolume(ResizeVolumeCmd cmd) throws ResourceAllocationExcep
875875
876876 /* Update resource count for the account on primary storage resource */
877877 if (!shrinkOk ) {
878- _resourceLimitMgr .incrementResourceCount (volume .getAccountId (), ResourceType .primary_storage , new Long (newSize - currentSize ));
878+ _resourceLimitMgr .incrementResourceCount (volume .getAccountId (), ResourceType .primary_storage , volume . isDisplayVolume (), new Long (newSize - currentSize ));
879879 } else {
880- _resourceLimitMgr .decrementResourceCount (volume .getAccountId (), ResourceType .primary_storage , new Long (currentSize - newSize ));
880+ _resourceLimitMgr .decrementResourceCount (volume .getAccountId (), ResourceType .primary_storage , volume . isDisplayVolume (), new Long (currentSize - newSize ));
881881 }
882882 return volume ;
883883 } catch (InterruptedException e ) {
@@ -928,11 +928,11 @@ public boolean deleteVolume(long volumeId, Account caller) throws ConcurrentOper
928928 VMInstanceVO vmInstance = _vmInstanceDao .findById (instanceId );
929929 if (instanceId == null || (vmInstance .getType ().equals (VirtualMachine .Type .User ))) {
930930 // Decrement the resource count for volumes and primary storage belonging user VM's only
931- _resourceLimitMgr .decrementResourceCount (volume .getAccountId (), ResourceType .volume );
931+ _resourceLimitMgr .decrementResourceCount (volume .getAccountId (), ResourceType .volume , volume . isDisplayVolume () );
932932 /* If volume is in primary storage, decrement primary storage count else decrement secondary
933933 storage count (in case of upload volume). */
934934 if (volume .getFolder () != null || volume .getPath () != null || volume .getState () == Volume .State .Allocated ) {
935- _resourceLimitMgr .decrementResourceCount (volume .getAccountId (), ResourceType .primary_storage , new Long (volume .getSize ()));
935+ _resourceLimitMgr .decrementResourceCount (volume .getAccountId (), ResourceType .primary_storage , volume . isDisplayVolume (), new Long (volume .getSize ()));
936936 } else {
937937 _resourceLimitMgr .recalculateResourceCount (volume .getAccountId (), volume .getDomainId (), ResourceType .secondary_storage .getOrdinal ());
938938 }
@@ -1140,17 +1140,14 @@ public Volume attachVolumeToVM(AttachVolumeCmd command) {
11401140
11411141 @ Override
11421142 @ ActionEvent (eventType = EventTypes .EVENT_VOLUME_UPDATE , eventDescription = "updating volume" , async = true )
1143- public Volume updateVolume (long volumeId , String path , String state , Long storageId , Boolean displayVolume , String customId ) {
1143+ public Volume updateVolume (long volumeId , String path , String state , Long storageId , Boolean displayVolume , String customId , long entityOwnerId ) {
1144+
11441145 VolumeVO volume = _volumeDao .findById (volumeId );
11451146
11461147 if (path != null ) {
11471148 volume .setPath (path );
11481149 }
11491150
1150- if (displayVolume != null ) {
1151- volume .setDisplayVolume (displayVolume );
1152- }
1153-
11541151 if (state != null ) {
11551152 try {
11561153 Volume .State volumeState = Volume .State .valueOf (state );
@@ -1173,6 +1170,12 @@ public Volume updateVolume(long volumeId, String path, String state, Long storag
11731170 volume .setUuid (customId );
11741171 }
11751172
1173+ if (displayVolume != null && displayVolume != volume .isDisplayVolume ()) { // No need to check permissions since only Admin allowed to call this API.
1174+ volume .setDisplayVolume (displayVolume );
1175+ _resourceLimitMgr .changeResourceCount (entityOwnerId , ResourceType .volume , displayVolume );
1176+ _resourceLimitMgr .changeResourceCount (entityOwnerId , ResourceType .primary_storage , displayVolume , new Long (volume .getSize ()));
1177+ }
1178+
11761179 _volumeDao .update (volumeId , volume );
11771180
11781181 return volume ;
0 commit comments