Search in sources :

Example 86 with ConcurrentOperationException

use of com.cloud.exception.ConcurrentOperationException in project cloudstack by apache.

the class InternalLoadBalancerVMManagerImpl method findOrDeployInternalLbVm.

@DB
protected List<DomainRouterVO> findOrDeployInternalLbVm(final Network guestNetwork, final Ip requestedGuestIp, final DeployDestination dest, final Account owner, final Map<Param, Object> params) throws ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException {
    List<DomainRouterVO> internalLbVms = new ArrayList<DomainRouterVO>();
    final Network lock = _networkDao.acquireInLockTable(guestNetwork.getId(), NetworkOrchestrationService.NetworkLockTimeout.value());
    if (lock == null) {
        throw new ConcurrentOperationException("Unable to lock network " + guestNetwork.getId());
    }
    if (s_logger.isDebugEnabled()) {
        s_logger.debug("Lock is acquired for network id " + lock.getId() + " as a part of internal lb startup in " + dest);
    }
    final long internalLbProviderId = getInternalLbProviderId(guestNetwork);
    try {
        assert guestNetwork.getState() == Network.State.Implemented || guestNetwork.getState() == Network.State.Setup || guestNetwork.getState() == Network.State.Implementing : "Network is not yet fully implemented: " + guestNetwork;
        assert guestNetwork.getTrafficType() == TrafficType.Guest;
        //deploy internal lb vm
        final Pair<DeploymentPlan, List<DomainRouterVO>> planAndInternalLbVms = getDeploymentPlanAndInternalLbVms(dest, guestNetwork.getId(), requestedGuestIp);
        internalLbVms = planAndInternalLbVms.second();
        final DeploymentPlan plan = planAndInternalLbVms.first();
        if (internalLbVms.size() > 0) {
            s_logger.debug("Found " + internalLbVms.size() + " internal lb vms for the requested IP " + requestedGuestIp.addr());
            return internalLbVms;
        }
        final LinkedHashMap<Network, List<? extends NicProfile>> networks = createInternalLbVmNetworks(guestNetwork, plan, requestedGuestIp);
        long internalLbVmOfferingId = _internalLbVmOfferingId;
        if (internalLbVmOfferingId == 0L) {
            ServiceOfferingVO serviceOffering = _serviceOfferingDao.findDefaultSystemOffering(ServiceOffering.internalLbVmDefaultOffUniqueName, ConfigurationManagerImpl.SystemVMUseLocalStorage.valueIn(dest.getDataCenter().getId()));
            internalLbVmOfferingId = serviceOffering.getId();
        }
        //Pass startVm=false as we are holding the network lock that needs to be released at the end of vm allocation
        final DomainRouterVO internalLbVm = deployInternalLbVm(owner, dest, plan, params, internalLbProviderId, internalLbVmOfferingId, guestNetwork.getVpcId(), networks, false);
        if (internalLbVm != null) {
            _internalLbVmDao.addRouterToGuestNetwork(internalLbVm, guestNetwork);
            internalLbVms.add(internalLbVm);
        }
    } finally {
        if (lock != null) {
            _networkDao.releaseFromLockTable(lock.getId());
            if (s_logger.isDebugEnabled()) {
                s_logger.debug("Lock is released for network id " + lock.getId() + " as a part of internal lb vm startup in " + dest);
            }
        }
    }
    return internalLbVms;
}
Also used : Network(com.cloud.network.Network) ArrayList(java.util.ArrayList) ArrayList(java.util.ArrayList) List(java.util.List) DeploymentPlan(com.cloud.deploy.DeploymentPlan) NicProfile(com.cloud.vm.NicProfile) ConcurrentOperationException(com.cloud.exception.ConcurrentOperationException) ServiceOfferingVO(com.cloud.service.ServiceOfferingVO) DomainRouterVO(com.cloud.vm.DomainRouterVO) DB(com.cloud.utils.db.DB)

Example 87 with ConcurrentOperationException

use of com.cloud.exception.ConcurrentOperationException in project cloudstack by apache.

the class NuageVspGuestNetworkGuru method implement.

