This is an automated email from the ASF dual-hosted git repository.

nvazquez pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/main by this push:
     new 669ab73  server: check service offering (storage) tags when reallocate 
a ROOT disk (#5501)
669ab73 is described below

commit 669ab73efeaf85e4e1c5763c2b21e246275f55d8
Author: Wei Zhou <[email protected]>
AuthorDate: Mon Oct 4 00:45:59 2021 +0200

    server: check service offering (storage) tags when reallocate a ROOT disk 
(#5501)
    
    * server: check service offering (storage) tags when reallocate a ROOT disk
    
    * server: resize volumes in Allocated state
---
 .../src/main/java/com/cloud/storage/dao/VolumeDao.java   |  2 ++
 .../main/java/com/cloud/storage/dao/VolumeDaoImpl.java   | 16 ++++++++++++++++
 .../com/cloud/deploy/DeploymentPlanningManagerImpl.java  |  3 ++-
 server/src/main/java/com/cloud/vm/UserVmManagerImpl.java |  4 ++--
 4 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/engine/schema/src/main/java/com/cloud/storage/dao/VolumeDao.java 
b/engine/schema/src/main/java/com/cloud/storage/dao/VolumeDao.java
index b410f48..9eb623a 100644
--- a/engine/schema/src/main/java/com/cloud/storage/dao/VolumeDao.java
+++ b/engine/schema/src/main/java/com/cloud/storage/dao/VolumeDao.java
@@ -94,6 +94,8 @@ public interface VolumeDao extends GenericDao<VolumeVO, 
Long>, StateDao<Volume.S
 
     List<VolumeVO> findReadyRootVolumesByInstance(long instanceId);
 
+    List<VolumeVO> findReadyAndAllocatedRootVolumesByInstance(long instanceId);
+
     List<Long> listPoolIdsByVolumeCount(long dcId, Long podId, Long clusterId, 
long accountId);
 
     List<Long> listZoneWidePoolIdsByVolumeCount(long dcId, long accountId);
diff --git 
a/engine/schema/src/main/java/com/cloud/storage/dao/VolumeDaoImpl.java 
b/engine/schema/src/main/java/com/cloud/storage/dao/VolumeDaoImpl.java
index 12e658a..d934f80 100644
--- a/engine/schema/src/main/java/com/cloud/storage/dao/VolumeDaoImpl.java
+++ b/engine/schema/src/main/java/com/cloud/storage/dao/VolumeDaoImpl.java
@@ -61,6 +61,7 @@ public class VolumeDaoImpl extends GenericDaoBase<VolumeVO, 
Long> implements Vol
     protected final GenericSearchBuilder<VolumeVO, Long> ActiveTemplateSearch;
     protected final SearchBuilder<VolumeVO> InstanceStatesSearch;
     protected final SearchBuilder<VolumeVO> AllFieldsSearch;
+    protected final SearchBuilder<VolumeVO> RootDiskStateSearch;
     protected GenericSearchBuilder<VolumeVO, Long> CountByAccount;
     protected GenericSearchBuilder<VolumeVO, SumCount> primaryStorageSearch;
     protected GenericSearchBuilder<VolumeVO, SumCount> primaryStorageSearch2;
@@ -218,6 +219,15 @@ public class VolumeDaoImpl extends 
GenericDaoBase<VolumeVO, Long> implements Vol
     }
 
     @Override
+    public List<VolumeVO> findReadyAndAllocatedRootVolumesByInstance(long 
instanceId) {
+        SearchCriteria<VolumeVO> sc = RootDiskStateSearch.create();
+        sc.setParameters("instanceId", instanceId);
+        sc.setParameters("state", Volume.State.Ready, State.Allocated);
+        sc.setParameters("vType", Volume.Type.ROOT);
+        return listBy(sc);
+    }
+
+    @Override
     public List<VolumeVO> findByPod(long podId) {
         SearchCriteria<VolumeVO> sc = AllFieldsSearch.create();
         sc.setParameters("pod", podId);
@@ -365,6 +375,12 @@ public class VolumeDaoImpl extends 
GenericDaoBase<VolumeVO, Long> implements Vol
         AllFieldsSearch.and("name", AllFieldsSearch.entity().getName(), Op.EQ);
         AllFieldsSearch.done();
 
+        RootDiskStateSearch = createSearchBuilder();
+        RootDiskStateSearch.and("state", 
RootDiskStateSearch.entity().getState(), Op.IN);
+        RootDiskStateSearch.and("vType", 
RootDiskStateSearch.entity().getVolumeType(), Op.EQ);
+        RootDiskStateSearch.and("instanceId", 
RootDiskStateSearch.entity().getInstanceId(), Op.EQ);
+        RootDiskStateSearch.done();
+
         DetachedAccountIdSearch = createSearchBuilder();
         DetachedAccountIdSearch.and("accountId", 
DetachedAccountIdSearch.entity().getAccountId(), Op.EQ);
         DetachedAccountIdSearch.and("destroyed", 
DetachedAccountIdSearch.entity().getState(), Op.NEQ);
diff --git 
a/server/src/main/java/com/cloud/deploy/DeploymentPlanningManagerImpl.java 
b/server/src/main/java/com/cloud/deploy/DeploymentPlanningManagerImpl.java
index 2ff19d6..5a42f6e 100644
--- a/server/src/main/java/com/cloud/deploy/DeploymentPlanningManagerImpl.java
+++ b/server/src/main/java/com/cloud/deploy/DeploymentPlanningManagerImpl.java
@@ -1639,7 +1639,8 @@ StateListener<State, VirtualMachine.Event, 
VirtualMachine>, Configurable {
 
             DiskOfferingVO diskOffering = 
_diskOfferingDao.findById(toBeCreated.getDiskOfferingId());
 
-            if (vmProfile.getTemplate().getFormat() == Storage.ImageFormat.ISO 
&& vmProfile.getServiceOffering().getTagsArray().length != 0) {
+            if ((vmProfile.getTemplate().getFormat() == 
Storage.ImageFormat.ISO || toBeCreated.getVolumeType() == Volume.Type.ROOT)
+                    && vmProfile.getServiceOffering().getTagsArray().length != 
0) {
                 
diskOffering.setTagsArray(Arrays.asList(vmProfile.getServiceOffering().getTagsArray()));
             }
 
diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java 
b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
index 44bb79e..d371e58 100644
--- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
@@ -1271,7 +1271,7 @@ public class UserVmManagerImpl extends ManagerBase 
implements UserVmManager, Vir
 
         DiskOfferingVO newRootDiskOffering = 
_diskOfferingDao.findById(newServiceOffering.getId());
 
-        List<VolumeVO> vols = 
_volsDao.findReadyRootVolumesByInstance(vmInstance.getId());
+        List<VolumeVO> vols = 
_volsDao.findReadyAndAllocatedRootVolumesByInstance(vmInstance.getId());
 
         for (final VolumeVO rootVolumeOfVm : vols) {
             DiskOfferingVO currentRootDiskOffering = 
_diskOfferingDao.findById(rootVolumeOfVm.getDiskOfferingId());
@@ -1347,7 +1347,7 @@ public class UserVmManagerImpl extends ManagerBase 
implements UserVmManager, Vir
     private void resizeRootVolumeOfVmWithNewOffering(VMInstanceVO vmInstance, 
ServiceOfferingVO newServiceOffering)
             throws ResourceAllocationException {
         DiskOfferingVO newROOTDiskOffering = 
_diskOfferingDao.findById(newServiceOffering.getId());
-        List<VolumeVO> vols = 
_volsDao.findReadyRootVolumesByInstance(vmInstance.getId());
+        List<VolumeVO> vols = 
_volsDao.findReadyAndAllocatedRootVolumesByInstance(vmInstance.getId());
 
         for (final VolumeVO rootVolumeOfVm : vols) {
             rootVolumeOfVm.setDiskOfferingId(newROOTDiskOffering.getId());

Reply via email to