From daa190b4cba744fed92c26cc242f7734ba58cbfa Mon Sep 17 00:00:00 2001 From: Vijayendra Bhamidipati Date: Thu, 24 May 2012 13:58:44 -0700 Subject: [PATCH] CS-9919: Support for Nexus Swiches (Cisco Vswitches) Description: Deleting the row in cluster_vsm_map after a cluster is deleted, if the cluster type is vmware and the global vswitch nexus config flag is set to true. --- server/src/com/cloud/dc/dao/ClusterVSMMapDao.java | 1 + .../src/com/cloud/dc/dao/ClusterVSMMapDaoImpl.java | 9 ++++++++- .../src/com/cloud/resource/ResourceManagerImpl.java | 12 +++++++++++- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/server/src/com/cloud/dc/dao/ClusterVSMMapDao.java b/server/src/com/cloud/dc/dao/ClusterVSMMapDao.java index 64050699bb0..910e85800bd 100644 --- a/server/src/com/cloud/dc/dao/ClusterVSMMapDao.java +++ b/server/src/com/cloud/dc/dao/ClusterVSMMapDao.java @@ -21,4 +21,5 @@ public interface ClusterVSMMapDao extends GenericDao { ClusterVSMMapVO findByClusterId(long clusterId); List listByVSMId(long vsmId); boolean removeByVsmId(long vsmId); + boolean removeByClusterId(long clusterId); } \ No newline at end of file diff --git a/server/src/com/cloud/dc/dao/ClusterVSMMapDaoImpl.java b/server/src/com/cloud/dc/dao/ClusterVSMMapDaoImpl.java index a82fdda6a34..618d7a45669 100644 --- a/server/src/com/cloud/dc/dao/ClusterVSMMapDaoImpl.java +++ b/server/src/com/cloud/dc/dao/ClusterVSMMapDaoImpl.java @@ -20,7 +20,6 @@ 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.SearchCriteria.Op; import com.cloud.utils.db.Transaction; @Local(value=ClusterVSMMapDao.class) @@ -50,6 +49,14 @@ public class ClusterVSMMapDaoImpl extends GenericDaoBase return true; } + @Override + public boolean removeByClusterId(long clusterId) { + SearchCriteria sc = ClusterSearch.create(); + sc.setParameters("clusterId", clusterId); + this.remove(sc); + return true; + } + @Override public ClusterVSMMapVO findByClusterId(long clusterId) { SearchCriteria sc = ClusterSearch.create(); diff --git a/server/src/com/cloud/resource/ResourceManagerImpl.java b/server/src/com/cloud/resource/ResourceManagerImpl.java index 82b30d641ee..a49f1f68ebe 100755 --- a/server/src/com/cloud/resource/ResourceManagerImpl.java +++ b/server/src/com/cloud/resource/ResourceManagerImpl.java @@ -215,6 +215,8 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma protected VMTemplateDao _templateDao; @Inject protected ConfigurationManager _configMgr; + @Inject + protected ClusterVSMMapDao _clusterVSMMapDao; protected long _nodeId = ManagementServerNode.getManagementServerId(); @@ -919,7 +921,7 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma @DB public boolean deleteCluster(DeleteClusterCmd cmd) { Transaction txn = Transaction.currentTxn(); - try { + try { txn.start(); ClusterVO cluster = _clusterDao.lockRow(cmd.getId(), true); if (cluster == null) { @@ -930,6 +932,8 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma throw new CloudRuntimeException("Cluster: " + cmd.getId() + " does not exist"); } + Hypervisor.HypervisorType hypervisorType = cluster.getHypervisorType(); + List hosts = listAllHostsInCluster(cmd.getId()); if (hosts.size() > 0) { if (s_logger.isDebugEnabled()) { @@ -951,6 +955,12 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma if (_clusterDao.remove(cmd.getId())){ _capacityDao.removeBy(null, null, null, cluster.getId(), null); + // If this cluster is of type vmware, and if the nexus vswitch global parameter setting is turned + // on, remove the row in cluster_vsm_map for this cluster id. + if (hypervisorType == HypervisorType.VMware && + Boolean.parseBoolean(_configDao.getValue(Config.VmwareUseNexusVSwitch.toString()))) { + _clusterVSMMapDao.removeByClusterId(cmd.getId()); + } } txn.commit();