Search in sources :

Example 26 with Pair

use of com.cloud.legacymodel.utils.Pair in project cosmic by MissionCriticalCloud.

the class VMInstanceDaoImpl method updateState.

@Override
public boolean updateState(final State oldState, final Event event, final State newState, final VirtualMachine vm, final Object opaque) {
    if (newState == null) {
        if (s_logger.isDebugEnabled()) {
            s_logger.debug("There's no way to transition from old state: " + oldState.toString() + " event: " + event.toString());
        }
        return false;
    }
    final Pair<Long, Long> hosts = (Pair<Long, Long>) opaque;
    final Long newHostId = hosts.second();
    final VMInstanceVO vmi = (VMInstanceVO) vm;
    final Long oldHostId = vmi.getHostId();
    final Long oldUpdated = vmi.getUpdated();
    final Date oldUpdateDate = vmi.getUpdateTime();
    if (newState.equals(oldState) && newHostId != null && newHostId.equals(oldHostId)) {
        // state is same, don't need to update
        return true;
    }
    // lock the target row at beginning to avoid lock-promotion caused deadlock
    lockRow(vm.getId(), true);
    final SearchCriteria<VMInstanceVO> sc = _stateChangeSearch.create();
    sc.setParameters("id", vmi.getId());
    sc.setParameters("states", oldState);
    sc.setParameters("host", vmi.getHostId());
    sc.setParameters("update", vmi.getUpdated());
    vmi.incrUpdated();
    final UpdateBuilder ub = getUpdateBuilder(vmi);
    ub.set(vmi, "state", newState);
    ub.set(vmi, "hostId", newHostId);
    ub.set(vmi, "podIdToDeployIn", vmi.getPodIdToDeployIn());
    ub.set(vmi, _updateTimeAttr, new Date());
    final int result = update(vmi, sc);
    if (result == 0) {
        final VMInstanceVO vo = findByIdIncludingRemoved(vm.getId());
        if (s_logger.isDebugEnabled()) {
            if (vo != null) {
                final StringBuilder str = new StringBuilder("Unable to update ").append(vo.toString());
                str.append(": DB Data={Host=").append(vo.getHostId()).append("; State=").append(vo.getState().toString()).append("; updated=").append(vo.getUpdated()).append("; time=").append(vo.getUpdateTime());
                str.append("} New Data: {Host=").append(vm.getHostId()).append("; State=").append(vm.getState().toString()).append("; updated=").append(vmi.getUpdated()).append("; time=").append(vo.getUpdateTime());
                str.append("} Stale Data: {Host=").append(oldHostId).append("; State=").append(oldState).append("; updated=").append(oldUpdated).append("; time=").append(oldUpdateDate).append("}");
                s_logger.debug(str.toString());
            } else {
                s_logger.debug("Unable to update the vm id=" + vm.getId() + "; the vm either doesn't exist or already removed");
            }
        }
        if (vo != null && vo.getState() == newState) {
            // allow for concurrent update if target state has already been matched
            s_logger.debug("VM " + vo.getInstanceName() + " state has been already been updated to " + newState);
            return true;
        }
    }
    return result > 0;
}
Also used : VMInstanceVO(com.cloud.vm.VMInstanceVO) UpdateBuilder(com.cloud.utils.db.UpdateBuilder) Date(java.util.Date) Pair(com.cloud.legacymodel.utils.Pair)

Example 27 with Pair

use of com.cloud.legacymodel.utils.Pair in project cosmic by MissionCriticalCloud.

the class ConsoleProxyDaoImpl method getProxyLoadMatrix.

@Override
public List<Pair<Long, Integer>> getProxyLoadMatrix() {
    final ArrayList<Pair<Long, Integer>> l = new ArrayList<>();
    final TransactionLegacy txn = TransactionLegacy.currentTxn();
    PreparedStatement pstmt = null;
    try {
        pstmt = txn.prepareAutoCloseStatement(PROXY_ASSIGNMENT_MATRIX);
        final ResultSet rs = pstmt.executeQuery();
        while (rs.next()) {
            l.add(new Pair<>(rs.getLong(1), rs.getInt(2)));
        }
    } catch (final SQLException e) {
        s_logger.debug("Caught SQLException: ", e);
    }
    return l;
}
Also used : TransactionLegacy(com.cloud.utils.db.TransactionLegacy) SQLException(java.sql.SQLException) ArrayList(java.util.ArrayList) ResultSet(java.sql.ResultSet) PreparedStatement(java.sql.PreparedStatement) Pair(com.cloud.legacymodel.utils.Pair)

Example 28 with Pair

use of com.cloud.legacymodel.utils.Pair in project cosmic by MissionCriticalCloud.

