find in set implementation

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
This commit is contained in:
Rohit Yadav 2019-04-03 17:59:12 +05:30 committed by Abhishek Kumar
parent 02913e9ea1
commit 6a902460af
16 changed files with 89 additions and 100 deletions

View File

@ -75,10 +75,6 @@ public class ServiceOfferingVO extends DiskOfferingVO implements ServiceOffering
@Column(name = "deployment_planner")
private String deploymentPlanner = null;
@Transient
@Column(name = "domain_id")
Long domainId;
// This is a delayed load value. If the value is null,
// then this field has not been loaded yet.
// Call service offering dao to load it.
@ -199,7 +195,7 @@ public class ServiceOfferingVO extends DiskOfferingVO implements ServiceOffering
@Override
public Long getDomainId() {
// TODO: get rid of me
return domainId;
return null;
}
@Override

View File

@ -36,12 +36,6 @@ public interface ServiceOfferingDao extends GenericDao<ServiceOfferingVO, Long>
ServiceOfferingVO persistSystemServiceOffering(ServiceOfferingVO vo);
List<ServiceOfferingVO> findPublicServiceOfferings();
List<ServiceOfferingVO> findServiceOfferingByDomainId(Long domainId);
List<ServiceOfferingVO> findSystemOffering(Long domainId, Boolean isSystem, String vmType);
ServiceOfferingVO persistDeafultServiceOffering(ServiceOfferingVO offering);
void loadDetails(ServiceOfferingVO serviceOffering);

View File

