You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by hu...@apache.org on 2012/10/12 14:15:51 UTC

[12/16] git commit: Persist the uuid of the logical router once created

Persist the uuid of the logical router once created

Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/dd68a003
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/dd68a003
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/dd68a003

Branch: refs/heads/master
Commit: dd68a0033858a03138d3e9d035843afb4d4d65a9
Parents: af77912
Author: Hugo Trippaers <ht...@schubergphilis.com>
Authored: Thu Sep 27 22:16:11 2012 -0700
Committer: Hugo Trippaers <ht...@schubergphilis.com>
Committed: Thu Sep 27 22:16:11 2012 -0700

----------------------------------------------------------------------
 client/tomcatconf/components.xml.in                |    1 +
 .../cloud/network/NiciraNvpRouterMappingVO.java    |   79 +++++++++++++++
 .../network/dao/NiciraNvpRouterMappingDao.java     |    9 ++
 .../network/dao/NiciraNvpRouterMappingDaoImpl.java |   30 ++++++
 .../cloud/network/element/NiciraNvpElement.java    |   36 +++++--
 setup/db/create-schema.sql                         |    9 ++
 6 files changed, 154 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/dd68a003/client/tomcatconf/components.xml.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/components.xml.in b/client/tomcatconf/components.xml.in
index 5730b83..2953eb7 100755
--- a/client/tomcatconf/components.xml.in
+++ b/client/tomcatconf/components.xml.in
@@ -179,6 +179,7 @@ under the License.
         <dao name="OvsTunnelAccountDao" class="com.cloud.network.ovs.dao.OvsTunnelNetworkDaoImpl" singleton="false"/>
         <dao name="NiciraNvpDao" class="com.cloud.network.dao.NiciraNvpDaoImpl" singleton="false"/>
         <dao name="NiciraNvpNicMappingDao" class="com.cloud.network.dao.NiciraNvpNicMappingDaoImpl" singleton="false"/>
