Skip to content

Commit fcbfe26

Browse files
committed
fix the implmentation
1 parent ce1be39 commit fcbfe26

File tree

7 files changed

+53
-83
lines changed

7 files changed

+53
-83
lines changed

engine/schema/src/main/java/com/cloud/storage/dao/VolumeDao.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,4 +162,6 @@ public interface VolumeDao extends GenericDao<VolumeVO, Long>, StateDao<Volume.S
162162
List<VolumeVO> searchRemovedByVms(List<Long> vmIds, Long batchSize);
163163

164164
VolumeVO findOneByIScsiName(String iScsiName);
165+
166+
int getVolumeCountByOfferingId(long diskOfferingId);
165167
}

engine/schema/src/main/java/com/cloud/storage/dao/VolumeDaoImpl.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ public class VolumeDaoImpl extends GenericDaoBase<VolumeVO, Long> implements Vol
7777
protected GenericSearchBuilder<VolumeVO, SumCount> primaryStorageSearch2;
7878
protected GenericSearchBuilder<VolumeVO, SumCount> secondaryStorageSearch;
7979
private final SearchBuilder<VolumeVO> poolAndPathSearch;
80+
final GenericSearchBuilder<VolumeVO, Integer> CountByOfferingId;
8081

8182
@Inject
8283
ReservationDao reservationDao;
@@ -504,6 +505,11 @@ public VolumeDaoImpl() {
504505
poolAndPathSearch.and("poolId", poolAndPathSearch.entity().getPoolId(), Op.EQ);
505506
poolAndPathSearch.and("path", poolAndPathSearch.entity().getPath(), Op.EQ);
506507
poolAndPathSearch.done();
508+
509+
CountByOfferingId = createSearchBuilder(Integer.class);
510+
CountByOfferingId.select(null, Func.COUNT, CountByOfferingId.entity().getId());
511+
CountByOfferingId.and("diskOfferingId", CountByOfferingId.entity().getDiskOfferingId(), Op.EQ);
512+
CountByOfferingId.done();
507513
}
508514

509515
@Override
@@ -909,4 +915,12 @@ public VolumeVO findOneByIScsiName(String iScsiName) {
909915
sc.setParameters("iScsiName", iScsiName);
910916
return findOneIncludingRemovedBy(sc);
911917
}
918+
919+
@Override
920+
public int getVolumeCountByOfferingId(long diskOfferingId) {
921+
SearchCriteria<Integer> sc = CountByOfferingId.create();
922+
sc.setParameters("diskOfferingId", diskOfferingId);
923+
List<Integer> results = customSearch(sc, null);
924+
return results.get(0);
925+
}
912926
}

engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDao.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,4 +187,5 @@ List<VMInstanceVO> searchRemovedByRemoveDate(final Date startDate, final Date en
187187

188188
Map<String, Long> getNameIdMapForVmIds(Collection<Long> ids);
189189

190+
int getVmCountByOfferingId(Long serviceOfferingId);
190191
}

engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDaoImpl.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ public class VMInstanceDaoImpl extends GenericDaoBase<VMInstanceVO, Long> implem
104104
protected SearchBuilder<VMInstanceVO> LastHostAndStatesSearch;
105105
protected SearchBuilder<VMInstanceVO> VmsNotInClusterUsingPool;
106106
protected SearchBuilder<VMInstanceVO> IdsPowerStateSelectSearch;
107+
GenericSearchBuilder<VMInstanceVO, Integer> CountByOfferingId;
107108

108109
@Inject
109110
ResourceTagDao tagsDao;
@@ -344,6 +345,11 @@ protected void init() {
344345
IdsPowerStateSelectSearch.entity().getPowerStateUpdateCount(),
345346
IdsPowerStateSelectSearch.entity().getPowerStateUpdateTime());
346347
IdsPowerStateSelectSearch.done();
348+
349+
CountByOfferingId = createSearchBuilder(Integer.class);
350+
CountByOfferingId.select(null, Func.COUNT, CountByOfferingId.entity().getId());
351+
CountByOfferingId.and("serviceOfferingId", CountByOfferingId.entity().getServiceOfferingId(), Op.EQ);
352+
CountByOfferingId.done();
347353
}
348354