the class SqlGenerator method buildDiscriminatorClause.

/**
 * buildDiscriminatorClause builds the join clause when there are multiple tables.
 *
 * @return
 */
public Pair<StringBuilder, Map<String, Object>> buildDiscriminatorClause() {
    final StringBuilder sql = new StringBuilder();
    final Map<String, Object> values = new HashMap<>();
    for (final Class<?> table : _tables) {
        final DiscriminatorValue dv = table.getAnnotation(DiscriminatorValue.class);
        if (dv != null) {
            final Class<?> parent = table.getSuperclass();
            final String tableName = DbUtil.getTableName(parent);
            final DiscriminatorColumn dc = parent.getAnnotation(DiscriminatorColumn.class);
            assert (dc != null) : "Parent does not have discrminator column: " + parent.getName();
            sql.append(tableName);
            sql.append(".");
            sql.append(dc.name()).append("=");
            Object value = null;
            if (dc.discriminatorType() == DiscriminatorType.INTEGER) {
                sql.append(dv.value());
                value = Integer.parseInt(dv.value());
            } else if (dc.discriminatorType() == DiscriminatorType.CHAR) {
                sql.append(dv.value());
                value = dv.value().charAt(0);
            } else if (dc.discriminatorType() == DiscriminatorType.STRING) {
                String v = dv.value();
                v = v.substring(0, v.length() < dc.length() ? v.length() : dc.length());
                sql.append("'").append(v).append("'");
                value = v;
            }
            values.put(dc.name(), value);
            sql.append(" AND ");
        }
    }
    return new Pair<>(sql, values);
}
Also used : HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) DiscriminatorColumn(javax.persistence.DiscriminatorColumn) DiscriminatorValue(javax.persistence.DiscriminatorValue) Pair(com.cloud.legacymodel.utils.Pair)

Example 29 with Pair

use of com.cloud.legacymodel.utils.Pair in project cosmic by MissionCriticalCloud.

the class QueryManagerImpl method searchForAffinityGroupsInternal.