+        <dao name="NiciraNvpRouterMappingDao" class="com.cloud.network.dao.NiciraNvpRouterMappingDaoImpl" singleton="false"/>
         <dao name="ElasticLbVmMapDao" class="com.cloud.network.lb.dao.ElasticLbVmMapDaoImpl" singleton="false"/>
     </management-server>
 

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/dd68a003/plugins/network-elements/nicira-nvp/src/com/cloud/network/NiciraNvpRouterMappingVO.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/NiciraNvpRouterMappingVO.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/NiciraNvpRouterMappingVO.java
new file mode 100644
index 0000000..037ba69
--- /dev/null
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/NiciraNvpRouterMappingVO.java
@@ -0,0 +1,79 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+// 
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.network;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name="nicira_nvp_router_map")
+public class NiciraNvpRouterMappingVO {
+	//FIXME the ddl for this table should be in one of the upgrade scripts
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	private long id;
+	
+	@Column(name="logicalrouter_uuid")
+	private String logicalRouterUuid;
+	
+	@Column(name="network_id")
+	private long networkId;
+	
+	public NiciraNvpRouterMappingVO() {
+	}
+
+	public NiciraNvpRouterMappingVO(String logicalRouterUuid, long networkId) {
+		this.logicalRouterUuid = logicalRouterUuid;
+		this.networkId = networkId;
+	}
+	
+	public NiciraNvpRouterMappingVO(long id, String logicalRouterUuid, long networkId) {
+		this.id = id;
+		this.logicalRouterUuid = logicalRouterUuid;
+		this.networkId = networkId;
+	}
+
+	public long getId() {
+		return id;
+	}
+
+	public void setId(long id) {
+		this.id = id;
+	}
+
+	public String getLogicalRouterUuid() {
+		return logicalRouterUuid;
+	}
+
+	public void setLogicalRouterUuid(String logicalRouterUuid) {
+		this.logicalRouterUuid = logicalRouterUuid;
+	}
+
+	public long getNetworkId() {
+		return networkId;
+	}
+
+	public void setNetworkId(long networkId) {
+		this.networkId = networkId;
+	}
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/dd68a003/plugins/network-elements/nicira-nvp/src/com/cloud/network/dao/NiciraNvpRouterMappingDao.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/dao/NiciraNvpRouterMappingDao.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/dao/NiciraNvpRouterMappingDao.java
new file mode 100644
index 0000000..6fae52e
--- /dev/null
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/dao/NiciraNvpRouterMappingDao.java
@@ -0,0 +1,9 @@
+package com.cloud.network.dao;
+
+import com.cloud.network.NiciraNvpRouterMappingVO;
+import com.cloud.utils.db.GenericDao;
+
+public interface NiciraNvpRouterMappingDao extends GenericDao<NiciraNvpRouterMappingVO, Long> {
+
+	public NiciraNvpRouterMappingVO findByNetworkIdI(long id);
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/dd68a003/plugins/network-elements/nicira-nvp/src/com/cloud/network/dao/NiciraNvpRouterMappingDaoImpl.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/dao/NiciraNvpRouterMappingDaoImpl.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/dao/NiciraNvpRouterMappingDaoImpl.java
new file mode 100644
index 0000000..303b760
--- /dev/null
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/dao/NiciraNvpRouterMappingDaoImpl.java
@@ -0,0 +1,30 @@
+package com.cloud.network.dao;
+
+import javax.ejb.Local;
+
+import com.cloud.network.NiciraNvpRouterMappingVO;
+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;
+
+@Local(value=NiciraNvpRouterMappingDao.class)
+public class NiciraNvpRouterMappingDaoImpl extends GenericDaoBase<NiciraNvpRouterMappingVO, Long> implements NiciraNvpRouterMappingDao {
+
+	protected final SearchBuilder<NiciraNvpRouterMappingVO> networkSearch;
+	
+	public NiciraNvpRouterMappingDaoImpl() {
+		networkSearch = createSearchBuilder();
+		networkSearch.and("network_id", networkSearch.entity().getNetworkId(), Op.EQ);
+		networkSearch.done();
+	}
+	
+	@Override
+	public NiciraNvpRouterMappingVO findByNetworkIdI(long id) {
+		SearchCriteria<NiciraNvpRouterMappingVO> sc = networkSearch.create();
+		sc.setParameters("network_id", id);
+		return findOneBy(sc);
+	}
+	
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/dd68a003/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java
index d781d03..9a220dc 100644
--- a/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java
@@ -90,6 +90,7 @@ import com.cloud.network.Networks.BroadcastDomainType;
 import com.cloud.network.NetworkManager;
 import com.cloud.network.NiciraNvpDeviceVO;
 import com.cloud.network.NiciraNvpNicMappingVO;
+import com.cloud.network.NiciraNvpRouterMappingVO;
 import com.cloud.network.PhysicalNetworkServiceProvider;
 import com.cloud.network.PhysicalNetworkVO;
 import com.cloud.network.PublicIpAddress;
@@ -98,6 +99,7 @@ import com.cloud.network.dao.NetworkDao;
 import com.cloud.network.dao.NetworkServiceMapDao;
 import com.cloud.network.dao.NiciraNvpDao;
 import com.cloud.network.dao.NiciraNvpNicMappingDao;
+import com.cloud.network.dao.NiciraNvpRouterMappingDao;
 import com.cloud.network.dao.PhysicalNetworkDao;
 import com.cloud.network.dao.PhysicalNetworkServiceProviderDao;
 import com.cloud.network.dao.PhysicalNetworkServiceProviderVO;
@@ -154,6 +156,8 @@ public class NiciraNvpElement extends AdapterBase implements
 	@Inject
 	NiciraNvpNicMappingDao _niciraNvpNicMappingDao;
 	@Inject
+	NiciraNvpRouterMappingDao _niciraNvpRouterMappingDao;
+	@Inject
 	NetworkDao _networkDao;
 	@Inject
 	NetworkManager _networkManager;
@@ -280,7 +284,11 @@ public class NiciraNvpElement extends AdapterBase implements
 							+ network.getDisplayText());
 					return false;
 				}
-
+				
+				// Store the uuid so we can easily find it during cleanup
+				NiciraNvpRouterMappingVO routermapping = 
+						new NiciraNvpRouterMappingVO(cmd.getLogicalSwitchUuid(), network.getId());
+				_niciraNvpRouterMappingDao.persist(routermapping);
 			}
 		} finally {
 			if (lock != null) {
@@ -446,15 +454,23 @@ public class NiciraNvpElement extends AdapterBase implements
 
 			// Deleting the LogicalRouter will also take care of all provisioned
 			// nat rules.
-			/*
-			 * DeleteLogicalRouterCommand cmd = new
-			 * DeleteLogicalRouterCommand(""); DeleteLogicalRouterAnswer answer
-			 * = (DeleteLogicalRouterAnswer)
-			 * _agentMgr.easySend(niciraNvpHost.getId(), cmd); if
-			 * (answer.getResult() == false) {
-			 * s_logger.error("Failed to delete LogicalRouter for network " +
-			 * network.getDisplayText()); return false; }
-			 */}
+			NiciraNvpRouterMappingVO routermapping = _niciraNvpRouterMappingDao
+					.findByNetworkIdI(network.getId());
+			if (routermapping == null) {
+				s_logger.error("No logical router uuid found for network "
+						+ network.getDisplayText());
+				return false;
+			}
+
+			DeleteLogicalRouterCommand cmd = new DeleteLogicalRouterCommand(routermapping.getLogicalRouterUuid());
+			DeleteLogicalRouterAnswer answer = 
+					(DeleteLogicalRouterAnswer) _agentMgr.easySend(niciraNvpHost.getId(), cmd);
+			if (answer.getResult() == false) {
+				s_logger.error("Failed to delete LogicalRouter for network "
+						+ network.getDisplayText());
+				return false;
+			}
+		}
 
 		return true;
 	}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/dd68a003/setup/db/create-schema.sql
----------------------------------------------------------------------
diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql
index 5b6dc04..53e5f08 100755
--- a/setup/db/create-schema.sql
+++ b/setup/db/create-schema.sql
@@ -146,6 +146,7 @@ DROP TABLE IF EXISTS `cloud`.`s2s_vpn_gateway`;
 DROP TABLE IF EXISTS `cloud`.`s2s_vpn_connection`;
 DROP TABLE IF EXISTS `cloud`,`external_nicira_nvp_devices`;
 DROP TABLE IF EXISTS `cloud`,`nicira_nvp_nic_map`;
+DROP TABLE IF EXISTS `cloud`,`nicira_nvp_router_map`;
 
 CREATE TABLE `cloud`.`version` (
   `id` bigint unsigned NOT NULL UNIQUE AUTO_INCREMENT COMMENT 'id',
@@ -2370,5 +2371,13 @@ CREATE TABLE `cloud`.`nicira_nvp_nic_map` (
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
+CREATE TABLE `cloud`.`nicira_nvp_router_map` (
+  `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
+  `logicalrouter_uuid` varchar(255) NOT NULL UNIQUE COMMENT 'nicira uuid of logical router',
+  `network_id` bigint unsigned NOT NULL UNIQUE COMMENT 'cloudstack id of the network',
+  PRIMARY KEY (`id`),
+  CONSTRAINT `fk_nicira_nvp_router_map__network_id` FOREIGN KEY (`network_id`) REFERENCES `networks`(`id`) ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
 SET foreign_key_checks = 1;