349355
@Override
@@ -1224,4 +1230,15 @@ public Map<String, Long> getNameIdMapForVmIds(Collection<Long> ids) {
12241230
return vms.stream()
12251231
.collect(Collectors.toMap(VMInstanceVO::getInstanceName, VMInstanceVO::getId));
12261232
}
1233+
1234+
@Override
1235+
public int getVmCountByOfferingId(Long serviceOfferingId) {
1236+
if (serviceOfferingId == null) {
1237+
return 0;
1238+
}
1239+
SearchCriteria<Integer> sc = CountByOfferingId.create();
1240+
sc.setParameters("serviceOfferingId", serviceOfferingId);
1241+
List<Integer> count = customSearch(sc, null);
1242+
return count.get(0);
1243+
}
12271244
}

server/src/main/java/com/cloud/api/query/dao/UserVmJoinDao.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,4 @@ UserVmResponse newUserVmResponse(ResponseView view, String objectName, UserVmJoi
4646

4747
List<UserVmJoinVO> listByAccountServiceOfferingTemplateAndNotInState(long accountId,
4848
List<VirtualMachine.State> states, List<Long> offeringIds, List<Long> templateIds);
49-
50-
List<UserVmJoinVO> listByNetworkOfferingId(Long networkOfferingId);
51-
52-
List<UserVmJoinVO> listByVpcOfferingId(Long vpcId);
53-
54-
List<UserVmJoinVO> listByDiskOfferingId(Long diskOfferingId);
55-
56-
List<UserVmJoinVO> listByServiceOfferingId(Long serviceOfferingId);
5749
}

server/src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java

Lines changed: 0 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -111,10 +111,6 @@ public class UserVmJoinDaoImpl extends GenericDaoBaseWithTagInformation<UserVmJo
111111

112112
private final SearchBuilder<UserVmJoinVO> VmDetailSearch;
113113
private final SearchBuilder<UserVmJoinVO> activeVmByIsoSearch;
114-
private final SearchBuilder<UserVmJoinVO> vmByNetworkIdSearch;
115-
private final SearchBuilder<UserVmJoinVO> vmByVpcIdSearch;
116-
private final SearchBuilder<UserVmJoinVO> vmByDiskOfferingIdSearch;
117-
private final SearchBuilder<UserVmJoinVO> vmByServiceOfferingIdSearch;
118114

119115
protected UserVmJoinDaoImpl() {
120116

@@ -128,26 +124,6 @@ protected UserVmJoinDaoImpl() {
128124
activeVmByIsoSearch.and("isoId", activeVmByIsoSearch.entity().getIsoId(), SearchCriteria.Op.EQ);
129125
activeVmByIsoSearch.and("stateNotIn", activeVmByIsoSearch.entity().getState(), SearchCriteria.Op.NIN);
130126
activeVmByIsoSearch.done();
131-
132-
vmByNetworkIdSearch = createSearchBuilder();
133-
vmByNetworkIdSearch.and("networkId", vmByNetworkIdSearch.entity().getNetworkId(), Op.EQ);
134-
vmByNetworkIdSearch.selectFields(vmByNetworkIdSearch.entity().getId(), vmByNetworkIdSearch.entity().getInstanceName());
135-
vmByNetworkIdSearch.done();
136-
137-
vmByVpcIdSearch = createSearchBuilder();
138-
vmByVpcIdSearch.and("vpcId", vmByVpcIdSearch.entity().getVpcId(), Op.EQ);
139-
vmByVpcIdSearch.selectFields(vmByVpcIdSearch.entity().getId(), vmByVpcIdSearch.entity().getInstanceName());
140-
vmByVpcIdSearch.done();
141-
142-
vmByDiskOfferingIdSearch = createSearchBuilder();
143-
vmByDiskOfferingIdSearch.and("diskOfferingId", vmByDiskOfferingIdSearch.entity().getDiskOfferingId(), Op.EQ);
144-
vmByDiskOfferingIdSearch.selectFields(vmByDiskOfferingIdSearch.entity().getId(), vmByDiskOfferingIdSearch.entity().getInstanceName());
145-
vmByDiskOfferingIdSearch.done();
146-
147-
vmByServiceOfferingIdSearch = createSearchBuilder();
148-
vmByServiceOfferingIdSearch.and("serviceOfferingId", vmByServiceOfferingIdSearch.entity().getServiceOfferingId(), Op.EQ);
149-
vmByServiceOfferingIdSearch.selectFields(vmByServiceOfferingIdSearch.entity().getId(), vmByServiceOfferingIdSearch.entity().getInstanceName());
150-
vmByServiceOfferingIdSearch.done();
151127
}
152128

153129
@Override
@@ -742,44 +718,4 @@ public List<UserVmJoinVO> listByAccountServiceOfferingTemplateAndNotInState(long
742718
sc.setParameters("displayVm", 1);
743719
return customSearch(sc, null);
744720
}
745-
746-
@Override
747-
public List<UserVmJoinVO> listByNetworkOfferingId(Long networkId) {
748-
if (networkId == null) {
749-
return new ArrayList<>();
750-
}
751-
SearchCriteria<UserVmJoinVO> sc = vmByNetworkIdSearch.create();
752-
sc.setParameters("networkId", networkId);
753-
return customSearch(sc, null);
754-
}
755-
756-
@Override
757-
public List<UserVmJoinVO> listByVpcOfferingId(Long vpcId) {
758-
if (vpcId == null) {
759-
return new ArrayList<>();
760-
}
761-
SearchCriteria<UserVmJoinVO> sc = vmByVpcIdSearch.create();
762-
sc.setParameters("vpcId", vpcId);
763-
return customSearch(sc, null);
764-
}
765-
766-
@Override
767-
public List<UserVmJoinVO> listByDiskOfferingId(Long diskOfferingId) {
768-
if (diskOfferingId == null) {
769-
return new ArrayList<>();
770-
}
771-
SearchCriteria<UserVmJoinVO> sc = vmByDiskOfferingIdSearch.create();
772-
sc.setParameters("diskOfferingId", diskOfferingId);
773-
return customSearch(sc, null);
774-
}
775-
776-
@Override
777-
public List<UserVmJoinVO> listByServiceOfferingId(Long serviceOfferingId) {
778-
if (serviceOfferingId == null) {
779-
return new ArrayList<>();
780-
}
781-
SearchCriteria<UserVmJoinVO> sc = vmByServiceOfferingIdSearch.create();
782-
sc.setParameters("serviceOfferingId", serviceOfferingId);
783-
return customSearch(sc, null);
784-
}
785721
}

