Search in sources :

Example 36 with CloudRuntimeException

use of com.cloud.legacymodel.exceptions.CloudRuntimeException in project cosmic by MissionCriticalCloud.

the class ResourceManagerImpl method maintain.

@Override
public Host maintain(final PrepareForMaintenanceCmd cmd) {
    final Long hostId = cmd.getId();
    final HostVO host = this._hostDao.findById(hostId);
    if (host == null) {
        s_logger.debug("Unable to find host " + hostId);
        throw new InvalidParameterValueException("Unable to find host with ID: " + hostId + ". Please specify a valid host ID.");
    }
    if (this._hostDao.countBy(host.getClusterId(), ResourceState.PrepareForMaintenance, ResourceState.ErrorInMaintenance) > 0) {
        throw new InvalidParameterValueException("There are other servers in PrepareForMaintenance OR ErrorInMaintenance STATUS in cluster " + host.getClusterId());
    }
    if (this._storageMgr.isLocalStorageActiveOnHost(host.getId())) {
        throw new InvalidParameterValueException("There are active VMs using the host's local storage pool. Please stop all VMs on this host that use local storage.");
    }
    try {
        processResourceEvent(ResourceListener.EVENT_PREPARE_MAINTENANCE_BEFORE, hostId);
        if (maintain(hostId)) {
            processResourceEvent(ResourceListener.EVENT_PREPARE_MAINTENANCE_AFTER, hostId);
            return this._hostDao.findById(hostId);
        } else {
            throw new CloudRuntimeException("Unable to prepare for maintenance host " + hostId);
        }
    } catch (final AgentUnavailableException e) {
        throw new CloudRuntimeException("Unable to prepare for maintenance host " + hostId);
    }
}
Also used : InvalidParameterValueException(com.cloud.legacymodel.exceptions.InvalidParameterValueException) CloudRuntimeException(com.cloud.legacymodel.exceptions.CloudRuntimeException) AgentUnavailableException(com.cloud.legacymodel.exceptions.AgentUnavailableException) StoragePoolHostVO(com.cloud.storage.StoragePoolHostVO) HostVO(com.cloud.host.HostVO)

Example 37 with CloudRuntimeException

use of com.cloud.legacymodel.exceptions.CloudRuntimeException in project cosmic by MissionCriticalCloud.

the class ResourceManagerImpl method doDeleteHost.