@ -50,10 +50,7 @@ public class ServiceOfferingDaoImpl extends GenericDaoBase<ServiceOfferingVO, Lo
protected UserVmDetailsDao userVmDetailsDao;
protected final SearchBuilder<ServiceOfferingVO> UniqueNameSearch;
protected final SearchBuilder<ServiceOfferingVO> ServiceOfferingsByDomainIdSearch;
protected final SearchBuilder<ServiceOfferingVO> SystemServiceOffering;
protected final SearchBuilder<ServiceOfferingVO> ServiceOfferingsByKeywordSearch;
protected final SearchBuilder<ServiceOfferingVO> PublicServiceOfferingSearch;
public ServiceOfferingDaoImpl() {
super();
@ -63,23 +60,6 @@ public class ServiceOfferingDaoImpl extends GenericDaoBase<ServiceOfferingVO, Lo
UniqueNameSearch.and("system", UniqueNameSearch.entity().isSystemUse(), SearchCriteria.Op.EQ);
UniqueNameSearch.done();
ServiceOfferingsByDomainIdSearch = createSearchBuilder();
ServiceOfferingsByDomainIdSearch.and("domainId", ServiceOfferingsByDomainIdSearch.entity().getDomainId(), SearchCriteria.Op.EQ);
ServiceOfferingsByDomainIdSearch.done();
SystemServiceOffering = createSearchBuilder();
SystemServiceOffering.and("domainId", SystemServiceOffering.entity().getDomainId(), SearchCriteria.Op.EQ);
SystemServiceOffering.and("system", SystemServiceOffering.entity().isSystemUse(), SearchCriteria.Op.EQ);
SystemServiceOffering.and("vm_type", SystemServiceOffering.entity().getSpeed(), SearchCriteria.Op.EQ);
SystemServiceOffering.and("removed", SystemServiceOffering.entity().getRemoved(), SearchCriteria.Op.NULL);
SystemServiceOffering.done();
PublicServiceOfferingSearch = createSearchBuilder();
PublicServiceOfferingSearch.and("domainId", PublicServiceOfferingSearch.entity().getDomainId(), SearchCriteria.Op.NULL);
PublicServiceOfferingSearch.and("system", PublicServiceOfferingSearch.entity().isSystemUse(), SearchCriteria.Op.EQ);
PublicServiceOfferingSearch.and("removed", PublicServiceOfferingSearch.entity().getRemoved(), SearchCriteria.Op.NULL);
PublicServiceOfferingSearch.done();
ServiceOfferingsByKeywordSearch = createSearchBuilder();
ServiceOfferingsByKeywordSearch.or("name", ServiceOfferingsByKeywordSearch.entity().getName(), SearchCriteria.Op.EQ);
ServiceOfferingsByKeywordSearch.or("displayText", ServiceOfferingsByKeywordSearch.entity().getDisplayText(), SearchCriteria.Op.EQ);
@ -127,29 +107,6 @@ public class ServiceOfferingDaoImpl extends GenericDaoBase<ServiceOfferingVO, Lo
}
}
@Override
public List<ServiceOfferingVO> findServiceOfferingByDomainId(Long domainId) {
SearchCriteria<ServiceOfferingVO> sc = ServiceOfferingsByDomainIdSearch.create();
sc.setParameters("domainId", domainId);
return listBy(sc);
}
@Override
public List<ServiceOfferingVO> findSystemOffering(Long domainId, Boolean isSystem, String vmType) {
SearchCriteria<ServiceOfferingVO> sc = SystemServiceOffering.create();
sc.setParameters("domainId", domainId);
sc.setParameters("system", isSystem);
sc.setParameters("vm_type", vmType);
return listBy(sc);
}
@Override
public List<ServiceOfferingVO> findPublicServiceOfferings() {
SearchCriteria<ServiceOfferingVO> sc = PublicServiceOfferingSearch.create();
sc.setParameters("system", false);
return listBy(sc);
}
@Override
@DB
public ServiceOfferingVO persistDeafultServiceOffering(ServiceOfferingVO offering) {

View File

@ -22,7 +22,6 @@ import com.cloud.storage.DiskOfferingVO;
import com.cloud.utils.db.GenericDao;
public interface DiskOfferingDao extends GenericDao<DiskOfferingVO, Long> {
List<DiskOfferingVO> listByDomainId(long domainId);
List<DiskOfferingVO> findPrivateDiskOffering();

View File

@ -66,11 +66,6 @@ public class DiskOfferingDaoImpl extends GenericDaoBase<DiskOfferingVO, Long> im
_typeAttr = _allAttributes.get("type");
}
@Override
public List<DiskOfferingVO> listByDomainId(long domainId) {
return filterOfferingsForDomain(listAll(), domainId);
}
@Override
public List<DiskOfferingVO> findPrivateDiskOffering() {
SearchCriteria<DiskOfferingVO> sc = PrivateDiskOfferingSearch.create();

View File

@ -52,11 +52,11 @@ CREATE VIEW `cloud`.`disk_offering_view` AS
disk_offering.type,
disk_offering.display_offering,
disk_offering.state,
GROUP_CONCAT(domain_details.value) AS domain_id,
GROUP_CONCAT(domain.id) AS domain_id,
GROUP_CONCAT(domain.uuid) AS domain_uuid,
GROUP_CONCAT(domain.name) AS domain_name,
GROUP_CONCAT(domain.path) AS domain_path,
GROUP_CONCAT(zone_details.value) AS zone_id,
GROUP_CONCAT(zone.id) AS zone_id,
GROUP_CONCAT(zone.uuid) AS zone_uuid,
GROUP_CONCAT(zone.name) AS zone_name
from

View File

@ -57,7 +57,7 @@ public class SearchCriteria<K> {
}
public enum Func {
NATIVE("@", 1), MAX("MAX(@)", 1), MIN("MIN(@)", 1), FIRST("FIRST(@)", 1), LAST("LAST(@)", 1), SUM("SUM(@)", 1), COUNT("COUNT(@)", 1), DISTINCT("DISTINCT(@)", 1);
NATIVE("@", 1), MAX("MAX(@)", 1), MIN("MIN(@)", 1), FIRST("FIRST(@)", 1), LAST("LAST(@)", 1), SUM("SUM(@)", 1), COUNT("COUNT(@)", 1), DISTINCT("DISTINCT(@)", 1), FIND_IN_SET("FIND_IN_SET(@, @)", 2);
private String func;
private int count;

View File

@ -75,10 +75,6 @@ public class ServiceOfferingVO extends DiskOfferingVO implements ServiceOffering
@Column(name = "deployment_planner")
private String deploymentPlanner = null;
@Transient
@Column(name = "domain_id")
Long domainId;
@Transient
Map<String, String> details = new HashMap<String, String>();
@ -292,6 +288,6 @@ public class ServiceOfferingVO extends DiskOfferingVO implements ServiceOffering
@Override
public Long getDomainId() {
// TODO: get rid of me
return domainId;
return null;
}
}

View File

@ -21,6 +21,7 @@ import static org.junit.Assert.assertNotNull;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.UUID;
@ -307,7 +308,7 @@ public class ManagementServerMock {
}
private ServiceOffering getServiceByName(String name) {
List<ServiceOfferingVO> service_list = _serviceOfferingDao.findPublicServiceOfferings();
List<ServiceOfferingVO> service_list = Collections.emptyList();
for (ServiceOfferingVO service : service_list) {
if (service.getName().equals(name)) {
return service;

View File

@ -16,6 +16,8 @@
// under the License.
package com.cloud.api.query.dao;
import java.util.List;
import org.apache.cloudstack.api.response.DiskOfferingResponse;
import com.cloud.api.query.vo.DiskOfferingJoinVO;
@ -24,6 +26,8 @@ import com.cloud.utils.db.GenericDao;
public interface DiskOfferingJoinDao extends GenericDao<DiskOfferingJoinVO, Long> {
List<DiskOfferingJoinVO> findByDomainId(long domainId);
DiskOfferingResponse newDiskOfferingResponse(DiskOfferingJoinVO dof);
DiskOfferingJoinVO newDiskOfferingView(DiskOffering dof);

View File

@ -18,12 +18,10 @@ package com.cloud.api.query.dao;
import java.util.List;
import org.apache.cloudstack.api.response.DiskOfferingResponse;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
import org.apache.cloudstack.api.response.DiskOfferingResponse;
import com.cloud.api.query.vo.DiskOfferingJoinVO;
import com.cloud.offering.DiskOffering;
import com.cloud.offering.ServiceOffering;
@ -50,6 +48,15 @@ public class DiskOfferingJoinDaoImpl extends GenericDaoBase<DiskOfferingJoinVO,
_count = "select count(distinct id) from disk_offering_view WHERE ";
}
@Override
public List<DiskOfferingJoinVO> findByDomainId(long domainId) {
SearchBuilder<DiskOfferingJoinVO> DiskOfferingsByDomainIdSearch = createSearchBuilder();
DiskOfferingsByDomainIdSearch.select("domainId", SearchCriteria.Func.FIND_IN_SET, DiskOfferingsByDomainIdSearch.entity().getDomainId(), String.valueOf(domainId));
DiskOfferingsByDomainIdSearch.done();
return listBy(DiskOfferingsByDomainIdSearch.create());
}
@Override
public DiskOfferingResponse newDiskOfferingResponse(DiskOfferingJoinVO offering) {

View File

@ -16,6 +16,8 @@
// under the License.
package com.cloud.api.query.dao;
import java.util.List;
import org.apache.cloudstack.api.response.ServiceOfferingResponse;
import com.cloud.api.query.vo.ServiceOfferingJoinVO;
@ -24,6 +26,8 @@ import com.cloud.utils.db.GenericDao;
public interface ServiceOfferingJoinDao extends GenericDao<ServiceOfferingJoinVO, Long> {
List<ServiceOfferingJoinVO> findByDomainId(long domainId);
ServiceOfferingResponse newServiceOfferingResponse(ServiceOfferingJoinVO offering);
ServiceOfferingJoinVO newServiceOfferingView(ServiceOffering offering);

View File

@ -18,12 +18,10 @@ package com.cloud.api.query.dao;
import java.util.List;
import org.apache.cloudstack.api.response.ServiceOfferingResponse;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
import org.apache.cloudstack.api.response.ServiceOfferingResponse;
import com.cloud.api.ApiDBUtils;
import com.cloud.api.query.vo.ServiceOfferingJoinVO;
import com.cloud.offering.ServiceOffering;
@ -47,6 +45,15 @@ public class ServiceOfferingJoinDaoImpl extends GenericDaoBase<ServiceOfferingJo
this._count = "select count(distinct service_offering_view.id) from service_offering_view WHERE ";
}
@Override
public List<ServiceOfferingJoinVO> findByDomainId(long domainId) {
SearchBuilder<ServiceOfferingJoinVO> ServiceOfferingsByDomainIdSearch = createSearchBuilder();
ServiceOfferingsByDomainIdSearch.select("domainId", SearchCriteria.Func.FIND_IN_SET, ServiceOfferingsByDomainIdSearch.entity().getDomainId(), String.valueOf(domainId));
ServiceOfferingsByDomainIdSearch.done();
return listBy(ServiceOfferingsByDomainIdSearch.create());
}
@Override
public ServiceOfferingResponse newServiceOfferingResponse(ServiceOfferingJoinVO offering) {

View File

@ -149,7 +149,7 @@ public class ServiceOfferingJoinVO extends BaseViewVO implements InternalIdentit
private Date removed;
@Column(name = "domain_id")
private long domainId;
private String domainId;
@Column(name = "domain_uuid")
private String domainUuid;
@ -217,7 +217,7 @@ public class ServiceOfferingJoinVO extends BaseViewVO implements InternalIdentit
return removed;
}
public long getDomainId() {
public String getDomainId() {
return domainId;
}

View File

@ -16,6 +16,7 @@
// under the License.
package com.cloud.user;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@ -23,6 +24,7 @@ import java.util.UUID;
import javax.inject.Inject;
import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.command.admin.domain.ListDomainChildrenCmd;
import org.apache.cloudstack.api.command.admin.domain.ListDomainsCmd;
import org.apache.cloudstack.api.command.admin.domain.UpdateDomainCmd;
@ -31,11 +33,16 @@ import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationSe
import org.apache.cloudstack.framework.messagebus.MessageBus;
import org.apache.cloudstack.framework.messagebus.PublishScope;
import org.apache.cloudstack.region.RegionManager;
import org.apache.cloudstack.resourcedetail.dao.DiskOfferingDetailsDao;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.BooleanUtils;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
import com.cloud.api.query.dao.DiskOfferingJoinDao;
import com.cloud.api.query.dao.ServiceOfferingJoinDao;
import com.cloud.api.query.vo.DiskOfferingJoinVO;
import com.cloud.api.query.vo.ServiceOfferingJoinVO;
import com.cloud.configuration.ConfigurationManager;
import com.cloud.configuration.Resource.ResourceOwnerType;
import com.cloud.configuration.ResourceLimit;
@ -56,10 +63,7 @@ import com.cloud.network.dao.NetworkDomainDao;
import com.cloud.projects.ProjectManager;
import com.cloud.projects.ProjectVO;
import com.cloud.projects.dao.ProjectDao;
import com.cloud.service.ServiceOfferingVO;
import com.cloud.service.dao.ServiceOfferingDao;
import com.cloud.storage.DiskOfferingVO;
import com.cloud.storage.dao.DiskOfferingDao;
import com.cloud.service.dao.ServiceOfferingDetailsDao;
import com.cloud.user.dao.AccountDao;
import com.cloud.utils.Pair;
import com.cloud.utils.component.ManagerBase;
@ -91,9 +95,13 @@ public class DomainManagerImpl extends ManagerBase implements DomainManager, Dom
@Inject
private AccountDao _accountDao;
@Inject
private DiskOfferingDao _diskOfferingDao;
private DiskOfferingJoinDao diskOfferingJoinDao;
@Inject
private ServiceOfferingDao _offeringsDao;
private DiskOfferingDetailsDao diskOfferingDetailsDao;
@Inject
private ServiceOfferingJoinDao serviceOfferingJoinDao;
@Inject
private ServiceOfferingDetailsDao serviceOfferingDetailsDao;
@Inject
private ProjectDao _projectDao;
@Inject
@ -434,15 +442,37 @@ public class DomainManagerImpl extends ManagerBase implements DomainManager, Dom
}
protected void cleanupDomainOfferings(Long domainId) {
// delete the service and disk offerings associated with this domain
List<DiskOfferingVO> diskOfferingsForThisDomain = _diskOfferingDao.listByDomainId(domainId);
for (DiskOfferingVO diskOffering : diskOfferingsForThisDomain) {
_diskOfferingDao.remove(diskOffering.getId());
if (domainId == null) {
return;
}
List<ServiceOfferingVO> serviceOfferingsForThisDomain = _offeringsDao.findServiceOfferingByDomainId(domainId);
for (ServiceOfferingVO serviceOffering : serviceOfferingsForThisDomain) {
_offeringsDao.remove(serviceOffering.getId());
List<Long> diskOfferingsDetailsToRemove = new ArrayList<>();
List<Long> serviceOfferingsDetailsToRemove = new ArrayList<>();
// delete the service and disk offerings associated with this domain
List<DiskOfferingJoinVO> diskOfferingsForThisDomain = diskOfferingJoinDao.findByDomainId(domainId);
for (DiskOfferingJoinVO diskOffering : diskOfferingsForThisDomain) {
if (String.valueOf(domainId).equals(diskOffering.getDomainId())) {
diskOfferingJoinDao.remove(diskOffering.getId());
} else {
diskOfferingsDetailsToRemove.add(diskOffering.getId());
}
}
List<ServiceOfferingJoinVO> serviceOfferingsForThisDomain = serviceOfferingJoinDao.findByDomainId(domainId);
for (ServiceOfferingJoinVO serviceOffering : serviceOfferingsForThisDomain) {
if (String.valueOf(domainId).equals(serviceOffering.getDomainId())) {
serviceOfferingJoinDao.remove(serviceOffering.getId());
} else {
serviceOfferingsDetailsToRemove.add(serviceOffering.getId());
}
}
// Remove domain IDs for offerings which may be multi-domain
for (final Long diskOfferingId : diskOfferingsDetailsToRemove) {
diskOfferingDetailsDao.removeDetail(diskOfferingId, ApiConstants.DOMAIN_ID);
}
for (final Long serviceOfferingId : serviceOfferingsDetailsToRemove) {
serviceOfferingDetailsDao.removeDetail(serviceOfferingId, ApiConstants.DOMAIN_ID);
}
}

View File

@ -18,6 +18,7 @@
package com.cloud.user;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.UUID;
@ -37,6 +38,8 @@ import org.mockito.Mockito;
import org.mockito.Spy;
import org.mockito.runners.MockitoJUnitRunner;
import com.cloud.api.query.dao.DiskOfferingJoinDao;
import com.cloud.api.query.dao.ServiceOfferingJoinDao;
import com.cloud.configuration.ConfigurationManager;
import com.cloud.configuration.Resource.ResourceOwnerType;
import com.cloud.configuration.dao.ResourceCountDao;
@ -51,10 +54,6 @@ import com.cloud.exception.PermissionDeniedException;
import com.cloud.network.dao.NetworkDomainDao;
import com.cloud.projects.ProjectManager;
import com.cloud.projects.dao.ProjectDao;
import com.cloud.service.ServiceOfferingVO;
import com.cloud.service.dao.ServiceOfferingDao;
import com.cloud.storage.DiskOfferingVO;
import com.cloud.storage.dao.DiskOfferingDao;
import com.cloud.user.dao.AccountDao;
import com.cloud.utils.db.Filter;
import com.cloud.utils.db.GlobalLock;
@ -72,9 +71,9 @@ public class DomainManagerImplTest {
@Mock
AccountDao _accountDao;
@Mock
DiskOfferingDao _diskOfferingDao;
DiskOfferingJoinDao _diskOfferingDao;
@Mock
ServiceOfferingDao _offeringsDao;
ServiceOfferingJoinDao _offeringsDao;
@Mock
ProjectDao _projectDao;
@Mock
@ -253,8 +252,8 @@ public class DomainManagerImplTest {
Mockito.when(_dedicatedDao.listByDomainId(Mockito.anyLong())).thenReturn(new ArrayList<DedicatedResourceVO>());
Mockito.when(_domainDao.remove(Mockito.anyLong())).thenReturn(true);
Mockito.when(_configMgr.releaseDomainSpecificVirtualRanges(Mockito.anyLong())).thenReturn(true);
Mockito.when(_diskOfferingDao.listByDomainId(Mockito.anyLong())).thenReturn(new ArrayList<DiskOfferingVO>());
Mockito.when(_offeringsDao.findServiceOfferingByDomainId(Mockito.anyLong())).thenReturn(new ArrayList<ServiceOfferingVO>());
Mockito.when(_diskOfferingDao.findByDomainId(Mockito.anyLong())).thenReturn(Collections.emptyList());
Mockito.when(_offeringsDao.findByDomainId(Mockito.anyLong())).thenReturn(Collections.emptyList());
try {
Assert.assertTrue(domainManager.deleteDomain(20l, false));
@ -286,8 +285,8 @@ public class DomainManagerImplTest {
Mockito.when(_resourceCountDao.removeEntriesByOwner(Mockito.anyLong(), Mockito.eq(ResourceOwnerType.Domain))).thenReturn(1l);
Mockito.when(_resourceLimitDao.removeEntriesByOwner(Mockito.anyLong(), Mockito.eq(ResourceOwnerType.Domain))).thenReturn(1l);
Mockito.when(_configMgr.releaseDomainSpecificVirtualRanges(Mockito.anyLong())).thenReturn(true);
Mockito.when(_diskOfferingDao.listByDomainId(Mockito.anyLong())).thenReturn(new ArrayList<DiskOfferingVO>());
Mockito.when(_offeringsDao.findServiceOfferingByDomainId(Mockito.anyLong())).thenReturn(new ArrayList<ServiceOfferingVO>());
Mockito.when(_diskOfferingDao.findByDomainId(Mockito.anyLong())).thenReturn(Collections.emptyList());
Mockito.when(_offeringsDao.findByDomainId(Mockito.anyLong())).thenReturn(Collections.emptyList());
try {
Assert.assertTrue(domainManager.deleteDomain(20l, true));