public Pair<List<AffinityGroupJoinVO>, Integer> searchForAffinityGroupsInternal(final ListAffinityGroupsCmd cmd) {
    final Long affinityGroupId = cmd.getId();
    final String affinityGroupName = cmd.getAffinityGroupName();
    final String affinityGroupType = cmd.getAffinityGroupType();
    final Long vmId = cmd.getVirtualMachineId();
    final String accountName = cmd.getAccountName();
    Long domainId = cmd.getDomainId();
    final Long projectId = cmd.getProjectId();
    Boolean isRecursive = cmd.isRecursive();
    final Boolean listAll = cmd.listAll();
    final Long startIndex = cmd.getStartIndex();
    final Long pageSize = cmd.getPageSizeVal();
    final String keyword = cmd.getKeyword();
    final Account caller = CallContext.current().getCallingAccount();
    if (vmId != null) {
        final UserVmVO userVM = _userVmDao.findById(vmId);
        if (userVM == null) {
            throw new InvalidParameterValueException("Unable to list affinity groups for virtual machine instance " + vmId + "; instance not found.");
        }
        _accountMgr.checkAccess(caller, null, true, userVM);
        return listAffinityGroupsByVM(vmId.longValue(), startIndex, pageSize);
    }
    final List<Long> permittedAccounts = new ArrayList<>();
    final Ternary<Long, Boolean, ListProjectResourcesCriteria> ternary = new Ternary<>(domainId, isRecursive, null);
    _accountMgr.buildACLSearchParameters(caller, affinityGroupId, accountName, projectId, permittedAccounts, ternary, listAll, false);
    domainId = ternary.first();
    isRecursive = ternary.second();
    final ListProjectResourcesCriteria listProjectResourcesCriteria = ternary.third();
    final Filter searchFilter = new Filter(AffinityGroupJoinVO.class, ID_FIELD, true, startIndex, pageSize);
    final SearchCriteria<AffinityGroupJoinVO> sc = buildAffinityGroupSearchCriteria(domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria, affinityGroupId, affinityGroupName, affinityGroupType, keyword);
    final Pair<List<AffinityGroupJoinVO>, Integer> uniqueGroupsPair = _affinityGroupJoinDao.searchAndCount(sc, searchFilter);
    // search group details by ids
    List<AffinityGroupJoinVO> affinityGroups = new ArrayList<>();
    final Integer count = uniqueGroupsPair.second();
    if (count.intValue() != 0) {
        final List<AffinityGroupJoinVO> uniqueGroups = uniqueGroupsPair.first();
        final Long[] vrIds = new Long[uniqueGroups.size()];
        int i = 0;
        for (final AffinityGroupJoinVO v : uniqueGroups) {
            vrIds[i++] = v.getId();
        }
        affinityGroups = _affinityGroupJoinDao.searchByIds(vrIds);
    }
    if (!permittedAccounts.isEmpty()) {
        // add domain level affinity groups
        if (domainId != null) {
            final SearchCriteria<AffinityGroupJoinVO> scDomain = buildAffinityGroupSearchCriteria(null, isRecursive, new ArrayList<>(), listProjectResourcesCriteria, affinityGroupId, affinityGroupName, affinityGroupType, keyword);
            affinityGroups.addAll(listDomainLevelAffinityGroups(scDomain, searchFilter, domainId));
        } else {
            for (final Long permAcctId : permittedAccounts) {
                final Account permittedAcct = _accountDao.findById(permAcctId);
                final SearchCriteria<AffinityGroupJoinVO> scDomain = buildAffinityGroupSearchCriteria(null, isRecursive, new ArrayList<>(), listProjectResourcesCriteria, affinityGroupId, affinityGroupName, affinityGroupType, keyword);
                affinityGroups.addAll(listDomainLevelAffinityGroups(scDomain, searchFilter, permittedAcct.getDomainId()));
            }
        }
    } else if (permittedAccounts.isEmpty() && domainId != null && isRecursive) {
        // list all domain level affinity groups for the domain admin case
        final SearchCriteria<AffinityGroupJoinVO> scDomain = buildAffinityGroupSearchCriteria(null, isRecursive, new ArrayList<>(), listProjectResourcesCriteria, affinityGroupId, affinityGroupName, affinityGroupType, keyword);
        affinityGroups.addAll(listDomainLevelAffinityGroups(scDomain, searchFilter, domainId));
    }
    return new Pair<>(affinityGroups, affinityGroups.size());
}
Also used : Account(com.cloud.legacymodel.user.Account) UserVmVO(com.cloud.vm.UserVmVO) Ternary(com.cloud.legacymodel.utils.Ternary) ArrayList(java.util.ArrayList) SearchCriteria(com.cloud.utils.db.SearchCriteria) ListProjectResourcesCriteria(com.cloud.projects.Project.ListProjectResourcesCriteria) InvalidParameterValueException(com.cloud.legacymodel.exceptions.InvalidParameterValueException) Filter(com.cloud.utils.db.Filter) TemplateFilter(com.cloud.legacymodel.storage.VirtualMachineTemplate.TemplateFilter) AffinityGroupJoinVO(com.cloud.api.query.vo.AffinityGroupJoinVO) ArrayList(java.util.ArrayList) List(java.util.List) Pair(com.cloud.legacymodel.utils.Pair)

Example 30 with Pair

use of com.cloud.legacymodel.utils.Pair in project cosmic by MissionCriticalCloud.

the class QueryManagerImpl method searchForServersInternal.