@DB
protected boolean doDeleteHost(final long hostId, final boolean isForced, final boolean isForceDeleteStorage) {
    this._accountMgr.getActiveUser(CallContext.current().getCallingUserId());
    // Verify that host exists
    final HostVO host = this._hostDao.findById(hostId);
    if (host == null) {
        throw new InvalidParameterValueException("Host with id " + hostId + " doesn't exist");
    }
    this._accountMgr.checkAccessAndSpecifyAuthority(CallContext.current().getCallingAccount(), host.getDataCenterId());
    if (!isForced && host.getResourceState() != ResourceState.Maintenance) {
        throw new CloudRuntimeException("Host " + host.getUuid() + " cannot be deleted as it is not in maintenance mode. Either put the host into maintenance or perform a forced deletion.");
    }
    // Get storage pool host mappings here because they can be removed as a
    // part of handleDisconnect later
    // TODO: find out the bad boy, what's a buggy logic!
    final List<StoragePoolHostVO> pools = this._storagePoolHostDao.listByHostIdIncludingRemoved(hostId);
    final ResourceStateAdapter.DeleteHostAnswer answer = (ResourceStateAdapter.DeleteHostAnswer) dispatchToStateAdapters(ResourceStateAdapter.Event.DELETE_HOST, false, host, isForced, isForceDeleteStorage);
    if (answer == null) {
        throw new CloudRuntimeException("No resource adapter respond to DELETE_HOST event for " + host.getName() + " id = " + hostId + ", hypervisorType is " + host.getHypervisorType() + ", host type is " + host.getType());
    }
    if (answer.getIsException()) {
        return false;
    }
    if (!answer.getIsContinue()) {
        return true;
    }
    Transaction.execute(new TransactionCallbackNoReturn() {

        @Override
        public void doInTransactionWithoutResult(final TransactionStatus status) {
            ResourceManagerImpl.this._dcDao.releasePrivateIpAddress(host.getPrivateIpAddress(), host.getDataCenterId(), null);
            ResourceManagerImpl.this._agentMgr.disconnectWithoutInvestigation(hostId, Event.Remove);
            // delete host details
            ResourceManagerImpl.this._hostDetailsDao.deleteDetails(hostId);
            // if host is GPU enabled, delete GPU entries
            ResourceManagerImpl.this._hostGpuGroupsDao.deleteGpuEntries(hostId);
            // delete host tags
            ResourceManagerImpl.this._hostTagsDao.deleteTags(hostId);
            host.setGuid(null);
            final Long clusterId = host.getClusterId();
            host.setClusterId(null);
            ResourceManagerImpl.this._hostDao.update(host.getId(), host);
            ResourceManagerImpl.this._hostDao.remove(hostId);
            if (clusterId != null) {
                final List<HostVO> hosts = listAllHostsInCluster(clusterId);
                if (hosts.size() == 0) {
                    final ClusterVO cluster = ResourceManagerImpl.this._clusterDao.findById(clusterId);
                    cluster.setGuid(null);
                    ResourceManagerImpl.this._clusterDao.update(clusterId, cluster);
                }
            }
            try {
                resourceStateTransitTo(host, ResourceState.Event.DeleteHost, ResourceManagerImpl.this._nodeId);
            } catch (final NoTransitionException e) {
                s_logger.debug("Cannot transmit host " + host.getId() + " to Enabled state", e);
            }
            // Delete the associated entries in host ref table
            ResourceManagerImpl.this._storagePoolHostDao.deletePrimaryRecordsForHost(hostId);
            // Make sure any VMs that were marked as being on this host are cleaned up
            final List<VMInstanceVO> vms = ResourceManagerImpl.this._vmDao.listByHostId(hostId);
            for (final VMInstanceVO vm : vms) {
                // this is how VirtualMachineManagerImpl does it when it syncs VM states
                vm.setState(State.Stopped);
                vm.setHostId(null);
                ResourceManagerImpl.this._vmDao.persist(vm);
            }
            // where
            for (final StoragePoolHostVO pool : pools) {
                final Long poolId = pool.getPoolId();
                final StoragePoolVO storagePool = ResourceManagerImpl.this._storagePoolDao.findById(poolId);
                if (storagePool.isLocal() && isForceDeleteStorage) {
                    storagePool.setUuid(null);
                    storagePool.setClusterId(null);
                    ResourceManagerImpl.this._storagePoolDao.update(poolId, storagePool);
                    ResourceManagerImpl.this._storagePoolDao.remove(poolId);
                    s_logger.debug("Local storage id=" + poolId + " is removed as a part of host removal id=" + hostId);
                }
            }
            // delete the op_host_capacity entry
            final Object[] capacityTypes = { Capacity.CAPACITY_TYPE_CPU, Capacity.CAPACITY_TYPE_MEMORY };
            final SearchCriteria<CapacityVO> hostCapacitySC = ResourceManagerImpl.this._capacityDao.createSearchCriteria();
            hostCapacitySC.addAnd("hostOrPoolId", SearchCriteria.Op.EQ, hostId);
            hostCapacitySC.addAnd("capacityType", SearchCriteria.Op.IN, capacityTypes);
            ResourceManagerImpl.this._capacityDao.remove(hostCapacitySC);
            // remove from dedicated resources
            final DedicatedResourceVO dr = ResourceManagerImpl.this._dedicatedDao.findByHostId(hostId);
            if (dr != null) {
                ResourceManagerImpl.this._dedicatedDao.remove(dr.getId());
            }
        }
    });
    return true;
}
Also used : ClusterVO(com.cloud.dc.ClusterVO) StoragePoolHostVO(com.cloud.storage.StoragePoolHostVO) TransactionStatus(com.cloud.utils.db.TransactionStatus) VMInstanceVO(com.cloud.vm.VMInstanceVO) TransactionCallbackNoReturn(com.cloud.utils.db.TransactionCallbackNoReturn) StoragePoolHostVO(com.cloud.storage.StoragePoolHostVO) HostVO(com.cloud.host.HostVO) SearchCriteria(com.cloud.utils.db.SearchCriteria) InvalidParameterValueException(com.cloud.legacymodel.exceptions.InvalidParameterValueException) CloudRuntimeException(com.cloud.legacymodel.exceptions.CloudRuntimeException) NoTransitionException(com.cloud.legacymodel.exceptions.NoTransitionException) StoragePoolVO(com.cloud.storage.datastore.db.StoragePoolVO) ArrayList(java.util.ArrayList) List(java.util.List) DedicatedResourceVO(com.cloud.dc.DedicatedResourceVO) DB(com.cloud.utils.db.DB)

Example 38 with CloudRuntimeException

use of com.cloud.legacymodel.exceptions.CloudRuntimeException in project cosmic by MissionCriticalCloud.

the class ResourceManagerImpl method createHostVO.

protected HostVO createHostVO(final StartupCommand[] cmds, final ServerResource resource, final Map<String, String> details, List<String> hostTags, final ResourceStateAdapter.Event stateEvent) {
    final StartupCommand startup = cmds[0];
    HostVO host = findHostByGuid(startup.getGuid());
    boolean isNew = false;
    if (host == null) {
        host = findHostByGuid(startup.getGuidWithoutResource());
    }
    if (host == null) {
        host = new HostVO(startup.getGuid());
        isNew = true;
    }
    String dataCenter = startup.getDataCenter();
    String pod = startup.getPod();
    final String cluster = startup.getCluster();
    if (pod != null && dataCenter != null && pod.equalsIgnoreCase("default") && dataCenter.equalsIgnoreCase("default")) {
        final List<HostPodVO> pods = this._podDao.listAllIncludingRemoved();
        for (final HostPodVO hpv : pods) {
            if (checkCIDR(hpv, startup.getPrivateIpAddress(), startup.getPrivateNetmask())) {
                pod = hpv.getName();
                dataCenter = this._dcDao.findById(hpv.getDataCenterId()).getName();
                break;
            }
        }
    }
    long dcId;
    DataCenterVO dc = this._dcDao.findByName(dataCenter);
    if (dc == null) {
        try {
            dcId = Long.parseLong(dataCenter);
            dc = this._dcDao.findById(dcId);
        } catch (final NumberFormatException e) {
            s_logger.debug("Cannot parse " + dataCenter + " into Long.");
        }
    }
    if (dc == null) {
        throw new IllegalArgumentException("Host " + startup.getPrivateIpAddress() + " sent incorrect data center: " + dataCenter);
    }
    dcId = dc.getId();
    HostPodVO p = this._podDao.findByName(pod, dcId);
    if (p == null) {
        try {
            final long podId = Long.parseLong(pod);
            p = this._podDao.findById(podId);
        } catch (final NumberFormatException e) {
            s_logger.debug("Cannot parse " + pod + " into Long.");
        }
    }
    /*
         * ResourceStateAdapter is responsible for throwing Exception if Pod is
         * null and non-null is required. for example, XcpServerDiscoever.
         */
    final Long podId = p == null ? null : p.getId();
    Long clusterId = null;
    if (cluster != null) {
        try {
            clusterId = Long.valueOf(cluster);
        } catch (final NumberFormatException e) {
            if (podId != null) {
                ClusterVO c = this._clusterDao.findBy(cluster, podId.longValue());
                if (c == null) {
                    c = new ClusterVO(dcId, podId.longValue(), cluster);
                    c = this._clusterDao.persist(c);
                }
                clusterId = c.getId();
            }
        }
    }
    if (startup instanceof StartupRoutingCommand) {
        final StartupRoutingCommand ssCmd = (StartupRoutingCommand) startup;
        final List<String> implicitHostTags = ssCmd.getHostTags();
        if (!implicitHostTags.isEmpty()) {
            if (hostTags == null) {
                hostTags = this._hostTagsDao.gethostTags(host.getId());
            }
            if (hostTags != null) {
                implicitHostTags.removeAll(hostTags);
                hostTags.addAll(implicitHostTags);
            } else {
                hostTags = implicitHostTags;
            }
        }
    }
    host.setDataCenterId(dc.getId());
    host.setPodId(podId);
    host.setClusterId(clusterId);
    host.setPrivateIpAddress(startup.getPrivateIpAddress());
    host.setPrivateNetmask(startup.getPrivateNetmask());
    host.setPrivateMacAddress(startup.getPrivateMacAddress());
    host.setPublicIpAddress(startup.getPublicIpAddress());
    host.setPublicMacAddress(startup.getPublicMacAddress());
    host.setPublicNetmask(startup.getPublicNetmask());
    host.setStorageIpAddress(startup.getStorageIpAddress());
    host.setStorageMacAddress(startup.getStorageMacAddress());
    host.setStorageNetmask(startup.getStorageNetmask());
    host.setVersion(startup.getVersion());
    host.setName(startup.getName());
    host.setManagementServerId(this._nodeId);
    host.setStorageUrl(startup.getIqn());
    host.setLastPinged(System.currentTimeMillis() >> 10);
    host.setHostTags(hostTags);
    host.setDetails(details);
    if (startup.getStorageIpAddressDeux() != null) {
        host.setStorageIpAddressDeux(startup.getStorageIpAddressDeux());
        host.setStorageMacAddressDeux(startup.getStorageMacAddressDeux());
        host.setStorageNetmaskDeux(startup.getStorageNetmaskDeux());
    }
    if (resource != null) {
        /* null when agent is connected agent */
        host.setResource(resource.getClass().getName());
    }
    host = (HostVO) dispatchToStateAdapters(stateEvent, true, host, cmds, resource, details, hostTags);
    if (host == null) {
        throw new CloudRuntimeException("No resource state adapter response");
    }
    if (isNew) {
        host = this._hostDao.persist(host);
    } else {
        this._hostDao.update(host.getId(), host);
    }
    try {
        resourceStateTransitTo(host, ResourceState.Event.InternalCreated, this._nodeId);
        /* Agent goes to Connecting status */
        this._agentMgr.agentStatusTransitTo(host, Event.AgentConnected, this._nodeId);
    } catch (final Exception e) {
        s_logger.debug("Cannot transmit host " + host.getId() + " to Creating state", e);
        this._agentMgr.agentStatusTransitTo(host, Event.Error, this._nodeId);
        try {
            resourceStateTransitTo(host, ResourceState.Event.Error, this._nodeId);
        } catch (final NoTransitionException e1) {
            s_logger.debug("Cannot transmit host " + host.getId() + "to Error state", e);
        }
    }
    return host;
}
Also used : DataCenterVO(com.cloud.dc.DataCenterVO) ClusterVO(com.cloud.dc.ClusterVO) HostPodVO(com.cloud.dc.HostPodVO) StoragePoolHostVO(com.cloud.storage.StoragePoolHostVO) HostVO(com.cloud.host.HostVO) InvalidParameterValueException(com.cloud.legacymodel.exceptions.InvalidParameterValueException) NoTransitionException(com.cloud.legacymodel.exceptions.NoTransitionException) ResourceInUseException(com.cloud.legacymodel.exceptions.ResourceInUseException) URISyntaxException(java.net.URISyntaxException) SshException(com.cloud.utils.ssh.SshException) AgentUnavailableException(com.cloud.legacymodel.exceptions.AgentUnavailableException) ConfigurationException(javax.naming.ConfigurationException) UnableDeleteHostException(com.cloud.legacymodel.exceptions.UnableDeleteHostException) CloudRuntimeException(com.cloud.legacymodel.exceptions.CloudRuntimeException) DiscoveryException(com.cloud.legacymodel.exceptions.DiscoveryException) StartupCommand(com.cloud.legacymodel.communication.command.startup.StartupCommand) CloudRuntimeException(com.cloud.legacymodel.exceptions.CloudRuntimeException) NoTransitionException(com.cloud.legacymodel.exceptions.NoTransitionException) StartupRoutingCommand(com.cloud.legacymodel.communication.command.startup.StartupRoutingCommand)