server/src/main/java/com/cloud/user/DomainManagerImpl.java

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,13 @@
2929
import javax.inject.Inject;
3030

3131
import com.cloud.api.query.dao.NetworkOfferingJoinDao;
32-
import com.cloud.api.query.dao.UserVmJoinDao;
3332
import com.cloud.api.query.dao.VpcOfferingJoinDao;
3433
import com.cloud.api.query.vo.NetworkOfferingJoinVO;
35-
import com.cloud.api.query.vo.UserVmJoinVO;
3634
import com.cloud.api.query.vo.VpcOfferingJoinVO;
3735
import com.cloud.configuration.Resource;
3836
import com.cloud.domain.dao.DomainDetailsDao;
37+
import com.cloud.network.dao.NetworkDao;
38+
import com.cloud.network.vpc.dao.VpcDao;
3939
import com.cloud.network.vpc.dao.VpcOfferingDao;
4040
import com.cloud.network.vpc.dao.VpcOfferingDetailsDao;
4141
import com.cloud.offerings.dao.NetworkOfferingDao;
@@ -87,6 +87,7 @@
8787
import com.cloud.service.dao.ServiceOfferingDao;
8888
import com.cloud.service.dao.ServiceOfferingDetailsDao;
8989
import com.cloud.storage.dao.DiskOfferingDao;
90+
import com.cloud.storage.dao.VolumeDao;
9091
import com.cloud.user.dao.AccountDao;
9192
import com.cloud.utils.Pair;
9293
import com.cloud.utils.component.ManagerBase;
@@ -103,6 +104,7 @@
103104
import com.cloud.utils.net.NetUtils;
104105
import com.cloud.vm.ReservationContext;
105106
import com.cloud.vm.ReservationContextImpl;
107+
import com.cloud.vm.dao.VMInstanceDao;
106108

107109
import org.apache.commons.lang3.StringUtils;
108110