@Override
public Network implement(Network network, NetworkOffering offering, DeployDestination dest, ReservationContext context) throws InsufficientVirtualNetworkCapacityException {
    long networkId = network.getId();
    network = _networkDao.acquireInLockTable(network.getId(), 1200);
    if (network == null) {
        throw new ConcurrentOperationException("Unable to acquire lock on network " + networkId);
    }
    NetworkVO implemented = null;
    try {
        if (offering.getGuestType() == GuestType.Isolated && network.getState() != State.Implementing) {
            throw new IllegalStateException("Network " + networkId + " is not in expected state Implementing, but is in state " + network.getState());
        }
        //Get the Account details and find the type
        AccountVO networksAccount = _accountDao.findById(network.getAccountId());
        if (networksAccount.getType() == Account.ACCOUNT_TYPE_PROJECT) {
            String errorMessage = "Networks created by account " + networksAccount.getAccountName() + " of type Project (" + Account.ACCOUNT_TYPE_PROJECT + ") " + "are not yet supported by NuageVsp provider";
            s_logger.error(errorMessage);
            throw new InsufficientVirtualNetworkCapacityException(errorMessage, Account.class, network.getAccountId());
        }
        //We don't support a shared network with UserData and multiple IP ranges at the same time.
        checkMultipleSubnetsCombinedWithUseData(network);
        long dcId = dest.getDataCenter().getId();
        //Get physical network id
        Long physicalNetworkId = network.getPhysicalNetworkId();
        //Physical network id can be null in Guest Network in Basic zone, so locate the physical network
        if (physicalNetworkId == null) {
            physicalNetworkId = _networkModel.findPhysicalNetworkId(dcId, offering.getTags(), offering.getTrafficType());
        }
        implemented = new NetworkVO(network.getId(), network, network.getNetworkOfferingId(), network.getGuruName(), network.getDomainId(), network.getAccountId(), network.getRelated(), network.getName(), network.getDisplayText(), network.getNetworkDomain(), network.getGuestType(), network.getDataCenterId(), physicalNetworkId, network.getAclType(), network.getSpecifyIpRanges(), network.getVpcId(), offering.getRedundantRouter());
        implemented.setUuid(network.getUuid());
        implemented.setState(State.Allocated);
        if (network.getGateway() != null) {
            implemented.setGateway(network.getGateway());
        }
        if (network.getCidr() != null) {
            implemented.setCidr(network.getCidr());
        }
        VspNetwork vspNetwork = _nuageVspEntityBuilder.buildVspNetwork(implemented);
        String tenantId = context.getDomain().getName() + "-" + context.getAccount().getAccountId();
        String broadcastUriStr = implemented.getUuid() + "/" + vspNetwork.getVirtualRouterIp();
        implemented.setBroadcastUri(Networks.BroadcastDomainType.Vsp.toUri(broadcastUriStr));
        implemented.setBroadcastDomainType(Networks.BroadcastDomainType.Vsp);
        if (!implement(physicalNetworkId, vspNetwork, _nuageVspEntityBuilder.buildNetworkDhcpOption(network, offering))) {
            return null;
        }
        if (StringUtils.isNotBlank(vspNetwork.getDomainTemplateName())) {
            if (network.getVpcId() != null) {
                VpcDetailVO vpcDetail = new VpcDetailVO(network.getVpcId(), NuageVspManager.nuageDomainTemplateDetailName, vspNetwork.getDomainTemplateName(), false);
                _vpcDetailsDao.persist(vpcDetail);
            } else {
                NetworkDetailVO networkDetail = new NetworkDetailVO(implemented.getId(), NuageVspManager.nuageDomainTemplateDetailName, vspNetwork.getDomainTemplateName(), false);
                _networkDetailsDao.persist(networkDetail);
            }
        }
        s_logger.info("Implemented OK, network " + implemented.getUuid() + " in tenant " + tenantId + " linked to " + implemented.getBroadcastUri());
    } finally {
        _networkDao.releaseFromLockTable(network.getId());
    }
    return implemented;
}
Also used : PhysicalNetworkVO(com.cloud.network.dao.PhysicalNetworkVO) NetworkVO(com.cloud.network.dao.NetworkVO) InsufficientVirtualNetworkCapacityException(com.cloud.exception.InsufficientVirtualNetworkCapacityException) VspNetwork(net.nuage.vsp.acs.client.api.model.VspNetwork) ConcurrentOperationException(com.cloud.exception.ConcurrentOperationException) AccountVO(com.cloud.user.AccountVO) NetworkDetailVO(com.cloud.network.dao.NetworkDetailVO) VpcDetailVO(org.apache.cloudstack.resourcedetail.VpcDetailVO)

Example 88 with ConcurrentOperationException

use of com.cloud.exception.ConcurrentOperationException in project cloudstack by apache.

the class ConsoleProxyManagerImpl method allocCapacity.