Example 39 with CloudRuntimeException

use of com.cloud.legacymodel.exceptions.CloudRuntimeException in project cosmic by MissionCriticalCloud.

the class ResourceManagerImpl method updateHost.

@Override
public Host updateHost(final UpdateHostCmd cmd) throws NoTransitionException {
    final Long hostId = cmd.getId();
    final Long guestOSCategoryId = cmd.getOsCategoryId();
    // Verify that the host exists
    final HostVO host = this._hostDao.findById(hostId);
    if (host == null) {
        throw new InvalidParameterValueException("Host with id " + hostId + " doesn't exist");
    }
    if (cmd.getAllocationState() != null) {
        final ResourceState.Event resourceEvent = ResourceState.Event.toEvent(cmd.getAllocationState());
        if (resourceEvent != ResourceState.Event.Enable && resourceEvent != ResourceState.Event.Disable) {
            throw new CloudRuntimeException("Invalid allocation state:" + cmd.getAllocationState() + ", only Enable/Disable are allowed");
        }
        resourceStateTransitTo(host, resourceEvent, this._nodeId);
    }
    if (guestOSCategoryId != null) {
        // Verify that the guest OS Category exists
        if (!(guestOSCategoryId > 0) || this._guestOSCategoryDao.findById(guestOSCategoryId) == null) {
            throw new InvalidParameterValueException("Please specify a valid guest OS category.");
        }
        final GuestOSCategoryVO guestOSCategory = this._guestOSCategoryDao.findById(guestOSCategoryId);
        final DetailVO guestOSDetail = this._hostDetailsDao.findDetail(hostId, "guest.os.category.id");
        if (guestOSCategory != null && !GuestOSCategoryVO.CATEGORY_NONE.equalsIgnoreCase(guestOSCategory.getName())) {
            // Create/Update an entry for guest.os.category.id
            if (guestOSDetail != null) {
                guestOSDetail.setValue(String.valueOf(guestOSCategory.getId()));
                this._hostDetailsDao.update(guestOSDetail.getId(), guestOSDetail);
            } else {
                final Map<String, String> detail = new HashMap<>();
                detail.put("guest.os.category.id", String.valueOf(guestOSCategory.getId()));
                this._hostDetailsDao.persist(hostId, detail);
            }
        } else {
            // Delete any existing entry for guest.os.category.id
            if (guestOSDetail != null) {
                this._hostDetailsDao.remove(guestOSDetail.getId());
            }
        }
    }
    final List<String> hostTags = cmd.getHostTags();
    if (hostTags != null) {
        if (s_logger.isDebugEnabled()) {
            s_logger.debug("Updating Host Tags to :" + hostTags);
        }
        this._hostTagsDao.persist(hostId, hostTags);
    }
    final String url = cmd.getUrl();
    if (url != null) {
        this._storageMgr.updateSecondaryStorage(cmd.getId(), cmd.getUrl());
    }
    final HostVO updatedHost = this._hostDao.findById(hostId);
    return updatedHost;
}
Also used : InvalidParameterValueException(com.cloud.legacymodel.exceptions.InvalidParameterValueException) DetailVO(com.cloud.host.DetailVO) HashMap(java.util.HashMap) CloudRuntimeException(com.cloud.legacymodel.exceptions.CloudRuntimeException) ResourceState(com.cloud.legacymodel.resource.ResourceState) GuestOSCategoryVO(com.cloud.storage.GuestOSCategoryVO) StoragePoolHostVO(com.cloud.storage.StoragePoolHostVO) HostVO(com.cloud.host.HostVO)