@@ -144,7 +146,13 @@ public class DomainManagerImpl extends ManagerBase implements DomainManager, Dom
144146
@Inject
145147
private ProjectDao _projectDao;
146148
@Inject
147-
private UserVmJoinDao userVmJoinDao;
149+
private VMInstanceDao vmInstanceDao;
150+
@Inject
151+
private NetworkDao networkDao;
152+
@Inject
153+
private VolumeDao volumeDao;
154+
@Inject
155+
private VpcDao vpcDao;
148156
@Inject
149157
private ProjectManager _projectMgr;
150158
@Inject
@@ -548,8 +556,8 @@ private void removeVpcOfferings(Long domainId, String domainIdString) {
548556
List<Long> vpcOfferingsDetailsToRemove = new ArrayList<>();
549557
List<VpcOfferingJoinVO> vpcOfferingsForThisDomain = vpcOfferingJoinDao.findByDomainId(domainId);
550558
for (VpcOfferingJoinVO vpcOffering : vpcOfferingsForThisDomain) {
551-
List<UserVmJoinVO> userVms = userVmJoinDao.listByVpcOfferingId(vpcOffering.getId());
552-
if (domainIdString.equals(vpcOffering.getDomainId()) && userVms.isEmpty()) {
559+
int vpcCount = vpcDao.getVpcCountByOfferingId(vpcOffering.getId());
560+
if (domainIdString.equals(vpcOffering.getDomainId()) && vpcCount == 0) {
553561
vpcOfferingDao.remove(vpcOffering.getId());
554562
} else {
555563
vpcOfferingsDetailsToRemove.add(vpcOffering.getId());
@@ -564,8 +572,8 @@ private void removeNetworkOfferings(Long domainId, String domainIdString) {
564572
List<Long> networkOfferingsDetailsToRemove = new ArrayList<>();
565573
List<NetworkOfferingJoinVO> networkOfferingsForThisDomain = networkOfferingJoinDao.findByDomainId(domainId, false);
566574
for (NetworkOfferingJoinVO networkOffering : networkOfferingsForThisDomain) {
567-
List<UserVmJoinVO> userVms = userVmJoinDao.listByNetworkOfferingId(networkOffering.getId());
568-
if (domainIdString.equals(networkOffering.getDomainId()) && userVms.isEmpty()) {
575+
int networkCount = networkDao.getNetworkCountByNetworkOffId(networkOffering.getId());
576+
if (domainIdString.equals(networkOffering.getDomainId()) && networkCount == 0) {
569577
networkOfferingDao.remove(networkOffering.getId());
570578
} else {
571579
networkOfferingsDetailsToRemove.add(networkOffering.getId());
@@ -580,8 +588,8 @@ private void removeServiceOfferings(Long domainId, String domainIdString) {
580588
List<Long> serviceOfferingsDetailsToRemove = new ArrayList<>();
581589
List<ServiceOfferingJoinVO> serviceOfferingsForThisDomain = serviceOfferingJoinDao.findByDomainId(domainId);
582590
for (ServiceOfferingJoinVO serviceOffering : serviceOfferingsForThisDomain) {
583-
List<UserVmJoinVO> userVms = userVmJoinDao.listByServiceOfferingId(serviceOffering.getId());
584-
if (domainIdString.equals(serviceOffering.getDomainId()) && userVms.isEmpty()) {
591+
int vmCount = vmInstanceDao.getVmCountByOfferingId(serviceOffering.getId());
592+
if (domainIdString.equals(serviceOffering.getDomainId()) && vmCount == 0) {
585593
serviceOfferingDao.remove(serviceOffering.getId());
586594
} else {
587595
serviceOfferingsDetailsToRemove.add(serviceOffering.getId());
@@ -596,8 +604,8 @@ private void removeDiskOfferings(Long domainId, String domainIdString) {
596604
List<Long> diskOfferingsDetailsToRemove = new ArrayList<>();
597605
List<DiskOfferingJoinVO> diskOfferingsForThisDomain = diskOfferingJoinDao.findByDomainId(domainId);
598606
for (DiskOfferingJoinVO diskOffering : diskOfferingsForThisDomain) {
599-
List<UserVmJoinVO> userVms = userVmJoinDao.listByDiskOfferingId(diskOffering.getId());
600-
if (domainIdString.equals(diskOffering.getDomainId()) && userVms.isEmpty()) {
607+
int volumeCount = volumeDao.getVolumeCountByOfferingId(diskOffering.getId());
608+
if (domainIdString.equals(diskOffering.getDomainId()) && volumeCount == 0) {
601609
diskOfferingDao.remove(diskOffering.getId());
602610
} else {
603611
diskOfferingsDetailsToRemove.add(diskOffering.getId());

0 commit comments

Comments
 (0)