mirror of
https://github.com/apache/cloudstack.git
synced 2025-11-02 11:52:28 +01:00
bug 10260: propagate ha and deployment planner fixes
This commit is contained in:
parent
1561275838
commit
1ac7276942
@ -609,53 +609,53 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager, Listene
|
|||||||
try {
|
try {
|
||||||
Journal journal = start.second().getJournal();
|
Journal journal = start.second().getJournal();
|
||||||
|
|
||||||
// edit plan if this vm's ROOT volume is in READY state already
|
|
||||||
List<VolumeVO> vols = _volsDao.findReadyRootVolumesByInstance(vm.getId());
|
|
||||||
|
|
||||||
for (VolumeVO vol : vols) {
|
|
||||||
// make sure if the templateId is unchanged. If it is changed, let planner
|
|
||||||
// reassign pool for the volume even if it ready.
|
|
||||||
Long volTemplateId = vol.getTemplateId();
|
|
||||||
if (volTemplateId != null && volTemplateId.longValue() != template.getId()) {
|
|
||||||
if (s_logger.isDebugEnabled()) {
|
|
||||||
s_logger.debug(vol + " of " + vm + " is READY, but template ids don't match, let the planner reassign a new pool");
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
StoragePoolVO pool = _storagePoolDao.findById(vol.getPoolId());
|
|
||||||
if (!pool.isInMaintenance()) {
|
|
||||||
if (s_logger.isDebugEnabled()) {
|
|
||||||
s_logger.debug("Root volume is ready, need to place VM in volume's cluster");
|
|
||||||
}
|
|
||||||
long rootVolDcId = pool.getDataCenterId();
|
|
||||||
Long rootVolPodId = pool.getPodId();
|
|
||||||
Long rootVolClusterId = pool.getClusterId();
|
|
||||||
if(planToDeploy != null){
|
|
||||||
Long clusterIdSpecified = planToDeploy.getClusterId();
|
|
||||||
if(clusterIdSpecified != null && rootVolClusterId != null){
|
|
||||||
if(rootVolClusterId.longValue() != clusterIdSpecified.longValue()){
|
|
||||||
//cannot satisfy the plan passed in to the planner
|
|
||||||
if (s_logger.isDebugEnabled()) {
|
|
||||||
s_logger.debug("Cannot satisfy the deployment plan passed in since the ready Root volume is in different cluster. volume's cluster: "+rootVolClusterId + ", cluster specified: "+clusterIdSpecified);
|
|
||||||
}
|
|
||||||
throw new ResourceUnavailableException("Root volume is ready in different cluster, Deployment plan provided cannot be satisfied, unable to create a deployment for " + vm, Cluster.class, clusterIdSpecified);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
plan = new DataCenterDeployment(planToDeploy.getDataCenterId(), planToDeploy.getPodId(), planToDeploy.getClusterId(), planToDeploy.getHostId(), vol.getPoolId());
|
|
||||||
}else{
|
|
||||||
plan = new DataCenterDeployment(rootVolDcId, rootVolPodId, rootVolClusterId, null, vol.getPoolId());
|
|
||||||
if (s_logger.isDebugEnabled()) {
|
|
||||||
s_logger.debug(vol + " is READY, changing deployment plan to use this pool's dcId: " + rootVolDcId + " , podId: " + rootVolPodId + " , and clusterId: " + rootVolClusterId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ExcludeList avoids = new ExcludeList();
|
ExcludeList avoids = new ExcludeList();
|
||||||
int retry = _retry;
|
int retry = _retry;
|
||||||
while (retry-- != 0) { // It's != so that it can match -1.
|
while (retry-- != 0) { // It's != so that it can match -1.
|
||||||
|
// edit plan if this vm's ROOT volume is in READY state already
|
||||||
|
// edit plan if this vm's ROOT volume is in READY state already
|
||||||
|
List<VolumeVO> vols = _volsDao.findReadyRootVolumesByInstance(vm.getId());
|
||||||
|
|
||||||
|
for (VolumeVO vol : vols) {
|
||||||
|
// make sure if the templateId is unchanged. If it is changed, let planner
|
||||||
|
// reassign pool for the volume even if it ready.
|
||||||
|
Long volTemplateId = vol.getTemplateId();
|
||||||
|
if (volTemplateId != null && volTemplateId.longValue() != template.getId()) {
|
||||||
|
if (s_logger.isDebugEnabled()) {
|
||||||
|
s_logger.debug(vol + " of " + vm + " is READY, but template ids don't match, let the planner reassign a new pool");
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
StoragePoolVO pool = _storagePoolDao.findById(vol.getPoolId());
|
||||||
|
if (!pool.isInMaintenance()) {
|
||||||
|
if (s_logger.isDebugEnabled()) {
|
||||||
|
s_logger.debug("Root volume is ready, need to place VM in volume's cluster");
|
||||||
|
}
|
||||||
|
long rootVolDcId = pool.getDataCenterId();
|
||||||
|
Long rootVolPodId = pool.getPodId();
|
||||||
|
Long rootVolClusterId = pool.getClusterId();
|
||||||
|
if(planToDeploy != null){
|
||||||
|
Long clusterIdSpecified = planToDeploy.getClusterId();
|
||||||
|
if(clusterIdSpecified != null && rootVolClusterId != null){
|
||||||
|
if(rootVolClusterId.longValue() != clusterIdSpecified.longValue()){
|
||||||
|
//cannot satisfy the plan passed in to the planner
|
||||||
|
if (s_logger.isDebugEnabled()) {
|
||||||
|
s_logger.debug("Cannot satisfy the deployment plan passed in since the ready Root volume is in different cluster. volume's cluster: "+rootVolClusterId + ", cluster specified: "+clusterIdSpecified);
|
||||||
|
}
|
||||||
|
throw new ResourceUnavailableException("Root volume is ready in different cluster, Deployment plan provided cannot be satisfied, unable to create a deployment for " + vm, Cluster.class, clusterIdSpecified);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
plan = new DataCenterDeployment(planToDeploy.getDataCenterId(), planToDeploy.getPodId(), planToDeploy.getClusterId(), planToDeploy.getHostId(), vol.getPoolId());
|
||||||
|
}else{
|
||||||
|
plan = new DataCenterDeployment(rootVolDcId, rootVolPodId, rootVolClusterId, null, vol.getPoolId());
|
||||||
|
if (s_logger.isDebugEnabled()) {
|
||||||
|
s_logger.debug(vol + " is READY, changing deployment plan to use this pool's dcId: " + rootVolDcId + " , podId: " + rootVolPodId + " , and clusterId: " + rootVolClusterId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
VirtualMachineProfileImpl<T> vmProfile = new VirtualMachineProfileImpl<T>(vm, template, offering, account, params);
|
VirtualMachineProfileImpl<T> vmProfile = new VirtualMachineProfileImpl<T>(vm, template, offering, account, params);
|
||||||
DeployDestination dest = null;
|
DeployDestination dest = null;
|
||||||
for (DeploymentPlanner planner : _planners) {
|
for (DeploymentPlanner planner : _planners) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user