public Pair<List<HostJoinVO>, Integer> searchForServersInternal(final ListHostsCmd cmd) {
    final Long zoneId = _accountMgr.checkAccessAndSpecifyAuthority(CallContext.current().getCallingAccount(), cmd.getZoneId());
    final Object name = cmd.getHostName();
    final Object type = cmd.getType();
    final Object state = cmd.getState();
    final Object pod = cmd.getPodId();
    final Object cluster = cmd.getClusterId();
    final Object id = cmd.getId();
    final Object keyword = cmd.getKeyword();
    final Object resourceState = cmd.getResourceState();
    final Object haHosts = cmd.getHaHost();
    final Long startIndex = cmd.getStartIndex();
    final Long pageSize = cmd.getPageSizeVal();
    final HypervisorType hypervisorType = cmd.getHypervisor();
    final Filter searchFilter = new Filter(HostJoinVO.class, "id", Boolean.TRUE, startIndex, pageSize);
    final SearchBuilder<HostJoinVO> sb = _hostJoinDao.createSearchBuilder();
    // select distinct
    sb.select(null, Func.DISTINCT, sb.entity().getId());
    // ids
    sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
    sb.and("name", sb.entity().getName(), SearchCriteria.Op.LIKE);
    sb.and("type", sb.entity().getType(), SearchCriteria.Op.LIKE);
    sb.and("status", sb.entity().getStatus(), SearchCriteria.Op.EQ);
    sb.and("dataCenterId", sb.entity().getZoneId(), SearchCriteria.Op.EQ);
    sb.and("podId", sb.entity().getPodId(), SearchCriteria.Op.EQ);
    sb.and("clusterId", sb.entity().getClusterId(), SearchCriteria.Op.EQ);
    sb.and("resourceState", sb.entity().getResourceState(), SearchCriteria.Op.EQ);
    sb.and("hypervisor_type", sb.entity().getHypervisorType(), SearchCriteria.Op.EQ);
    final String haTag = _haMgr.getHaTag();
    if (haHosts != null && haTag != null && !haTag.isEmpty()) {
        if ((Boolean) haHosts) {
            sb.and("tag", sb.entity().getTag(), SearchCriteria.Op.EQ);
        } else {
            sb.and().op("tag", sb.entity().getTag(), SearchCriteria.Op.NEQ);
            sb.or("tagNull", sb.entity().getTag(), SearchCriteria.Op.NULL);
            sb.cp();
        }
    }
    final SearchCriteria<HostJoinVO> sc = sb.create();
    if (keyword != null) {
        final SearchCriteria<HostJoinVO> ssc = _hostJoinDao.createSearchCriteria();
        ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%");
        ssc.addOr("status", SearchCriteria.Op.LIKE, "%" + keyword + "%");
        ssc.addOr("type", SearchCriteria.Op.LIKE, "%" + keyword + "%");
        sc.addAnd("name", SearchCriteria.Op.SC, ssc);
    }
    if (id != null) {
        sc.setParameters("id", id);
    }
    if (name != null) {
        sc.setParameters("name", "%" + name + "%");
    }
    if (type != null) {
        sc.setParameters("type", "%" + type);
    }
    if (state != null) {
        sc.setParameters("status", state);
    }
    if (zoneId != null) {
        sc.setParameters("dataCenterId", zoneId);
    }
    if (pod != null) {
        sc.setParameters("podId", pod);
    }
    if (cluster != null) {
        sc.setParameters("clusterId", cluster);
    }
    if (resourceState != null) {
        sc.setParameters("resourceState", resourceState);
    }
    if (haHosts != null && haTag != null && !haTag.isEmpty()) {
        sc.setParameters("tag", haTag);
    }
    if (hypervisorType != HypervisorType.None && hypervisorType != HypervisorType.Any) {
        sc.setParameters("hypervisor_type", hypervisorType);
    }
    // search host details by ids
    final Pair<List<HostJoinVO>, Integer> uniqueHostPair = _hostJoinDao.searchAndCount(sc, searchFilter);
    final Integer count = uniqueHostPair.second();
    if (count.intValue() == 0) {
        // handle empty result cases
        return uniqueHostPair;
    }
    final List<HostJoinVO> uniqueHosts = uniqueHostPair.first();
    final Long[] hostIds = new Long[uniqueHosts.size()];
    int i = 0;
    for (final HostJoinVO v : uniqueHosts) {
        hostIds[i++] = v.getId();
    }
    final List<HostJoinVO> hosts = _hostJoinDao.searchByIds(hostIds);
    return new Pair<>(hosts, count);
}
Also used : HostJoinVO(com.cloud.api.query.vo.HostJoinVO) HypervisorType(com.cloud.model.enumeration.HypervisorType) Filter(com.cloud.utils.db.Filter) TemplateFilter(com.cloud.legacymodel.storage.VirtualMachineTemplate.TemplateFilter) ArrayList(java.util.ArrayList) List(java.util.List) Pair(com.cloud.legacymodel.utils.Pair)

Aggregations

Pair (com.cloud.legacymodel.utils.Pair)139 ArrayList (java.util.ArrayList)87 List (java.util.List)64 Account (com.cloud.legacymodel.user.Account)49 Filter (com.cloud.utils.db.Filter)48 InvalidParameterValueException (com.cloud.legacymodel.exceptions.InvalidParameterValueException)38 CloudRuntimeException (com.cloud.legacymodel.exceptions.CloudRuntimeException)27 HashMap (java.util.HashMap)27 Ternary (com.cloud.legacymodel.utils.Ternary)23 ListProjectResourcesCriteria (com.cloud.projects.Project.ListProjectResourcesCriteria)22 ExcludeList (com.cloud.deploy.DeploymentPlanner.ExcludeList)20 SSHKeyPair (com.cloud.legacymodel.user.SSHKeyPair)16 TemplateFilter (com.cloud.legacymodel.storage.VirtualMachineTemplate.TemplateFilter)13 Map (java.util.Map)13 DB (com.cloud.utils.db.DB)11 DomainVO (com.cloud.domain.DomainVO)10 VolumeVO (com.cloud.storage.VolumeVO)10 PermissionDeniedException (com.cloud.legacymodel.exceptions.PermissionDeniedException)9 Network (com.cloud.legacymodel.network.Network)9 ResourceTagVO (com.cloud.tags.ResourceTagVO)9