incubator-cloudstack-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bfede...@apache.org
Subject [39/50] [abbrv] git commit: refs/heads/ui-plugins - CLOUDSTACK-1088: EnableStaticNat error will clear the data in database
Date Wed, 13 Feb 2013 22:04:21 GMT
CLOUDSTACK-1088: EnableStaticNat error will clear the data in database

The issue occur in two conditions

(1) If I use two sessions or browsers to EnableStaticNat on CloudStack
UI. one is successful, the other is failed. However, there is no ip in
database.

(2) If I use API call EnableStaticNat several times The first time
succeed, the second failed, the third succeed. the result is
success-fail-success-fail-success-fail, which it is not correct.

Reported-by: Wei Zhou <w.zhou@leaseweb.com>
Reviewed-by: https://reviews.apache.org/r/9254/
Signed-off-by: Prasanna Santhanam <tsp@apache.org>


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

Branch: refs/heads/ui-plugins
Commit: 2e2ee2f3ed389b1b1a8a89eae8a641314417ca83
Parents: 8234dfa
Author: Wei Zhou <w.zhou@leaseweb.com>
Authored: Wed Feb 13 18:42:38 2013 +0530
Committer: Prasanna Santhanam <tsp@apache.org>
Committed: Wed Feb 13 18:43:42 2013 +0530

----------------------------------------------------------------------
 .../com/cloud/network/rules/RulesManagerImpl.java  |   25 +++++++--------
 1 files changed, 12 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/2e2ee2f3/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 0a00d22..614d308 100755
--- a/server/src/com/cloud/network/rules/RulesManagerImpl.java
+++ b/server/src/com/cloud/network/rules/RulesManagerImpl.java
@@ -412,7 +412,8 @@ public class RulesManagerImpl extends ManagerBase implements RulesManager,
Rules
 
         // Verify input parameters
         boolean performedIpAssoc = false;
-        boolean result = false;
+        boolean isOneToOneNat = ipAddress.isOneToOneNat();
+        Long associatedWithVmId = ipAddress.getAssociatedWithVmId();
         try {
             Network network = _networkModel.getNetwork(networkId);
             if (network == null) {
@@ -476,28 +477,26 @@ public class RulesManagerImpl extends ManagerBase implements RulesManager,
Rules
                 // enable static nat on the backend
                 s_logger.trace("Enabling static nat for ip address " + ipAddress + " and
vm id=" + vmId + " on the backend");
                 if (applyStaticNatForIp(ipId, false, caller, false)) {
-                    result = true;
+                    performedIpAssoc = false; // ignor unassignIPFromVpcNetwork in finally
block
+                    return true;
                 } else {
                     s_logger.warn("Failed to enable static nat rule for ip address " + ipId
+ " on the backend");
+                    ipAddress.setOneToOneNat(isOneToOneNat);
+                    ipAddress.setAssociatedWithVmId(associatedWithVmId);
+                    _ipAddressDao.update(ipAddress.getId(), ipAddress);
                 }
             } else {
                 s_logger.warn("Failed to update ip address " + ipAddress + " in the DB as
a part of enableStaticNat");
 
             }
         } finally {
-            if (!result) {
-                ipAddress.setOneToOneNat(false);
-                ipAddress.setAssociatedWithVmId(null);
-                _ipAddressDao.update(ipAddress.getId(), ipAddress);  
-
-                if (performedIpAssoc) {
-                    //if the rule is the last one for the ip address assigned to VPC, unassign
it from the network
-                    IpAddress ip = _ipAddressDao.findById(ipAddress.getId());
-                    _vpcMgr.unassignIPFromVpcNetwork(ip.getId(), networkId);
-                }
+            if (performedIpAssoc) {
+                //if the rule is the last one for the ip address assigned to VPC, unassign
it from the network
+                IpAddress ip = _ipAddressDao.findById(ipAddress.getId());
+                _vpcMgr.unassignIPFromVpcNetwork(ip.getId(), networkId);
             }
         }
-        return result;
+        return false;
     }
 
     protected void isIpReadyForStaticNat(long vmId, IPAddressVO ipAddress, Account caller,
long callerUserId) 


Mime
View raw message