mirror of https://github.com/apache/cloudstack.git
bug 9550: get storagePool to Host mappings before doing processDisconnect because these references are being deleted as a part of processDisconnect call.
status 9550: resolved fixed
This commit is contained in:
parent
074e143986
commit
c8f4dacb0a
File diff suppressed because it is too large
Load Diff
|
|
@ -650,7 +650,7 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag
|
|||
final HashSet<StoragePool> avoidPools = new HashSet<StoragePool>(avoids);
|
||||
|
||||
if (diskOffering != null && diskOffering.isCustomized()) {
|
||||
diskOffering.setDiskSize(size/(1024*1024));
|
||||
diskOffering.setDiskSize(size / (1024 * 1024));
|
||||
}
|
||||
DiskProfile dskCh = null;
|
||||
if (volume.getVolumeType() == Type.ROOT && Storage.ImageFormat.ISO != template.getFormat()) {
|
||||
|
|
@ -1301,18 +1301,18 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag
|
|||
}
|
||||
|
||||
private boolean deletePoolStats(Long poolId) {
|
||||
CapacityVO capacity1 = _capacityDao.findByHostIdType(poolId, CapacityVO.CAPACITY_TYPE_STORAGE);
|
||||
CapacityVO capacity2 = _capacityDao.findByHostIdType(poolId, CapacityVO.CAPACITY_TYPE_STORAGE_ALLOCATED);
|
||||
CapacityVO capacity1 = _capacityDao.findByHostIdType(poolId, CapacityVO.CAPACITY_TYPE_STORAGE);
|
||||
CapacityVO capacity2 = _capacityDao.findByHostIdType(poolId, CapacityVO.CAPACITY_TYPE_STORAGE_ALLOCATED);
|
||||
Transaction txn = Transaction.currentTxn();
|
||||
txn.start();
|
||||
try {
|
||||
if ( capacity1 != null ) {
|
||||
if (capacity1 != null) {
|
||||
_capacityDao.remove(capacity1.getId());
|
||||
}
|
||||
if ( capacity2 != null ) {
|
||||
if (capacity2 != null) {
|
||||
_capacityDao.remove(capacity2.getId());
|
||||
}
|
||||
} finally {
|
||||
} finally {
|
||||
txn.commit();
|
||||
}
|
||||
return true;
|
||||
|
|
@ -1341,7 +1341,6 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean delPoolFromHost(long hostId) {
|
||||
List<StoragePoolHostVO> poolHosts = _poolHostDao.listByHostId(hostId);
|
||||
|
|
@ -1351,7 +1350,7 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag
|
|||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean addPoolToHost(long hostId, StoragePoolVO pool) {
|
||||
s_logger.debug("Adding pool " + pool.getName() + " to host " + hostId);
|
||||
|
|
@ -2481,13 +2480,13 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag
|
|||
|
||||
@Override
|
||||
public void prepare(VirtualMachineProfile<? extends VirtualMachine> vm, DeployDestination dest) throws StorageUnavailableException, InsufficientStorageCapacityException {
|
||||
|
||||
if(dest == null){
|
||||
|
||||
if (dest == null) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("DeployDestination cannot be null, cannot prepare Volumes for the vm: "+ vm);
|
||||
s_logger.debug("DeployDestination cannot be null, cannot prepare Volumes for the vm: " + vm);
|
||||
}
|
||||
throw new CloudRuntimeException("Unable to prepare Volume for vm because DeployDestination is null, vm:"+vm);
|
||||
}
|
||||
throw new CloudRuntimeException("Unable to prepare Volume for vm because DeployDestination is null, vm:" + vm);
|
||||
}
|
||||
List<VolumeVO> vols = _volsDao.findUsableVolumesForInstance(vm.getId());
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Preparing " + vols.size() + " volumes for " + vm);
|
||||
|
|
@ -2496,35 +2495,35 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag
|
|||
List<VolumeVO> recreateVols = new ArrayList<VolumeVO>(vols.size());
|
||||
|
||||
for (VolumeVO vol : vols) {
|
||||
StoragePool assignedPool = null;
|
||||
if(dest.getStorageForDisks() != null){
|
||||
assignedPool = dest.getStorageForDisks().get(vol);
|
||||
}
|
||||
if(assignedPool != null){
|
||||
Volume.State state = vol.getState();
|
||||
if(state == Volume.State.Allocated){
|
||||
recreateVols.add(vol);
|
||||
}else{
|
||||
if (vol.isRecreatable()) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Volume " + vol + " will be recreated on storage pool " + assignedPool + " assigned by deploymentPlanner");
|
||||
}
|
||||
recreateVols.add(vol);
|
||||
}else{
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Volume " + vol + " is not recreatable! Cannot recreate on storagepool: "+assignedPool);
|
||||
}
|
||||
throw new StorageUnavailableException("Volume is not recreatable, Unable to create " + vol, Volume.class, vol.getId());
|
||||
//copy volume usecase - not yet developed.
|
||||
}
|
||||
}
|
||||
}else{
|
||||
if(vol.getPoolId() == null){
|
||||
throw new StorageUnavailableException("Volume has no pool associate and also no storage pool assigned in DeployDestination, Unable to create " + vol, Volume.class, vol.getId());
|
||||
}
|
||||
StoragePoolVO pool = _storagePoolDao.findById(vol.getPoolId());
|
||||
vm.addDisk(new VolumeTO(vol, pool));
|
||||
}
|
||||
StoragePool assignedPool = null;
|
||||
if (dest.getStorageForDisks() != null) {
|
||||
assignedPool = dest.getStorageForDisks().get(vol);
|
||||
}
|
||||
if (assignedPool != null) {
|
||||
Volume.State state = vol.getState();
|
||||
if (state == Volume.State.Allocated) {
|
||||
recreateVols.add(vol);
|
||||
} else {
|
||||
if (vol.isRecreatable()) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Volume " + vol + " will be recreated on storage pool " + assignedPool + " assigned by deploymentPlanner");
|
||||
}
|
||||
recreateVols.add(vol);
|
||||
} else {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Volume " + vol + " is not recreatable! Cannot recreate on storagepool: " + assignedPool);
|
||||
}
|
||||
throw new StorageUnavailableException("Volume is not recreatable, Unable to create " + vol, Volume.class, vol.getId());
|
||||
// copy volume usecase - not yet developed.
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (vol.getPoolId() == null) {
|
||||
throw new StorageUnavailableException("Volume has no pool associate and also no storage pool assigned in DeployDestination, Unable to create " + vol, Volume.class, vol.getId());
|
||||
}
|
||||
StoragePoolVO pool = _storagePoolDao.findById(vol.getPoolId());
|
||||
vm.addDisk(new VolumeTO(vol, pool));
|
||||
}
|
||||
}
|
||||
|
||||
for (VolumeVO vol : recreateVols) {
|
||||
|
|
|
|||
|
|
@ -16,31 +16,27 @@
|
|||
*
|
||||
*/
|
||||
|
||||
package com.cloud.storage.dao;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
package com.cloud.storage.dao;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.cloud.host.Status;
|
||||
import com.cloud.storage.StoragePoolHostVO;
|
||||
import com.cloud.utils.Pair;
|
||||
import com.cloud.utils.db.GenericDao;
|
||||
import com.cloud.utils.db.Transaction;
|
||||
|
||||
public interface StoragePoolHostDao extends GenericDao<StoragePoolHostVO, Long> {
|
||||
public List<StoragePoolHostVO> listByPoolId(long id);
|
||||
|
||||
public List<StoragePoolHostVO> listByHostId(long hostId);
|
||||
|
||||
public StoragePoolHostVO findByPoolHost(long poolId, long hostId);
|
||||
|
||||
List<StoragePoolHostVO> listByHostStatus(long poolId, Status hostStatus);
|
||||
|
||||
List<Pair<Long, Integer>> getDatacenterStoragePoolHostInfo(long dcId, boolean sharedOnly);
|
||||
|
||||
public ArrayList<Long> getPoolIds(Long hostId);
|
||||
|
||||
public void deletePrimaryRecordsForHost(long hostId);
|
||||
|
||||
public void deleteStoragePoolHostDetails(long hostId, long poolId);
|
||||
}
|
||||
public interface StoragePoolHostDao extends GenericDao<StoragePoolHostVO, Long> {
|
||||
public List<StoragePoolHostVO> listByPoolId(long id);
|
||||
|
||||
public List<StoragePoolHostVO> listByHostId(long hostId);
|
||||
|
||||
public StoragePoolHostVO findByPoolHost(long poolId, long hostId);
|
||||
|
||||
List<StoragePoolHostVO> listByHostStatus(long poolId, Status hostStatus);
|
||||
|
||||
List<Pair<Long, Integer>> getDatacenterStoragePoolHostInfo(long dcId, boolean sharedOnly);
|
||||
|
||||
public void deletePrimaryRecordsForHost(long hostId);
|
||||
|
||||
public void deleteStoragePoolHostDetails(long hostId, long poolId);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,8 +16,8 @@
|
|||
*
|
||||
*/
|
||||
|
||||
package com.cloud.storage.dao;
|
||||
|
||||
package com.cloud.storage.dao;
|
||||
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
|
|
@ -31,213 +31,147 @@ import org.apache.log4j.Logger;
|
|||
import com.cloud.host.Status;
|
||||
import com.cloud.storage.StoragePoolHostVO;
|
||||
import com.cloud.utils.Pair;
|
||||
import com.cloud.utils.db.DB;
|
||||
import com.cloud.utils.db.GenericDaoBase;
|
||||
import com.cloud.utils.db.SearchBuilder;
|
||||
import com.cloud.utils.db.SearchCriteria;
|
||||
import com.cloud.utils.db.Transaction;
|
||||
|
||||
@Local(value={StoragePoolHostDao.class})
|
||||
public class StoragePoolHostDaoImpl extends GenericDaoBase<StoragePoolHostVO, Long> implements StoragePoolHostDao {
|
||||
public static final Logger s_logger = Logger.getLogger(StoragePoolHostDaoImpl.class.getName());
|
||||
|
||||
protected final SearchBuilder<StoragePoolHostVO> PoolSearch;
|
||||
protected final SearchBuilder<StoragePoolHostVO> HostSearch;
|
||||
protected final SearchBuilder<StoragePoolHostVO> PoolHostSearch;
|
||||
|
||||
protected static final String HOST_FOR_POOL_SEARCH=
|
||||
"SELECT * FROM storage_pool_host_ref ph, host h where ph.host_id = h.id and ph.pool_id=? and h.status=? ";
|
||||
|
||||
protected static final String STORAGE_POOL_HOST_INFO =
|
||||
"SELECT p.data_center_id, count(ph.host_id) " +
|
||||
" FROM storage_pool p, storage_pool_host_ref ph " +
|
||||
" WHERE p.id = ph.pool_id AND p.data_center_id = ? " +
|
||||
" GROUP by p.data_center_id";
|
||||
|
||||
protected static final String SHARED_STORAGE_POOL_HOST_INFO =
|
||||
"SELECT p.data_center_id, count(ph.host_id) " +
|
||||
" FROM storage_pool p, storage_pool_host_ref ph " +
|
||||
" WHERE p.id = ph.pool_id AND p.data_center_id = ? " +
|
||||
" AND p.pool_type NOT IN ('LVM', 'Filesystem')" +
|
||||
" GROUP by p.data_center_id";
|
||||
|
||||
protected static final String GET_POOL_IDS =
|
||||
"SELECT pool_id "+
|
||||
"FROM storage_pool_host_ref "+
|
||||
"WHERE host_id = ?";
|
||||
|
||||
protected static final String DELETE_PRIMARY_RECORDS =
|
||||
"DELETE "+
|
||||
"FROM storage_pool_host_ref "+
|
||||
"WHERE host_id = ?";
|
||||
|
||||
public StoragePoolHostDaoImpl () {
|
||||
PoolSearch = createSearchBuilder();
|
||||
PoolSearch.and("pool_id", PoolSearch.entity().getPoolId(), SearchCriteria.Op.EQ);
|
||||
PoolSearch.done();
|
||||
|
||||
HostSearch = createSearchBuilder();
|
||||
HostSearch.and("host_id", HostSearch.entity().getHostId(), SearchCriteria.Op.EQ);
|
||||
HostSearch.done();
|
||||
|
||||
PoolHostSearch = createSearchBuilder();
|
||||
PoolHostSearch.and("pool_id", PoolHostSearch.entity().getPoolId(), SearchCriteria.Op.EQ);
|
||||
PoolHostSearch.and("host_id", PoolHostSearch.entity().getHostId(), SearchCriteria.Op.EQ);
|
||||
PoolHostSearch.done();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<StoragePoolHostVO> listByPoolId(long id) {
|
||||
SearchCriteria<StoragePoolHostVO> sc = PoolSearch.create();
|
||||
sc.setParameters("pool_id", id);
|
||||
return listIncludingRemovedBy(sc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<StoragePoolHostVO> listByHostId(long hostId) {
|
||||
SearchCriteria<StoragePoolHostVO> sc = HostSearch.create();
|
||||
sc.setParameters("host_id", hostId);
|
||||
return listIncludingRemovedBy(sc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public StoragePoolHostVO findByPoolHost(long poolId, long hostId) {
|
||||
SearchCriteria<StoragePoolHostVO> sc = PoolHostSearch.create();
|
||||
sc.setParameters("pool_id", poolId);
|
||||
sc.setParameters("host_id", hostId);
|
||||
return findOneIncludingRemovedBy(sc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<StoragePoolHostVO> listByHostStatus(long poolId, Status hostStatus) {
|
||||
Transaction txn = Transaction.currentTxn();
|
||||
PreparedStatement pstmt = null;
|
||||
List<StoragePoolHostVO> result = new ArrayList<StoragePoolHostVO>();
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
String sql = HOST_FOR_POOL_SEARCH;
|
||||
pstmt = txn.prepareStatement(sql);
|
||||
|
||||
pstmt.setLong(1, poolId);
|
||||
pstmt.setString(2, hostStatus.toString());
|
||||
rs = pstmt.executeQuery();
|
||||
while (rs.next()) {
|
||||
// result.add(toEntityBean(rs, false)); TODO: this is buggy in GenericDaoBase for hand constructed queries
|
||||
long id = rs.getLong(1); //ID column
|
||||
result.add(findById(id));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
s_logger.warn("Exception: ", e);
|
||||
} finally {
|
||||
try {
|
||||
if (rs != null) {
|
||||
rs.close();
|
||||
}
|
||||
if (pstmt != null) {
|
||||
pstmt.close();
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Pair<Long, Integer>> getDatacenterStoragePoolHostInfo(long dcId, boolean sharedOnly) {
|
||||
ArrayList<Pair<Long, Integer>> l = new ArrayList<Pair<Long, Integer>>();
|
||||
String sql = sharedOnly?SHARED_STORAGE_POOL_HOST_INFO:STORAGE_POOL_HOST_INFO;
|
||||
Transaction txn = Transaction.currentTxn();;
|
||||
PreparedStatement pstmt = null;
|
||||
try {
|
||||
pstmt = txn.prepareAutoCloseStatement(sql);
|
||||
pstmt.setLong(1, dcId);
|
||||
|
||||
ResultSet rs = pstmt.executeQuery();
|
||||
while(rs.next()) {
|
||||
l.add(new Pair<Long, Integer>(rs.getLong(1), rs.getInt(2)));
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
} catch (Throwable e) {
|
||||
}
|
||||
return l;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns the pool_ids associated with the host
|
||||
* @param hostId -- id for the host
|
||||
* @return -- list of pool ids
|
||||
*/
|
||||
@DB
|
||||
public ArrayList<Long> getPoolIds(Long hostId)
|
||||
{
|
||||
ArrayList<Long> poolIdsList = new ArrayList<Long>();
|
||||
|
||||
Transaction txn = Transaction.currentTxn();
|
||||
PreparedStatement pstmt = null;
|
||||
ResultSet rs = null;
|
||||
try
|
||||
{
|
||||
String sql = GET_POOL_IDS;
|
||||
pstmt = txn.prepareStatement(sql);
|
||||
|
||||
pstmt.setLong(1, hostId);
|
||||
rs = pstmt.executeQuery();
|
||||
while (rs.next())
|
||||
{
|
||||
poolIdsList.add(rs.getLong(1));
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
s_logger.warn("Exception getting pool ids: ", e);
|
||||
}
|
||||
finally
|
||||
{
|
||||
try
|
||||
{
|
||||
if (rs != null)
|
||||
{
|
||||
rs.close();
|
||||
}
|
||||
if (pstmt != null)
|
||||
{
|
||||
pstmt.close();
|
||||
}
|
||||
}
|
||||
catch (SQLException e)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
return poolIdsList;
|
||||
}
|
||||
@Local(value = { StoragePoolHostDao.class })
|
||||
public class StoragePoolHostDaoImpl extends GenericDaoBase<StoragePoolHostVO, Long> implements StoragePoolHostDao {
|
||||
public static final Logger s_logger = Logger.getLogger(StoragePoolHostDaoImpl.class.getName());
|
||||
|
||||
/**
|
||||
* This method deletes the primary records from the host
|
||||
* @param hostId -- id of the host
|
||||
*/
|
||||
public void deletePrimaryRecordsForHost(long hostId)
|
||||
{
|
||||
SearchCriteria<StoragePoolHostVO> sc = HostSearch.create();
|
||||
sc.setParameters("host_id", hostId);
|
||||
Transaction txn = Transaction.currentTxn();
|
||||
txn.start();
|
||||
remove(sc);
|
||||
txn.commit();
|
||||
}
|
||||
protected final SearchBuilder<StoragePoolHostVO> PoolSearch;
|
||||
protected final SearchBuilder<StoragePoolHostVO> HostSearch;
|
||||
protected final SearchBuilder<StoragePoolHostVO> PoolHostSearch;
|
||||
|
||||
protected static final String HOST_FOR_POOL_SEARCH = "SELECT * FROM storage_pool_host_ref ph, host h where ph.host_id = h.id and ph.pool_id=? and h.status=? ";
|
||||
|
||||
protected static final String STORAGE_POOL_HOST_INFO = "SELECT p.data_center_id, count(ph.host_id) " + " FROM storage_pool p, storage_pool_host_ref ph "
|
||||
+ " WHERE p.id = ph.pool_id AND p.data_center_id = ? " + " GROUP by p.data_center_id";
|
||||
|
||||
@Override
|
||||
public void deleteStoragePoolHostDetails(long hostId, long poolId) {
|
||||
SearchCriteria<StoragePoolHostVO> sc = PoolHostSearch.create();
|
||||
sc.setParameters("host_id", hostId);
|
||||
sc.setParameters("pool_id", poolId);
|
||||
Transaction txn = Transaction.currentTxn();
|
||||
txn.start();
|
||||
remove(sc);
|
||||
txn.commit();
|
||||
}
|
||||
}
|
||||
protected static final String SHARED_STORAGE_POOL_HOST_INFO = "SELECT p.data_center_id, count(ph.host_id) " + " FROM storage_pool p, storage_pool_host_ref ph "
|
||||
+ " WHERE p.id = ph.pool_id AND p.data_center_id = ? " + " AND p.pool_type NOT IN ('LVM', 'Filesystem')" + " GROUP by p.data_center_id";
|
||||
|
||||
protected static final String DELETE_PRIMARY_RECORDS = "DELETE " + "FROM storage_pool_host_ref " + "WHERE host_id = ?";
|
||||
|
||||
public StoragePoolHostDaoImpl() {
|
||||
PoolSearch = createSearchBuilder();
|
||||
PoolSearch.and("pool_id", PoolSearch.entity().getPoolId(), SearchCriteria.Op.EQ);
|
||||
PoolSearch.done();
|
||||
|
||||
HostSearch = createSearchBuilder();
|
||||
HostSearch.and("host_id", HostSearch.entity().getHostId(), SearchCriteria.Op.EQ);
|
||||
HostSearch.done();
|
||||
|
||||
PoolHostSearch = createSearchBuilder();
|
||||
PoolHostSearch.and("pool_id", PoolHostSearch.entity().getPoolId(), SearchCriteria.Op.EQ);
|
||||
PoolHostSearch.and("host_id", PoolHostSearch.entity().getHostId(), SearchCriteria.Op.EQ);
|
||||
PoolHostSearch.done();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<StoragePoolHostVO> listByPoolId(long id) {
|
||||
SearchCriteria<StoragePoolHostVO> sc = PoolSearch.create();
|
||||
sc.setParameters("pool_id", id);
|
||||
return listIncludingRemovedBy(sc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<StoragePoolHostVO> listByHostId(long hostId) {
|
||||
SearchCriteria<StoragePoolHostVO> sc = HostSearch.create();
|
||||
sc.setParameters("host_id", hostId);
|
||||
return listIncludingRemovedBy(sc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public StoragePoolHostVO findByPoolHost(long poolId, long hostId) {
|
||||
SearchCriteria<StoragePoolHostVO> sc = PoolHostSearch.create();
|
||||
sc.setParameters("pool_id", poolId);
|
||||
sc.setParameters("host_id", hostId);
|
||||
return findOneIncludingRemovedBy(sc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<StoragePoolHostVO> listByHostStatus(long poolId, Status hostStatus) {
|
||||
Transaction txn = Transaction.currentTxn();
|
||||
PreparedStatement pstmt = null;
|
||||
List<StoragePoolHostVO> result = new ArrayList<StoragePoolHostVO>();
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
String sql = HOST_FOR_POOL_SEARCH;
|
||||
pstmt = txn.prepareStatement(sql);
|
||||
|
||||
pstmt.setLong(1, poolId);
|
||||
pstmt.setString(2, hostStatus.toString());
|
||||
rs = pstmt.executeQuery();
|
||||
while (rs.next()) {
|
||||
// result.add(toEntityBean(rs, false)); TODO: this is buggy in GenericDaoBase for hand constructed queries
|
||||
long id = rs.getLong(1); // ID column
|
||||
result.add(findById(id));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
s_logger.warn("Exception: ", e);
|
||||
} finally {
|
||||
try {
|
||||
if (rs != null) {
|
||||
rs.close();
|
||||
}
|
||||
if (pstmt != null) {
|
||||
pstmt.close();
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Pair<Long, Integer>> getDatacenterStoragePoolHostInfo(long dcId, boolean sharedOnly) {
|
||||
ArrayList<Pair<Long, Integer>> l = new ArrayList<Pair<Long, Integer>>();
|
||||
String sql = sharedOnly ? SHARED_STORAGE_POOL_HOST_INFO : STORAGE_POOL_HOST_INFO;
|
||||
Transaction txn = Transaction.currentTxn();
|
||||
;
|
||||
PreparedStatement pstmt = null;
|
||||
try {
|
||||
pstmt = txn.prepareAutoCloseStatement(sql);
|
||||
pstmt.setLong(1, dcId);
|
||||
|
||||
ResultSet rs = pstmt.executeQuery();
|
||||
while (rs.next()) {
|
||||
l.add(new Pair<Long, Integer>(rs.getLong(1), rs.getInt(2)));
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
} catch (Throwable e) {
|
||||
}
|
||||
return l;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method deletes the primary records from the host
|
||||
*
|
||||
* @param hostId
|
||||
* -- id of the host
|
||||
*/
|
||||
@Override
|
||||
public void deletePrimaryRecordsForHost(long hostId) {
|
||||
SearchCriteria<StoragePoolHostVO> sc = HostSearch.create();
|
||||
sc.setParameters("host_id", hostId);
|
||||
Transaction txn = Transaction.currentTxn();
|
||||
txn.start();
|
||||
remove(sc);
|
||||
txn.commit();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteStoragePoolHostDetails(long hostId, long poolId) {
|
||||
SearchCriteria<StoragePoolHostVO> sc = PoolHostSearch.create();
|
||||
sc.setParameters("host_id", hostId);
|
||||
sc.setParameters("pool_id", poolId);
|
||||
Transaction txn = Transaction.currentTxn();
|
||||
txn.start();
|
||||
remove(sc);
|
||||
txn.commit();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue