Search in sources :

Example 1 with VolumeJoinVO

use of com.cloud.api.query.vo.VolumeJoinVO in project cloudstack by apache.

the class QueryManagerImpl method searchForVolumesInternal.

private Pair<List<VolumeJoinVO>, Integer> searchForVolumesInternal(ListVolumesCmd cmd) {
    Account caller = CallContext.current().getCallingAccount();
    List<Long> permittedAccounts = new ArrayList<Long>();
    Long id = cmd.getId();
    Long vmInstanceId = cmd.getVirtualMachineId();
    String name = cmd.getVolumeName();
    String keyword = cmd.getKeyword();
    String type = cmd.getType();
    Map<String, String> tags = cmd.getTags();
    Long storageId = cmd.getStorageId();
    Long diskOffId = cmd.getDiskOfferingId();
    Boolean display = cmd.getDisplay();
    Long zoneId = cmd.getZoneId();
    Long podId = cmd.getPodId();
    List<Long> ids = getIdsListFromCmd(cmd.getId(), cmd.getIds());
    Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject = new Ternary<Long, Boolean, ListProjectResourcesCriteria>(cmd.getDomainId(), cmd.isRecursive(), null);
    _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false);
    Long domainId = domainIdRecursiveListProject.first();
    Boolean isRecursive = domainIdRecursiveListProject.second();
    ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third();
    Filter searchFilter = new Filter(VolumeJoinVO.class, "created", false, cmd.getStartIndex(), cmd.getPageSizeVal());
    // hack for now, this should be done better but due to needing a join I
    // opted to
    // do this quickly and worry about making it pretty later
    SearchBuilder<VolumeJoinVO> sb = _volumeJoinDao.createSearchBuilder();
    // select distinct
    sb.select(null, Func.DISTINCT, sb.entity().getId());
    // ids to get
    // number of
    // records with
    // pagination
    _accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
    sb.and("name", sb.entity().getName(), SearchCriteria.Op.EQ);
    sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
    sb.and("idIN", sb.entity().getId(), SearchCriteria.Op.IN);
    sb.and("volumeType", sb.entity().getVolumeType(), SearchCriteria.Op.LIKE);
    sb.and("instanceId", sb.entity().getVmId(), SearchCriteria.Op.EQ);
    sb.and("dataCenterId", sb.entity().getDataCenterId(), SearchCriteria.Op.EQ);
    sb.and("podId", sb.entity().getPodId(), SearchCriteria.Op.EQ);
    sb.and("storageId", sb.entity().getPoolId(), SearchCriteria.Op.EQ);
    sb.and("diskOfferingId", sb.entity().getDiskOfferingId(), SearchCriteria.Op.EQ);
    sb.and("display", sb.entity().isDisplayVolume(), SearchCriteria.Op.EQ);
    // Only return volumes that are not destroyed
    sb.and("state", sb.entity().getState(), SearchCriteria.Op.NEQ);
    sb.and("systemUse", sb.entity().isSystemUse(), SearchCriteria.Op.NEQ);
    // display UserVM volumes only
    sb.and().op("type", sb.entity().getVmType(), SearchCriteria.Op.NIN);
    sb.or("nulltype", sb.entity().getVmType(), SearchCriteria.Op.NULL);
    sb.cp();
    // now set the SC criteria...
    SearchCriteria<VolumeJoinVO> sc = sb.create();
    _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
    if (keyword != null) {
        SearchCriteria<VolumeJoinVO> ssc = _volumeJoinDao.createSearchCriteria();
        ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%");
        ssc.addOr("volumeType", SearchCriteria.Op.LIKE, "%" + keyword + "%");
        sc.addAnd("name", SearchCriteria.Op.SC, ssc);
    }
    if (name != null) {
        sc.setParameters("name", name);
    }
    if (display != null) {
        sc.setParameters("display", display);
    }
    setIdsListToSearchCriteria(sc, ids);
    sc.setParameters("systemUse", 1);
    if (tags != null && !tags.isEmpty()) {
        SearchCriteria<VolumeJoinVO> tagSc = _volumeJoinDao.createSearchCriteria();
        for (String key : tags.keySet()) {
            SearchCriteria<VolumeJoinVO> tsc = _volumeJoinDao.createSearchCriteria();
            tsc.addAnd("tagKey", SearchCriteria.Op.EQ, key);
            tsc.addAnd("tagValue", SearchCriteria.Op.EQ, tags.get(key));
            tagSc.addOr("tagKey", SearchCriteria.Op.SC, tsc);
        }
        sc.addAnd("tagKey", SearchCriteria.Op.SC, tagSc);
    }
    if (diskOffId != null) {
        sc.setParameters("diskOfferingId", diskOffId);
    }
    if (id != null) {
        sc.setParameters("id", id);
    }
    if (type != null) {
        sc.setParameters("volumeType", "%" + type + "%");
    }
    if (vmInstanceId != null) {
        sc.setParameters("instanceId", vmInstanceId);
    }
    if (zoneId != null) {
        sc.setParameters("dataCenterId", zoneId);
    }
    if (podId != null) {
        sc.setParameters("podId", podId);
    }
    if (storageId != null) {
        sc.setParameters("storageId", storageId);
    }
    // Don't return DomR and ConsoleProxy volumes
    sc.setParameters("type", VirtualMachine.Type.ConsoleProxy, VirtualMachine.Type.SecondaryStorageVm, VirtualMachine.Type.DomainRouter);
    // Only return volumes that are not destroyed
    sc.setParameters("state", Volume.State.Destroy);
    // search Volume details by ids
    Pair<List<VolumeJoinVO>, Integer> uniqueVolPair = _volumeJoinDao.searchAndCount(sc, searchFilter);
    Integer count = uniqueVolPair.second();
    if (count.intValue() == 0) {
        // empty result
        return uniqueVolPair;
    }
    List<VolumeJoinVO> uniqueVols = uniqueVolPair.first();
    Long[] vrIds = new Long[uniqueVols.size()];
    int i = 0;
    for (VolumeJoinVO v : uniqueVols) {
        vrIds[i++] = v.getId();
    }
    List<VolumeJoinVO> vrs = _volumeJoinDao.searchByIds(vrIds);
    return new Pair<List<VolumeJoinVO>, Integer>(vrs, count);
}
Also used : Account(com.cloud.user.Account) Ternary(com.cloud.utils.Ternary) ArrayList(java.util.ArrayList) ListProjectResourcesCriteria(com.cloud.projects.Project.ListProjectResourcesCriteria) TemplateFilter(com.cloud.template.VirtualMachineTemplate.TemplateFilter) Filter(com.cloud.utils.db.Filter) ArrayList(java.util.ArrayList) List(java.util.List) VolumeJoinVO(com.cloud.api.query.vo.VolumeJoinVO) Pair(com.cloud.utils.Pair)

