You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ts...@apache.org on 2013/02/14 09:28:52 UTC
git commit: refs/heads/4.1 - CLOUDSTACK-1088: EnableStaticNat error
will clear the data in database
Updated Branches:
refs/heads/4.1 78460c696 -> f95b3c76e
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....@leaseweb.com>
Reviewed-by: https://reviews.apache.org/r/9254/
Signed-off-by: Prasanna Santhanam <ts...@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/f95b3c76
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/f95b3c76
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/f95b3c76
Branch: refs/heads/4.1
Commit: f95b3c76e8d1ec99839ebc01fb04d059705d38ae
Parents: 78460c6
Author: Wei Zhou <w....@leaseweb.com>
Authored: Wed Feb 13 18:42:38 2013 +0530
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Thu Feb 14 13:58:07 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/f95b3c76/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)