Example 40 with CloudRuntimeException

use of com.cloud.legacymodel.exceptions.CloudRuntimeException in project cosmic by MissionCriticalCloud.

the class ResourceManagerImpl method processResourceEvent.

protected void processResourceEvent(final Integer event, final Object... params) {
    final List<ResourceListener> lst = this._lifeCycleListeners.get(event);
    if (lst == null || lst.size() == 0) {
        return;
    }
    String eventName;
    for (final ResourceListener l : lst) {
        if (event.equals(ResourceListener.EVENT_DISCOVER_BEFORE)) {
            l.processDiscoverEventBefore((Long) params[0], (Long) params[1], (Long) params[2], (URI) params[3], (String) params[4], (String) params[5], (List<String>) params[6]);
            eventName = "EVENT_DISCOVER_BEFORE";
        } else if (event.equals(ResourceListener.EVENT_DISCOVER_AFTER)) {
            l.processDiscoverEventAfter((Map<? extends ServerResource, Map<String, String>>) params[0]);
            eventName = "EVENT_DISCOVER_AFTER";
        } else if (event.equals(ResourceListener.EVENT_DELETE_HOST_BEFORE)) {
            l.processDeleteHostEventBefore((HostVO) params[0]);
            eventName = "EVENT_DELETE_HOST_BEFORE";
        } else if (event.equals(ResourceListener.EVENT_DELETE_HOST_AFTER)) {
            l.processDeletHostEventAfter((HostVO) params[0]);
            eventName = "EVENT_DELETE_HOST_AFTER";
        } else if (event.equals(ResourceListener.EVENT_CANCEL_MAINTENANCE_BEFORE)) {
            l.processCancelMaintenaceEventBefore((Long) params[0]);
            eventName = "EVENT_CANCEL_MAINTENANCE_BEFORE";
        } else if (event.equals(ResourceListener.EVENT_CANCEL_MAINTENANCE_AFTER)) {
            l.processCancelMaintenaceEventAfter((Long) params[0]);
            eventName = "EVENT_CANCEL_MAINTENANCE_AFTER";
        } else if (event.equals(ResourceListener.EVENT_PREPARE_MAINTENANCE_BEFORE)) {
            l.processPrepareMaintenaceEventBefore((Long) params[0]);
            eventName = "EVENT_PREPARE_MAINTENANCE_BEFORE";
        } else if (event.equals(ResourceListener.EVENT_PREPARE_MAINTENANCE_AFTER)) {
            l.processPrepareMaintenaceEventAfter((Long) params[0]);
            eventName = "EVENT_PREPARE_MAINTENANCE_AFTER";
        } else {
            throw new CloudRuntimeException("Unknown resource event:" + event);
        }
        s_logger.debug("Sent resource event " + eventName + " to listener " + l.getClass().getSimpleName());
    }
}
Also used : ResourceListener(com.cloud.common.request.ResourceListener) CloudRuntimeException(com.cloud.legacymodel.exceptions.CloudRuntimeException) ServerResource(com.cloud.common.resource.ServerResource) Map(java.util.Map) HashMap(java.util.HashMap) StoragePoolHostVO(com.cloud.storage.StoragePoolHostVO) HostVO(com.cloud.host.HostVO)

