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());