Example 2 with VolumeJoinVO

use of com.cloud.api.query.vo.VolumeJoinVO in project cloudstack by apache.

the class ViewResponseHelper method createVolumeResponse.

public static List<VolumeResponse> createVolumeResponse(ResponseView view, VolumeJoinVO... volumes) {
    Hashtable<Long, VolumeResponse> vrDataList = new Hashtable<Long, VolumeResponse>();
    for (VolumeJoinVO vr : volumes) {
        VolumeResponse vrData = vrDataList.get(vr.getId());
        if (vrData == null) {
            // first time encountering this volume
            vrData = ApiDBUtils.newVolumeResponse(view, vr);
        } else {
            // update tags
            vrData = ApiDBUtils.fillVolumeDetails(view, vrData, vr);
        }
        vrDataList.put(vr.getId(), vrData);
    }
    return new ArrayList<VolumeResponse>(vrDataList.values());
}
Also used : VolumeResponse(org.apache.cloudstack.api.response.VolumeResponse) Hashtable(java.util.Hashtable) ArrayList(java.util.ArrayList) VolumeJoinVO(com.cloud.api.query.vo.VolumeJoinVO)

Example 3 with VolumeJoinVO

use of com.cloud.api.query.vo.VolumeJoinVO in project cloudstack by apache.

the class QueryManagerImpl method searchForVolumes.

@Override
public ListResponse<VolumeResponse> searchForVolumes(ListVolumesCmd cmd) {
    Pair<List<VolumeJoinVO>, Integer> result = searchForVolumesInternal(cmd);
    ListResponse<VolumeResponse> response = new ListResponse<VolumeResponse>();
    ResponseView respView = ResponseView.Restricted;
    if (cmd instanceof ListVolumesCmdByAdmin) {
        respView = ResponseView.Full;
    }
    List<VolumeResponse> volumeResponses = ViewResponseHelper.createVolumeResponse(respView, result.first().toArray(new VolumeJoinVO[result.first().size()]));
    for (VolumeResponse vr : volumeResponses) {
        String poolId = vr.getStoragePoolId();
        if (poolId == null) {
            continue;
        }
        DataStore store = dataStoreManager.getPrimaryDataStore(poolId);
        if (store == null) {
            continue;
        }
        DataStoreDriver driver = store.getDriver();
        if (driver == null) {
            continue;
        }
        Map<String, String> caps = driver.getCapabilities();
        if (caps != null) {
            boolean quiescevm = Boolean.parseBoolean(caps.get(DataStoreCapabilities.VOLUME_SNAPSHOT_QUIESCEVM.toString()));
            vr.setNeedQuiescevm(quiescevm);
        }
    }
    response.setResponses(volumeResponses, result.second());
    return response;
}
Also used : ListResponse(org.apache.cloudstack.api.response.ListResponse) VolumeResponse(org.apache.cloudstack.api.response.VolumeResponse) DataStoreDriver(org.apache.cloudstack.engine.subsystem.api.storage.DataStoreDriver) ListVolumesCmdByAdmin(org.apache.cloudstack.api.command.admin.volume.ListVolumesCmdByAdmin) ResponseView(org.apache.cloudstack.api.ResponseObject.ResponseView) DataStore(org.apache.cloudstack.engine.subsystem.api.storage.DataStore) ArrayList(java.util.ArrayList) List(java.util.List) VolumeJoinVO(com.cloud.api.query.vo.VolumeJoinVO)

Aggregations

VolumeJoinVO (com.cloud.api.query.vo.VolumeJoinVO)3 ArrayList (java.util.ArrayList)3 List (java.util.List)2 VolumeResponse (org.apache.cloudstack.api.response.VolumeResponse)2 ListProjectResourcesCriteria (com.cloud.projects.Project.ListProjectResourcesCriteria)1 TemplateFilter (com.cloud.template.VirtualMachineTemplate.TemplateFilter)1 Account (com.cloud.user.Account)1 Pair (com.cloud.utils.Pair)1 Ternary (com.cloud.utils.Ternary)1 Filter (com.cloud.utils.db.Filter)1 Hashtable (java.util.Hashtable)1 ResponseView (org.apache.cloudstack.api.ResponseObject.ResponseView)1 ListVolumesCmdByAdmin (org.apache.cloudstack.api.command.admin.volume.ListVolumesCmdByAdmin)1 ListResponse (org.apache.cloudstack.api.response.ListResponse)1 DataStore (org.apache.cloudstack.engine.subsystem.api.storage.DataStore)1 DataStoreDriver (org.apache.cloudstack.engine.subsystem.api.storage.DataStoreDriver)1