Aggregations

CloudRuntimeException (com.cloud.legacymodel.exceptions.CloudRuntimeException)587 InvalidParameterValueException (com.cloud.legacymodel.exceptions.InvalidParameterValueException)159 ArrayList (java.util.ArrayList)110 DB (com.cloud.utils.db.DB)90 Account (com.cloud.legacymodel.user.Account)84 SQLException (java.sql.SQLException)84 ActionEvent (com.cloud.event.ActionEvent)73 ConfigurationException (javax.naming.ConfigurationException)73 PreparedStatement (java.sql.PreparedStatement)68 HashMap (java.util.HashMap)68 ResourceUnavailableException (com.cloud.legacymodel.exceptions.ResourceUnavailableException)62 TransactionLegacy (com.cloud.utils.db.TransactionLegacy)52 HostVO (com.cloud.host.HostVO)50 ConcurrentOperationException (com.cloud.legacymodel.exceptions.ConcurrentOperationException)50 NoTransitionException (com.cloud.legacymodel.exceptions.NoTransitionException)50 XenAPIException (com.xensource.xenapi.Types.XenAPIException)47 Answer (com.cloud.legacymodel.communication.answer.Answer)45 XmlRpcException (org.apache.xmlrpc.XmlRpcException)45 TransactionStatus (com.cloud.utils.db.TransactionStatus)44 IOException (java.io.IOException)44