mirror of
https://github.com/apache/cloudstack.git
synced 2025-12-16 18:43:26 +01:00
add recreate.systemvm.enabled parameter to control recreating systemvm
This commit is contained in:
parent
ba2b0c3974
commit
481aae1ebc
@ -1025,14 +1025,6 @@ public class ElasticLoadBalancerManagerImpl implements
|
|||||||
throw new UnsupportedOperationException("Unplug nic is not supported for vm of type " + vm.getType());
|
throw new UnsupportedOperationException("Unplug nic is not supported for vm of type " + vm.getType());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean recreateNeeded(
|
|
||||||
VirtualMachineProfile<DomainRouterVO> profile, long hostId, Commands cmds, ReservationContext context) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void prepareStop(VirtualMachineProfile<DomainRouterVO> profile) {
|
public void prepareStop(VirtualMachineProfile<DomainRouterVO> profile) {
|
||||||
}
|
}
|
||||||
|
|||||||
@ -230,6 +230,7 @@ public enum Config {
|
|||||||
SortKeyAlgorithm("Advanced", ManagementServer.class, Boolean.class, "sortkey.algorithm", "false", "Sort algorithm for those who use sort key(template, disk offering, service offering, network offering), true means ascending sort while false means descending sort", null),
|
SortKeyAlgorithm("Advanced", ManagementServer.class, Boolean.class, "sortkey.algorithm", "false", "Sort algorithm for those who use sort key(template, disk offering, service offering, network offering), true means ascending sort while false means descending sort", null),
|
||||||
EnableEC2API("Advanced", ManagementServer.class, Boolean.class, "enable.ec2.api", "false", "enable EC2 API on CloudStack", null),
|
EnableEC2API("Advanced", ManagementServer.class, Boolean.class, "enable.ec2.api", "false", "enable EC2 API on CloudStack", null),
|
||||||
EnableS3API("Advanced", ManagementServer.class, Boolean.class, "enable.s3.api", "false", "enable Amazon S3 API on CloudStack", null),
|
EnableS3API("Advanced", ManagementServer.class, Boolean.class, "enable.s3.api", "false", "enable Amazon S3 API on CloudStack", null),
|
||||||
|
RecreateSystemVmEnabled("Advanced", ManagementServer.class, Boolean.class, "recreate.systemvm.enabled", "false", "If true, will recreate system vm root disk whenever starting system vm", "true,false"),
|
||||||
|
|
||||||
// Ovm
|
// Ovm
|
||||||
OvmPublicNetwork("Hidden", ManagementServer.class, String.class, "ovm.public.network.device", null, "Specify the public bridge on host for public network", null),
|
OvmPublicNetwork("Hidden", ManagementServer.class, String.class, "ovm.public.network.device", null, "Specify the public bridge on host for public network", null),
|
||||||
|
|||||||
@ -368,14 +368,6 @@ public class AgentBasedConsoleProxyManager implements ConsoleProxyManager, Virtu
|
|||||||
throw new UnsupportedOperationException("Unplug nic is not supported for vm of type " + vm.getType());
|
throw new UnsupportedOperationException("Unplug nic is not supported for vm of type " + vm.getType());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean recreateNeeded(
|
|
||||||
VirtualMachineProfile<ConsoleProxyVO> profile, long hostId,
|
|
||||||
Commands cmds, ReservationContext context) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void prepareStop(VirtualMachineProfile<ConsoleProxyVO> profile) {
|
public void prepareStop(VirtualMachineProfile<ConsoleProxyVO> profile) {
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2023,15 +2023,6 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx
|
|||||||
//not supported
|
//not supported
|
||||||
throw new UnsupportedOperationException("Unplug nic is not supported for vm of type " + vm.getType());
|
throw new UnsupportedOperationException("Unplug nic is not supported for vm of type " + vm.getType());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean recreateNeeded(
|
|
||||||
VirtualMachineProfile<ConsoleProxyVO> profile, long hostId,
|
|
||||||
Commands cmds, ReservationContext context) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void prepareStop(VirtualMachineProfile<ConsoleProxyVO> profile) {
|
public void prepareStop(VirtualMachineProfile<ConsoleProxyVO> profile) {
|
||||||
|
|||||||
@ -3386,17 +3386,4 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean recreateNeeded(
|
|
||||||
VirtualMachineProfile<DomainRouterVO> profile, long hostId,
|
|
||||||
Commands cmds, ReservationContext context) {
|
|
||||||
//asssume that if failed to ssh into router, meaning router is crashed
|
|
||||||
CheckSshAnswer answer = (CheckSshAnswer) cmds.getAnswer("checkSsh");
|
|
||||||
if (answer == null || !answer.getResult()) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -180,7 +180,7 @@ public interface StorageManager extends StorageService, Manager {
|
|||||||
void createCapacityEntry(StoragePoolVO storagePool, short capacityType, long allocated);
|
void createCapacityEntry(StoragePoolVO storagePool, short capacityType, long allocated);
|
||||||
|
|
||||||
|
|
||||||
void prepare(VirtualMachineProfile<? extends VirtualMachine> vm, DeployDestination dest, boolean recreate) throws StorageUnavailableException, InsufficientStorageCapacityException, ConcurrentOperationException;
|
void prepare(VirtualMachineProfile<? extends VirtualMachine> vm, DeployDestination dest) throws StorageUnavailableException, InsufficientStorageCapacityException, ConcurrentOperationException;
|
||||||
|
|
||||||
void release(VirtualMachineProfile<? extends VMInstanceVO> profile);
|
void release(VirtualMachineProfile<? extends VMInstanceVO> profile);
|
||||||
|
|
||||||
|
|||||||
@ -358,6 +358,8 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
|
|||||||
private double _storageAllocatedThreshold = 1.0d;
|
private double _storageAllocatedThreshold = 1.0d;
|
||||||
protected BigDecimal _storageOverprovisioningFactor = new BigDecimal(1);
|
protected BigDecimal _storageOverprovisioningFactor = new BigDecimal(1);
|
||||||
|
|
||||||
|
private boolean _recreateSystemVmEnabled;
|
||||||
|
|
||||||
public boolean share(VMInstanceVO vm, List<VolumeVO> vols, HostVO host, boolean cancelPreviousShare) throws StorageUnavailableException {
|
public boolean share(VMInstanceVO vm, List<VolumeVO> vols, HostVO host, boolean cancelPreviousShare) throws StorageUnavailableException {
|
||||||
|
|
||||||
// if pool is in maintenance and it is the ONLY pool available; reject
|
// if pool is in maintenance and it is the ONLY pool available; reject
|
||||||
@ -958,6 +960,9 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
|
|||||||
value = configDao.getValue(Config.CopyVolumeWait.toString());
|
value = configDao.getValue(Config.CopyVolumeWait.toString());
|
||||||
_copyvolumewait = NumbersUtil.parseInt(value, Integer.parseInt(Config.CopyVolumeWait.getDefaultValue()));
|
_copyvolumewait = NumbersUtil.parseInt(value, Integer.parseInt(Config.CopyVolumeWait.getDefaultValue()));
|
||||||
|
|
||||||
|
value = configDao.getValue(Config.RecreateSystemVmEnabled.key());
|
||||||
|
_recreateSystemVmEnabled = Boolean.parseBoolean(value);
|
||||||
|
|
||||||
value = configDao.getValue(Config.StorageTemplateCleanupEnabled.key());
|
value = configDao.getValue(Config.StorageTemplateCleanupEnabled.key());
|
||||||
_templateCleanupEnabled = (value == null ? true : Boolean.parseBoolean(value));
|
_templateCleanupEnabled = (value == null ? true : Boolean.parseBoolean(value));
|
||||||
|
|
||||||
@ -3217,7 +3222,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void prepare(VirtualMachineProfile<? extends VirtualMachine> vm, DeployDestination dest, boolean recreate) throws StorageUnavailableException, InsufficientStorageCapacityException {
|
public void prepare(VirtualMachineProfile<? extends VirtualMachine> vm, DeployDestination dest) throws StorageUnavailableException, InsufficientStorageCapacityException {
|
||||||
|
|
||||||
if (dest == null) {
|
if (dest == null) {
|
||||||
if (s_logger.isDebugEnabled()) {
|
if (s_logger.isDebugEnabled()) {
|
||||||
@ -3229,6 +3234,8 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
|
|||||||
if (s_logger.isDebugEnabled()) {
|
if (s_logger.isDebugEnabled()) {
|
||||||
s_logger.debug("Checking if we need to prepare " + vols.size() + " volumes for " + vm);
|
s_logger.debug("Checking if we need to prepare " + vols.size() + " volumes for " + vm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean recreate = _recreateSystemVmEnabled;
|
||||||
|
|
||||||
List<VolumeVO> recreateVols = new ArrayList<VolumeVO>(vols.size());
|
List<VolumeVO> recreateVols = new ArrayList<VolumeVO>(vols.size());
|
||||||
|
|
||||||
|
|||||||
@ -1469,15 +1469,6 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V
|
|||||||
throw new UnsupportedOperationException("Unplug nic is not supported for vm of type " + vm.getType());
|
throw new UnsupportedOperationException("Unplug nic is not supported for vm of type " + vm.getType());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean recreateNeeded(
|
|
||||||
VirtualMachineProfile<SecondaryStorageVmVO> profile, long hostId,
|
|
||||||
Commands cmds, ReservationContext context) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void prepareStop(VirtualMachineProfile<SecondaryStorageVmVO> profile) {
|
public void prepareStop(VirtualMachineProfile<SecondaryStorageVmVO> profile) {
|
||||||
|
|
||||||
|
|||||||
@ -3620,15 +3620,6 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
|
|||||||
return vm;
|
return vm;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean recreateNeeded(VirtualMachineProfile<UserVmVO> profile,
|
|
||||||
long hostId, Commands cmds, ReservationContext context) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UserVm restoreVM(RestoreVMCmd cmd) {
|
public UserVm restoreVM(RestoreVMCmd cmd) {
|
||||||
// Input validation
|
// Input validation
|
||||||
|
|||||||
@ -69,8 +69,6 @@ public interface VirtualMachineGuru<T extends VirtualMachine> {
|
|||||||
|
|
||||||
void finalizeExpunge(T vm);
|
void finalizeExpunge(T vm);
|
||||||
|
|
||||||
boolean recreateNeeded(VirtualMachineProfile<T> profile, long hostId, Commands cmds, ReservationContext context);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the id parsed from the name. If it cannot parse the name,
|
* Returns the id parsed from the name. If it cannot parse the name,
|
||||||
* then return null. This method is used to determine if this is
|
* then return null. This method is used to determine if this is
|
||||||
@ -82,7 +80,6 @@ public interface VirtualMachineGuru<T extends VirtualMachine> {
|
|||||||
Long convertToId(String vmName);
|
Long convertToId(String vmName);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
<<<<<<< HEAD
|
|
||||||
* Prepare for a nic to be plugged into the network.
|
* Prepare for a nic to be plugged into the network.
|
||||||
* @param network
|
* @param network
|
||||||
* @param nic
|
* @param nic
|
||||||
|
|||||||
@ -657,7 +657,6 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager, Listene
|
|||||||
DataCenterDeployment originalPlan = plan;
|
DataCenterDeployment originalPlan = plan;
|
||||||
|
|
||||||
int retry = _retry;
|
int retry = _retry;
|
||||||
boolean recreate = false;
|
|
||||||
while (retry-- != 0) { // It's != so that it can match -1.
|
while (retry-- != 0) { // It's != so that it can match -1.
|
||||||
|
|
||||||
if(reuseVolume){
|
if(reuseVolume){
|
||||||
@ -752,8 +751,7 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager, Listene
|
|||||||
}
|
}
|
||||||
_networkMgr.prepare(vmProfile, dest, ctx);
|
_networkMgr.prepare(vmProfile, dest, ctx);
|
||||||
if (vm.getHypervisorType() != HypervisorType.BareMetal) {
|
if (vm.getHypervisorType() != HypervisorType.BareMetal) {
|
||||||
_storageMgr.prepare(vmProfile, dest, recreate);
|
_storageMgr.prepare(vmProfile, dest);
|
||||||
recreate = false;
|
|
||||||
}
|
}
|
||||||
//since StorageMgr succeeded in volume creation, reuse Volume for further tries until current cluster has capacity
|
//since StorageMgr succeeded in volume creation, reuse Volume for further tries until current cluster has capacity
|
||||||
if(!reuseVolume){
|
if(!reuseVolume){
|
||||||
@ -813,11 +811,7 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager, Listene
|
|||||||
_haMgr.scheduleStop(vm, destHostId, WorkType.ForceStop);
|
_haMgr.scheduleStop(vm, destHostId, WorkType.ForceStop);
|
||||||
throw new ExecutionException("Unable to stop " + vm + " so we are unable to retry the start operation");
|
throw new ExecutionException("Unable to stop " + vm + " so we are unable to retry the start operation");
|
||||||
}
|
}
|
||||||
if (vmGuru.recreateNeeded(vmProfile, destHostId, cmds, ctx)) {
|
throw new ExecutionException("Unable to start " + vm + " due to error in finalizeStart, not retrying");
|
||||||
recreate = true;
|
|
||||||
} else {
|
|
||||||
throw new ExecutionException("Unable to start " + vm + " due to error in finalizeStart, not retrying");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
s_logger.info("Unable to start VM on " + dest.getHost() + " due to " + (startAnswer == null ? " no start answer" : startAnswer.getDetails()));
|
s_logger.info("Unable to start VM on " + dest.getHost() + " due to " + (startAnswer == null ? " no start answer" : startAnswer.getDetails()));
|
||||||
|
|||||||
@ -292,14 +292,6 @@ public class MockUserVmManagerImpl implements UserVmManager, UserVmService, Mana
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean recreateNeeded(VirtualMachineProfile<UserVmVO> profile,
|
|
||||||
long hostId, Commands cmds, ReservationContext context) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UserVm startVirtualMachine(DeployVMCmd cmd) throws InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException {
|
public UserVm startVirtualMachine(DeployVMCmd cmd) throws InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user