private void allocCapacity(long dataCenterId) {
    if (s_logger.isTraceEnabled()) {
        s_logger.trace("Allocate console proxy standby capacity for data center : " + dataCenterId);
    }
    ConsoleProxyVO proxy = null;
    String errorString = null;
    try {
        boolean consoleProxyVmFromStoppedPool = false;
        proxy = assignProxyFromStoppedPool(dataCenterId);
        if (proxy == null) {
            if (s_logger.isInfoEnabled()) {
                s_logger.info("No stopped console proxy is available, need to allocate a new console proxy");
            }
            if (_allocProxyLock.lock(ACQUIRE_GLOBAL_LOCK_TIMEOUT_FOR_SYNC)) {
                try {
                    proxy = startNew(dataCenterId);
                } catch (ConcurrentOperationException e) {
                    s_logger.info("Concurrent operation exception caught " + e);
                } finally {
                    _allocProxyLock.unlock();
                }
            } else {
                if (s_logger.isInfoEnabled()) {
                    s_logger.info("Unable to acquire synchronization lock for console proxy vm allocation, wait for next scan");
                }
            }
        } else {
            if (s_logger.isInfoEnabled()) {
                s_logger.info("Found a stopped console proxy, starting it. Vm id : " + proxy.getId());
            }
            consoleProxyVmFromStoppedPool = true;
        }
        if (proxy != null) {
            long proxyVmId = proxy.getId();
            proxy = startProxy(proxyVmId, false);
            if (proxy != null) {
                if (s_logger.isInfoEnabled()) {
                    s_logger.info("Console proxy " + proxy.getHostName() + " is started");
                }
                SubscriptionMgr.getInstance().notifySubscribers(ConsoleProxyManager.ALERT_SUBJECT, this, new ConsoleProxyAlertEventArgs(ConsoleProxyAlertEventArgs.PROXY_UP, dataCenterId, proxy.getId(), proxy, null));
            } else {
                if (s_logger.isInfoEnabled()) {
                    s_logger.info("Unable to start console proxy vm for standby capacity, vm id : " + proxyVmId + ", will recycle it and start a new one");
                }
                if (consoleProxyVmFromStoppedPool) {
                    destroyProxy(proxyVmId);
                }
            }
        }
    } catch (Exception e) {
        errorString = e.getMessage();
        throw e;
    } finally {
        // Also add failure reason since startvm masks some of them.
        if (proxy == null || proxy.getState() != State.Running)
            SubscriptionMgr.getInstance().notifySubscribers(ConsoleProxyManager.ALERT_SUBJECT, this, new ConsoleProxyAlertEventArgs(ConsoleProxyAlertEventArgs.PROXY_CREATE_FAILURE, dataCenterId, 0l, null, errorString));
    }
}
Also used : ConsoleProxyVO(com.cloud.vm.ConsoleProxyVO) ConcurrentOperationException(com.cloud.exception.ConcurrentOperationException) OperationTimedoutException(com.cloud.exception.OperationTimedoutException) InsufficientCapacityException(com.cloud.exception.InsufficientCapacityException) ResourceUnavailableException(com.cloud.exception.ResourceUnavailableException) StorageUnavailableException(com.cloud.exception.StorageUnavailableException) CloudRuntimeException(com.cloud.utils.exception.CloudRuntimeException) ConcurrentOperationException(com.cloud.exception.ConcurrentOperationException) ConfigurationException(javax.naming.ConfigurationException) UnableDeleteHostException(com.cloud.resource.UnableDeleteHostException)

Example 89 with ConcurrentOperationException

use of com.cloud.exception.ConcurrentOperationException in project cloudstack by apache.

the class VpcVirtualNetworkApplianceManagerImpl method addVpcRouterToGuestNetwork.

@Override
public boolean addVpcRouterToGuestNetwork(final VirtualRouter router, final Network network, final Map<VirtualMachineProfile.Param, Object> params) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException {
    if (network.getTrafficType() != TrafficType.Guest) {
        s_logger.warn("Network " + network + " is not of type " + TrafficType.Guest);
        return false;
    }
    // Add router to the Guest network
    boolean result = true;
    try {
        // 1) add nic to the router
        _routerDao.addRouterToGuestNetwork(router, network);
        final NicProfile guestNic = _itMgr.addVmToNetwork(router, network, null);
        // 2) setup guest network
        if (guestNic != null) {
            result = setupVpcGuestNetwork(network, router, true, guestNic);
        } else {
            s_logger.warn("Failed to add router " + router + " to guest network " + network);
            result = false;
        }
        // 3) apply networking rules
        if (result && params.get(Param.ReProgramGuestNetworks) != null && (Boolean) params.get(Param.ReProgramGuestNetworks) == true) {
            sendNetworkRulesToRouter(router.getId(), network.getId());
        }
    } catch (final Exception ex) {
        s_logger.warn("Failed to add router " + router + " to network " + network + " due to ", ex);
        result = false;
    } finally {
        if (!result) {
            s_logger.debug("Removing the router " + router + " from network " + network + " as a part of cleanup");
            if (removeVpcRouterFromGuestNetwork(router, network)) {
                s_logger.debug("Removed the router " + router + " from network " + network + " as a part of cleanup");
            } else {
                s_logger.warn("Failed to remove the router " + router + " from network " + network + " as a part of cleanup");
            }
        } else {
            s_logger.debug("Succesfully added router " + router + " to guest network " + network);
        }
    }
    return result;
}
Also used : NicProfile(com.cloud.vm.NicProfile) AgentUnavailableException(com.cloud.exception.AgentUnavailableException) OperationTimedoutException(com.cloud.exception.OperationTimedoutException) ConcurrentOperationException(com.cloud.exception.ConcurrentOperationException) InsufficientCapacityException(com.cloud.exception.InsufficientCapacityException) ResourceUnavailableException(com.cloud.exception.ResourceUnavailableException) ConfigurationException(javax.naming.ConfigurationException) CloudRuntimeException(com.cloud.utils.exception.CloudRuntimeException)

