From e9d48bfb456293e14b98b37ce0c8cf4aa4c934b8 Mon Sep 17 00:00:00 2001 From: Alex Huang Date: Fri, 26 Aug 2011 10:32:21 -0700 Subject: [PATCH] bug 11275: don't try to reconnect to storage pools not in maintenance mode --- .../com/cloud/storage/dao/StoragePoolDao.java | 2 + .../cloud/storage/dao/StoragePoolDaoImpl.java | 41 +++++++++++++++++++ .../storage/listener/StoragePoolMonitor.java | 2 +- 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/server/src/com/cloud/storage/dao/StoragePoolDao.java b/server/src/com/cloud/storage/dao/StoragePoolDao.java index ce2f25e7d68..7975159850e 100644 --- a/server/src/com/cloud/storage/dao/StoragePoolDao.java +++ b/server/src/com/cloud/storage/dao/StoragePoolDao.java @@ -106,4 +106,6 @@ public interface StoragePoolDao extends GenericDao { List findIfDuplicatePoolsExistByUUID(String uuid); List listByStatus(StoragePoolStatus status); + + List listByUpStatus(long dataCenterId, long podId, Long clusterId); } diff --git a/server/src/com/cloud/storage/dao/StoragePoolDaoImpl.java b/server/src/com/cloud/storage/dao/StoragePoolDaoImpl.java index 468284b237f..4aed541aa79 100644 --- a/server/src/com/cloud/storage/dao/StoragePoolDaoImpl.java +++ b/server/src/com/cloud/storage/dao/StoragePoolDaoImpl.java @@ -49,6 +49,8 @@ public class StoragePoolDaoImpl extends GenericDaoBase imp protected final SearchBuilder AllFieldSearch; protected final SearchBuilder DcPodSearch; protected final SearchBuilder DcPodAnyClusterSearch; + protected final SearchBuilder DcPodStatusSearch; + protected final SearchBuilder DcPodAnyClusterStatusSearch; protected final SearchBuilder DeleteLvmSearch; protected final GenericSearchBuilder MaintenanceCountSearch; @@ -87,6 +89,25 @@ public class StoragePoolDaoImpl extends GenericDaoBase imp DcPodAnyClusterSearch.cp(); DcPodAnyClusterSearch.done(); + DcPodStatusSearch = createSearchBuilder(); + DcPodStatusSearch.and("datacenterId", DcPodStatusSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ); + DcPodStatusSearch.and("status", DcPodStatusSearch.entity().getStatus(), Op.EQ); + DcPodStatusSearch.and().op("nullpod", DcPodStatusSearch.entity().getPodId(), SearchCriteria.Op.NULL); + DcPodStatusSearch.or("podId", DcPodStatusSearch.entity().getPodId(), SearchCriteria.Op.EQ); + DcPodStatusSearch.cp(); + DcPodStatusSearch.and().op("nullcluster", DcPodStatusSearch.entity().getClusterId(), SearchCriteria.Op.NULL); + DcPodStatusSearch.or("cluster", DcPodStatusSearch.entity().getClusterId(), SearchCriteria.Op.EQ); + DcPodStatusSearch.cp(); + DcPodStatusSearch.done(); + + DcPodAnyClusterStatusSearch = createSearchBuilder(); + DcPodAnyClusterStatusSearch.and("datacenterId", DcPodAnyClusterStatusSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ); + DcPodAnyClusterStatusSearch.and("status", DcPodAnyClusterStatusSearch.entity().getStatus(), Op.EQ); + DcPodAnyClusterStatusSearch.and().op("nullpod", DcPodAnyClusterStatusSearch.entity().getPodId(), SearchCriteria.Op.NULL); + DcPodAnyClusterStatusSearch.or("podId", DcPodAnyClusterStatusSearch.entity().getPodId(), SearchCriteria.Op.EQ); + DcPodAnyClusterStatusSearch.cp(); + DcPodAnyClusterStatusSearch.done(); + DeleteLvmSearch = createSearchBuilder(); DeleteLvmSearch.and("ids", DeleteLvmSearch.entity().getId(), SearchCriteria.Op.IN); DeleteLvmSearch.and().op("LVM", DeleteLvmSearch.entity().getPoolType(), SearchCriteria.Op.EQ); @@ -176,6 +197,26 @@ public class StoragePoolDaoImpl extends GenericDaoBase imp sc.setParameters("uuid", uuid); return findOneBy(sc); + } + + @Override + public List listByUpStatus(long dataCenterId, long podId, Long clusterId) { + if (clusterId != null) { + SearchCriteria sc = DcPodSearch.create(); + sc.setParameters("datacenterId", dataCenterId); + sc.setParameters("podId", podId); + + sc.setParameters("cluster", clusterId); + sc.setParameters("status", StoragePoolStatus.Up); + return listBy(sc); + } else { + SearchCriteria sc = DcPodAnyClusterSearch.create(); + sc.setParameters("datacenterId", dataCenterId); + sc.setParameters("podId", podId); + sc.setParameters("status", StoragePoolStatus.Up); + return listBy(sc); + } + } @Override diff --git a/server/src/com/cloud/storage/listener/StoragePoolMonitor.java b/server/src/com/cloud/storage/listener/StoragePoolMonitor.java index 55f151ed16a..0d93d9c0b12 100755 --- a/server/src/com/cloud/storage/listener/StoragePoolMonitor.java +++ b/server/src/com/cloud/storage/listener/StoragePoolMonitor.java @@ -68,7 +68,7 @@ public class StoragePoolMonitor implements Listener { StartupRoutingCommand scCmd = (StartupRoutingCommand)cmd; if (scCmd.getHypervisorType() == HypervisorType.XenServer || scCmd.getHypervisorType() == HypervisorType.KVM || scCmd.getHypervisorType() == HypervisorType.VMware) { - List pools = _poolDao.listBy(host.getDataCenterId(), host.getPodId(), host.getClusterId()); + List pools = _poolDao.listByUpStatus(host.getDataCenterId(), host.getPodId(), host.getClusterId()); for (StoragePoolVO pool : pools) { if (!pool.getPoolType().isShared()) { continue;