bug 11014:

1. if there is no storage pool, don't try to start system VM
2. not use "consoleproxy.restart" as other meaning

status 11014: resolved fixed
This commit is contained in:
anthony 2011-08-08 18:28:34 -07:00
parent 7e1fc2ca1a
commit 455f9f642c
6 changed files with 36 additions and 88 deletions

View File

@ -92,9 +92,12 @@ import com.cloud.service.ServiceOfferingVO;
import com.cloud.service.dao.ServiceOfferingDao;
import com.cloud.servlet.ConsoleProxyServlet;
import com.cloud.storage.StorageManager;
import com.cloud.storage.StoragePoolStatus;
import com.cloud.storage.StoragePoolVO;
import com.cloud.storage.VMTemplateHostVO;
import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
import com.cloud.storage.VMTemplateVO;
import com.cloud.storage.dao.StoragePoolDao;
import com.cloud.storage.dao.VMTemplateDao;
import com.cloud.storage.dao.VMTemplateHostDao;
import com.cloud.user.Account;
@ -190,6 +193,8 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx
ServiceOfferingDao _offeringDao;
@Inject
NetworkOfferingDao _networkOfferingDao;
@Inject
StoragePoolDao _storagePoolDao;
private ConsoleProxyListener _listener;
@ -1556,10 +1561,9 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx
return false;
}
// config var for consoleproxy.restart check
String restart = _configDao.getValue("consoleproxy.restart");
if (restart != null && restart.equalsIgnoreCase("false")) {
s_logger.debug("Capacity scan disabled purposefully, consoleproxy.restart = false. This happens when the primarystorage is in maintenance mode");
List<StoragePoolVO> upPools = _storagePoolDao.listByStatus(StoragePoolStatus.Up);
if (upPools == null || upPools.size() == 0 ) {
s_logger.debug("Skip capacity scan due to there is no Primary Storage UPintenance mode");
return false;
}

View File

@ -4228,9 +4228,9 @@ public class ManagementServerImpl implements ManagementServer {
@Override
public long getPsMaintenanceCount(long podId) {
List<StoragePoolVO> poolsInTransition = new ArrayList<StoragePoolVO>();
poolsInTransition.addAll(_poolDao.listPoolsByStatus(StoragePoolStatus.Maintenance));
poolsInTransition.addAll(_poolDao.listPoolsByStatus(StoragePoolStatus.PrepareForMaintenance));
poolsInTransition.addAll(_poolDao.listPoolsByStatus(StoragePoolStatus.ErrorInMaintenance));
poolsInTransition.addAll(_poolDao.listByStatus(StoragePoolStatus.Maintenance));
poolsInTransition.addAll(_poolDao.listByStatus(StoragePoolStatus.PrepareForMaintenance));
poolsInTransition.addAll(_poolDao.listByStatus(StoragePoolStatus.ErrorInMaintenance));
return poolsInTransition.size();
}

View File

@ -1274,11 +1274,6 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag
} else {
createCapacityEntry(pool);
}
// ensures cpvm is restarted even if the existing pools in system are in maintenance, hence flag below was hitherto in
// false state
_configMgr.updateConfiguration(UserContext.current().getCallerUserId(), "consoleproxy.restart", "true");
return pool;
}
@ -2064,7 +2059,7 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag
// check to see if other ps exist
// if they do, then we can migrate over the system vms to them
// if they dont, then just stop all vms on this one
List<StoragePoolVO> upPools = _storagePoolDao.listPoolsByStatus(StoragePoolStatus.Up);
List<StoragePoolVO> upPools = _storagePoolDao.listByStatus(StoragePoolStatus.Up);
if (upPools == null || upPools.size() == 0) {
restart = false;
@ -2114,11 +2109,6 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag
// if the instance is of type consoleproxy, call the console proxy
if (vmInstance.getType().equals(VirtualMachine.Type.ConsoleProxy)) {
// make sure it is not restarted again, update config to set flag to false
if (!restart) {
_configMgr.updateConfiguration(userId, "consoleproxy.restart", "false");
}
// call the consoleproxymanager
ConsoleProxyVO consoleProxy = _consoleProxyDao.findById(vmInstance.getId());
if (!_vmMgr.advanceStop(consoleProxy, true, user, account)) {
@ -2132,8 +2122,6 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag
}
if (restart) {
// Restore config val for consoleproxy.restart to true
_configMgr.updateConfiguration(userId, "consoleproxy.restart", "true");
if (_vmMgr.advanceStart(consoleProxy, null, user, account) == null) {
String errorMsg = "There was an error starting the console proxy id: " + vmInstance.getId() + " on another storage pool, cannot enable primary storage maintenance";
@ -2366,20 +2354,6 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag
}
}
}
// Restore config val for consoleproxy.restart to true
try {
_configMgr.updateConfiguration(userId, "consoleproxy.restart", "true");
} catch (InvalidParameterValueException e) {
String msg = "Error changing consoleproxy.restart back to false at end of cancel maintenance:";
s_logger.warn(msg, e);
throw new ExecutionException(msg);
} catch (CloudRuntimeException e) {
String msg = "Error changing consoleproxy.restart back to false at end of cancel maintenance:";
s_logger.warn(msg, e);
throw new ExecutionException(msg);
}
return primaryStorage;
} catch (Exception e) {
setPoolStateToError(primaryStorage);

View File

@ -103,6 +103,5 @@ public interface StoragePoolDao extends GenericDao<StoragePoolVO, Long> {
List<StoragePoolVO> findIfDuplicatePoolsExistByUUID(String uuid);
List<StoragePoolVO> listPoolsByStatus(StoragePoolStatus status);
List<StoragePoolVO> listByStatus(StoragePoolStatus status);
}

View File

@ -46,16 +46,10 @@ import com.cloud.utils.exception.CloudRuntimeException;
@Local(value={StoragePoolDao.class}) @DB(txn=false)
public class StoragePoolDaoImpl extends GenericDaoBase<StoragePoolVO, Long> implements StoragePoolDao {
protected final SearchBuilder<StoragePoolVO> NameSearch;
protected final SearchBuilder<StoragePoolVO> UUIDSearch;
protected final SearchBuilder<StoragePoolVO> DatacenterSearch;
protected final SearchBuilder<StoragePoolVO> AllFieldSearch;
protected final SearchBuilder<StoragePoolVO> DcPodSearch;
protected final SearchBuilder<StoragePoolVO> HostSearch;
protected final SearchBuilder<StoragePoolVO> HostPathDcPodSearch;
protected final SearchBuilder<StoragePoolVO> HostPathDcSearch;
protected final SearchBuilder<StoragePoolVO> DcPodAnyClusterSearch;
protected final SearchBuilder<StoragePoolVO> DeleteLvmSearch;
protected final SearchBuilder<StoragePoolVO> StatusSearch;
protected final GenericSearchBuilder<StoragePoolVO, Long> MaintenanceCountSearch;
@ -66,17 +60,15 @@ public class StoragePoolDaoImpl extends GenericDaoBase<StoragePoolVO, Long> imp
private final String FindPoolTagDetails = "SELECT storage_pool_details.name FROM storage_pool_details WHERE pool_id = ? and value = ?";
protected StoragePoolDaoImpl() {
NameSearch = createSearchBuilder();
NameSearch.and("name", NameSearch.entity().getName(), SearchCriteria.Op.EQ);
NameSearch.done();
UUIDSearch = createSearchBuilder();
UUIDSearch.and("uuid", UUIDSearch.entity().getUuid(), SearchCriteria.Op.EQ);
UUIDSearch.done();
DatacenterSearch = createSearchBuilder();
DatacenterSearch.and("datacenterId", DatacenterSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ);
DatacenterSearch.done();
AllFieldSearch = createSearchBuilder();
AllFieldSearch.and("name", AllFieldSearch.entity().getName(), SearchCriteria.Op.EQ);
AllFieldSearch.and("uuid", AllFieldSearch.entity().getUuid(), SearchCriteria.Op.EQ);
AllFieldSearch.and("datacenterId", AllFieldSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ);
AllFieldSearch.and("hostAddress", AllFieldSearch.entity().getHostAddress(), SearchCriteria.Op.EQ);
AllFieldSearch.and("status",AllFieldSearch.entity().getStatus(),SearchCriteria.Op.EQ);
AllFieldSearch.and("path", AllFieldSearch.entity().getPath(), SearchCriteria.Op.EQ);
AllFieldSearch.and("podId", AllFieldSearch.entity().getPodId(), Op.EQ);
AllFieldSearch.done();
DcPodSearch = createSearchBuilder();
DcPodSearch.and("datacenterId", DcPodSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ);
@ -100,28 +92,7 @@ public class StoragePoolDaoImpl extends GenericDaoBase<StoragePoolVO, Long> imp
DeleteLvmSearch.and().op("LVM", DeleteLvmSearch.entity().getPoolType(), SearchCriteria.Op.EQ);
DeleteLvmSearch.or("Filesystem", DeleteLvmSearch.entity().getPoolType(), SearchCriteria.Op.EQ);
DeleteLvmSearch.cp();
DeleteLvmSearch.done();
HostSearch = createSearchBuilder();
HostSearch.and("host", HostSearch.entity().getHostAddress(), SearchCriteria.Op.EQ);
HostSearch.done();
StatusSearch = createSearchBuilder();
StatusSearch.and("status",StatusSearch.entity().getStatus(),SearchCriteria.Op.EQ);
StatusSearch.done();
HostPathDcPodSearch = createSearchBuilder();
HostPathDcPodSearch.and("hostAddress", HostPathDcPodSearch.entity().getHostAddress(), SearchCriteria.Op.EQ);
HostPathDcPodSearch.and("path", HostPathDcPodSearch.entity().getPath(), SearchCriteria.Op.EQ);
HostPathDcPodSearch.and("datacenterId", HostPathDcPodSearch.entity().getDataCenterId(), Op.EQ);
HostPathDcPodSearch.and("podId", HostPathDcPodSearch.entity().getPodId(), Op.EQ);
HostPathDcPodSearch.and("uuid", HostPathDcPodSearch.entity().getUuid(), Op.EQ);
HostPathDcPodSearch.done();
HostPathDcSearch = createSearchBuilder();
HostPathDcSearch.and("hostAddress", HostPathDcSearch.entity().getHostAddress(), SearchCriteria.Op.EQ);
HostPathDcSearch.and("path", HostPathDcSearch.entity().getPath(), SearchCriteria.Op.EQ);
HostPathDcSearch.done();
DeleteLvmSearch.done();
MaintenanceCountSearch = createSearchBuilder(Long.class);
MaintenanceCountSearch.and("pool", MaintenanceCountSearch.entity().getId(), SearchCriteria.Op.EQ);
@ -134,7 +105,7 @@ public class StoragePoolDaoImpl extends GenericDaoBase<StoragePoolVO, Long> imp
@Override
public List<StoragePoolVO> findPoolByName(String name) {
SearchCriteria<StoragePoolVO> sc = NameSearch.create();
SearchCriteria<StoragePoolVO> sc = AllFieldSearch.create();
sc.setParameters("name", name);
return listIncludingRemovedBy(sc);
}
@ -142,7 +113,7 @@ public class StoragePoolDaoImpl extends GenericDaoBase<StoragePoolVO, Long> imp
@Override
public StoragePoolVO findPoolByUUID(String uuid) {
SearchCriteria<StoragePoolVO> sc = UUIDSearch.create();
SearchCriteria<StoragePoolVO> sc = AllFieldSearch.create();
sc.setParameters("uuid", uuid);
return findOneIncludingRemovedBy(sc);
}
@ -151,7 +122,7 @@ public class StoragePoolDaoImpl extends GenericDaoBase<StoragePoolVO, Long> imp
@Override
public List<StoragePoolVO> findIfDuplicatePoolsExistByUUID(String uuid) {
SearchCriteria<StoragePoolVO> sc = UUIDSearch.create();
SearchCriteria<StoragePoolVO> sc = AllFieldSearch.create();
sc.setParameters("uuid", uuid);
return listBy(sc);
}
@ -159,7 +130,7 @@ public class StoragePoolDaoImpl extends GenericDaoBase<StoragePoolVO, Long> imp
@Override
public List<StoragePoolVO> listByDataCenterId(long datacenterId) {
SearchCriteria<StoragePoolVO> sc = DatacenterSearch.create();
SearchCriteria<StoragePoolVO> sc = AllFieldSearch.create();
sc.setParameters("datacenterId", datacenterId);
return listBy(sc);
}
@ -183,21 +154,21 @@ public class StoragePoolDaoImpl extends GenericDaoBase<StoragePoolVO, Long> imp
@Override
public List<StoragePoolVO> listByStorageHost(String hostFqdnOrIp) {
SearchCriteria<StoragePoolVO> sc = HostSearch.create();
sc.setParameters("host", hostFqdnOrIp);
SearchCriteria<StoragePoolVO> sc = AllFieldSearch.create();
sc.setParameters("hostAddress", hostFqdnOrIp);
return listIncludingRemovedBy(sc);
}
@Override
public List<StoragePoolVO> listPoolsByStatus(StoragePoolStatus status){
SearchCriteria<StoragePoolVO> sc = StatusSearch.create();
public List<StoragePoolVO> listByStatus(StoragePoolStatus status){
SearchCriteria<StoragePoolVO> sc = AllFieldSearch.create();
sc.setParameters("status", status);
return listBy(sc);
}
@Override
public StoragePoolVO findPoolByHostPath(long datacenterId, Long podId, String host, String path, String uuid) {
SearchCriteria<StoragePoolVO> sc = HostPathDcPodSearch.create();
SearchCriteria<StoragePoolVO> sc = AllFieldSearch.create();
sc.setParameters("hostAddress", host);
sc.setParameters("path", path);
sc.setParameters("datacenterId", datacenterId);
@ -226,7 +197,7 @@ public class StoragePoolDaoImpl extends GenericDaoBase<StoragePoolVO, Long> imp
@Override
public List<StoragePoolVO> listPoolByHostPath(String host, String path) {
SearchCriteria<StoragePoolVO> sc = HostPathDcSearch.create();
SearchCriteria<StoragePoolVO> sc = AllFieldSearch.create();
sc.setParameters("hostAddress", host);
sc.setParameters("path", path);
@ -235,7 +206,7 @@ public class StoragePoolDaoImpl extends GenericDaoBase<StoragePoolVO, Long> imp
public StoragePoolVO listById(Integer id)
{
SearchCriteria<StoragePoolVO> sc = HostSearch.create();
SearchCriteria<StoragePoolVO> sc = AllFieldSearch.create();
sc.setParameters("id", id);
return findOneIncludingRemovedBy(sc);

View File

@ -2371,7 +2371,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
}
// check if we have available pools for vm deployment
List<StoragePoolVO> availablePools = _storagePoolDao.listPoolsByStatus(StoragePoolStatus.Up);
List<StoragePoolVO> availablePools = _storagePoolDao.listByStatus(StoragePoolStatus.Up);
if (availablePools == null || availablePools.size() < 1) {
throw new StorageUnavailableException("There are no available pools in the UP state for vm deployment", -1);