Example 90 with ConcurrentOperationException

use of com.cloud.exception.ConcurrentOperationException in project cloudstack by apache.

the class UserVmManagerImpl method startVirtualMachine.

protected UserVm startVirtualMachine(DeployVMCmd cmd, Map<VirtualMachineProfile.Param, Object> additonalParams, String deploymentPlannerToUse) throws ResourceUnavailableException, InsufficientCapacityException, ConcurrentOperationException {
    long vmId = cmd.getEntityId();
    Long hostId = cmd.getHostId();
    UserVmVO vm = _vmDao.findById(vmId);
    Pair<UserVmVO, Map<VirtualMachineProfile.Param, Object>> vmParamPair = null;
    try {
        vmParamPair = startVirtualMachine(vmId, hostId, additonalParams, deploymentPlannerToUse);
        vm = vmParamPair.first();
        // At this point VM should be in "Running" state
        UserVmVO tmpVm = _vmDao.findById(vm.getId());
        if (!tmpVm.getState().equals(State.Running)) {
            // Some other thread changed state of VM, possibly vmsync
            s_logger.error("VM " + tmpVm + " unexpectedly went to " + tmpVm.getState() + " state");
            throw new ConcurrentOperationException("Failed to deploy VM " + vm);
        }
    } finally {
        updateVmStateForFailedVmCreation(vm.getId(), hostId);
    }
    // Check that the password was passed in and is valid
    VMTemplateVO template = _templateDao.findByIdIncludingRemoved(vm.getTemplateId());
    if (template.getEnablePassword()) {
        // this value is not being sent to the backend; need only for api
        // display purposes
        vm.setPassword((String) vmParamPair.second().get(VirtualMachineProfile.Param.VmPassword));
    }
    return vm;
}
Also used : VMTemplateVO(com.cloud.storage.VMTemplateVO) Map(java.util.Map) LinkedHashMap(java.util.LinkedHashMap) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) HashMap(java.util.HashMap) ConcurrentOperationException(com.cloud.exception.ConcurrentOperationException)

Aggregations

ConcurrentOperationException (com.cloud.exception.ConcurrentOperationException)153 ResourceUnavailableException (com.cloud.exception.ResourceUnavailableException)96 InsufficientCapacityException (com.cloud.exception.InsufficientCapacityException)80 CloudRuntimeException (com.cloud.utils.exception.CloudRuntimeException)71 ResourceAllocationException (com.cloud.exception.ResourceAllocationException)46 InvalidParameterValueException (com.cloud.exception.InvalidParameterValueException)43 ServerApiException (org.apache.cloudstack.api.ServerApiException)32 Account (com.cloud.user.Account)24 NoTransitionException (com.cloud.utils.fsm.NoTransitionException)23 InsufficientAddressCapacityException (com.cloud.exception.InsufficientAddressCapacityException)21 DB (com.cloud.utils.db.DB)21 AsyncJobExecutionContext (org.apache.cloudstack.framework.jobs.AsyncJobExecutionContext)20 VmWorkJobVO (org.apache.cloudstack.framework.jobs.impl.VmWorkJobVO)20 OperationTimedoutException (com.cloud.exception.OperationTimedoutException)17 ConfigurationException (javax.naming.ConfigurationException)17 ArrayList (java.util.ArrayList)16 ActionEvent (com.cloud.event.ActionEvent)14 NetworkRuleConflictException (com.cloud.exception.NetworkRuleConflictException)14 UserVm (com.cloud.uservm.UserVm)14 ManagementServerException (com.cloud.exception.ManagementServerException)13