bug 11555: Fixed NPE happening during LB rule cleanup in case when createLB fails

status 11555: resolved fixed

Reviewed-by: frank@cloud.com
This commit is contained in:
alena 2011-09-23 10:55:59 -07:00
parent 72cbf5a1f2
commit 2ee6986e24
2 changed files with 23 additions and 15 deletions

View File

@ -457,13 +457,15 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesManager,
}
throw new CloudRuntimeException("Unable to add rule for ip address id=" + newRule.getSourceIpAddressId(), e);
} finally {
if (!success) {
if (!success && newRule != null) {
txn.start();
_firewallDao.remove(_firewallDao.findByRelatedId(newRule.getId()).getId());
_firewallMgr.revokeRelatedFirewallRule(newRule.getId(), false);
_lbDao.remove(newRule.getId());
txn.commit();
}
}

View File

@ -222,12 +222,16 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager {
return newRule;
} catch (Exception e) {
txn.start();
//no need to apply the rule as it wasn't programmed on the backend yet
_firewallMgr.revokeRelatedFirewallRule(newRule.getId(), false);
_forwardingDao.remove(newRule.getId());
txn.commit();
if (newRule != null) {
txn.start();
//no need to apply the rule as it wasn't programmed on the backend yet
_firewallMgr.revokeRelatedFirewallRule(newRule.getId(), false);
_forwardingDao.remove(newRule.getId());
txn.commit();
}
if (e instanceof NetworkRuleConflictException) {
throw (NetworkRuleConflictException) e;
@ -288,12 +292,14 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager {
return staticNatRule;
} catch (Exception e) {
txn.start();
//no need to apply the rule as it wasn't programmed on the backend yet
_firewallMgr.revokeRelatedFirewallRule(newRule.getId(), false);
_forwardingDao.remove(newRule.getId());
txn.commit();
if (newRule != null) {
txn.start();
//no need to apply the rule as it wasn't programmed on the backend yet
_firewallMgr.revokeRelatedFirewallRule(newRule.getId(), false);
_forwardingDao.remove(newRule.getId());
txn.commit();
}
if (e instanceof NetworkRuleConflictException) {
throw (NetworkRuleConflictException) e;
}