You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ah...@apache.org on 2013/06/27 22:57:32 UTC

[30/50] [abbrv] git commit: updated refs/heads/vmsync to 3c2aa18

CLOUDSTACK-3214: transferring portable IP across zones with enableStatic
NAT does not work

making an exception for portabe IP, so that if the current datacenter with
portable IP is associated is different from destiantion data center

also on transfer on to new zone, transfer the portable ip association to
new data center, physical network id's


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

Branch: refs/heads/vmsync
Commit: ff167134e45a3321dd5d9a3f45e3f9621b16d759
Parents: 1c102a0
Author: Murali Reddy <mu...@gmail.com>
Authored: Wed Jun 26 19:27:09 2013 +0530
Committer: Murali Reddy <mu...@gmail.com>
Committed: Wed Jun 26 19:29:55 2013 +0530

----------------------------------------------------------------------
 engine/schema/src/com/cloud/dc/VlanVO.java      |  4 ++++
 .../src/com/cloud/network/dao/IPAddressVO.java  |  4 ++++
 .../com/cloud/network/NetworkManagerImpl.java   | 21 +++++++++++++++++++-
 .../cloud/network/rules/RulesManagerImpl.java   |  5 ++++-
 4 files changed, 32 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ff167134/engine/schema/src/com/cloud/dc/VlanVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/dc/VlanVO.java b/engine/schema/src/com/cloud/dc/VlanVO.java
index af6b5fc..a2f7a9c 100644
--- a/engine/schema/src/com/cloud/dc/VlanVO.java
+++ b/engine/schema/src/com/cloud/dc/VlanVO.java
@@ -120,6 +120,10 @@ public class VlanVO implements Vlan {
 		return dataCenterId;
 	}
 
+    public void setDataCenterId(long dcId) {
+        this.dataCenterId = dcId;
+    }
+
 	@Override
     public String getIpRange() {
 		return ipRange;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ff167134/engine/schema/src/com/cloud/network/dao/IPAddressVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/network/dao/IPAddressVO.java b/engine/schema/src/com/cloud/network/dao/IPAddressVO.java
index 5eb2500..c5f17504 100644
--- a/engine/schema/src/com/cloud/network/dao/IPAddressVO.java
+++ b/engine/schema/src/com/cloud/network/dao/IPAddressVO.java
@@ -158,6 +158,10 @@ public class IPAddressVO implements IpAddress {
 	    return dataCenterId;
 	}
 
+    public void setDataCenterId(long dcId) {
+        this.dataCenterId = dcId;
+    }
+
 	@Override
     public Ip getAddress() {
 		return address;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ff167134/server/src/com/cloud/network/NetworkManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java
index 8e90cb7..cb3cbbf 100755
--- a/server/src/com/cloud/network/NetworkManagerImpl.java
+++ b/server/src/com/cloud/network/NetworkManagerImpl.java
@@ -1125,7 +1125,6 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
         }
 
         Transaction txn = Transaction.currentTxn();
-        txn.start();
 
         assert(isPortableIpTransferableFromNetwork(ipAddrId, currentNetworkId));
 
@@ -1135,8 +1134,27 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
             disassociatePortableIPToGuestNetwork(ipAddrId, currentNetworkId);
         }
 
+        if (srcNetwork.getDataCenterId() != dstNetwork.getDataCenterId()) {
+            // portable IP need to be transferred across the zones, so mark the entry corresponding to portable ip
+            // in user_ip_address as provisioned in destination data center
+            txn.start();
+            ip.setDataCenterId(dstNetwork.getDataCenterId());
+            ip.setPhysicalNetworkId(dstNetwork.getPhysicalNetworkId());
+            _ipAddressDao.update(ipAddrId, ip);
+
+            VlanVO vlan = _vlanDao.findById(ip.getVlanId());
+            vlan.setPhysicalNetworkId(dstNetwork.getPhysicalNetworkId());
+            vlan.setNetworkId(newNetworkId);
+            vlan.setDataCenterId(dstNetwork.getDataCenterId());
+            _vlanDao.update(ip.getVlanId(), vlan);
+            txn.commit();
+        }
+
         associatePortableIPToGuestNetwork(ipAddrId, newNetworkId, false);
 
+
+        txn.start();
+
         if (dstNetwork.getVpcId() != null) {
             ip.setVpcId(dstNetwork.getVpcId());
         } else {
@@ -1144,6 +1162,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
         }
 
         _ipAddressDao.update(ipAddrId, ip);
+
         txn.commit();
         ActionEventUtils.onActionEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, Domain.ROOT_DOMAIN,
                 EventTypes.EVENT_PORTABLE_IP_TRANSFER, "Portable IP associated is transferred from network "

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ff167134/server/src/com/cloud/network/rules/RulesManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/rules/RulesManagerImpl.java b/server/src/com/cloud/network/rules/RulesManagerImpl.java
index bcda32d..0f733fb 100755
--- a/server/src/com/cloud/network/rules/RulesManagerImpl.java
+++ b/server/src/com/cloud/network/rules/RulesManagerImpl.java
@@ -159,7 +159,10 @@ public class RulesManagerImpl extends ManagerBase implements RulesManager, Rules
 
         // validate that userVM is in the same availability zone as the IP address
         if (ipAddress.getDataCenterId() != userVm.getDataCenterId()) {
-            throw new InvalidParameterValueException("Unable to create ip forwarding rule, IP address " + ipAddress + " is not in the same availability zone as virtual machine " + userVm.toString());
+            //make an exception for portable IP
+            if (!ipAddress.isPortable()) {
+                throw new InvalidParameterValueException("Unable to create ip forwarding rule, IP address " + ipAddress + " is not in the same availability zone as virtual machine " + userVm.toString());
+            }
         }
 
     }