Merge "Fix adding router interface job failed"

This commit is contained in:
Jenkins 2015-02-19 14:34:56 +00:00 committed by Gerrit Code Review
commit 6358d4d8af
4 changed files with 31 additions and 0 deletions

View File

@ -664,6 +664,7 @@ class NsxVPluginV2(agents_db.AgentDbMixin,
if mappings:
if cfg.CONF.nsxv.spoofguard_enabled and sg_policy_id:
self.nsx_v.vcns.delete_spoofguard_policy(sg_policy_id)
edge_utils.check_network_in_use_at_backend(context, id)
self._delete_backend_network(mappings[0])
def get_network(self, context, id, fields=None):

View File

@ -297,6 +297,8 @@ class EdgeApplianceDriver(object):
LOG.exception(_LE("Failed to delete vdr interface on edge: "
"%s"),
edge_id)
# avoid bug 1389358
self.check_edge_jobs(edge_id)
def _delete_interface(self, task):
edge_id = task.userdata['edge_id']
@ -328,6 +330,8 @@ class EdgeApplianceDriver(object):
userdata=userdata)
task.add_result_monitor(self.callbacks.interface_delete_result)
self.task_manager.add(task)
# avoid bug 1389358
self.check_edge_jobs(edge_id)
return task
def _deploy_edge(self, task):

View File

@ -13,6 +13,8 @@
# License for the specific language governing permissions and limitations
# under the License.
import time
from oslo.config import cfg
from oslo.utils import excutils
from sqlalchemy.orm import exc as sa_exc
@ -1216,6 +1218,21 @@ def update_firewall(nsxv_manager, context, router_id, firewall,
task.wait(task_const.TaskState.RESULT)
def check_network_in_use_at_backend(context, network_id):
retries = max(cfg.CONF.nsxv.retries, 1)
delay = 0.5
for attempt in range(1, retries + 1):
if attempt != 1:
time.sleep(delay)
delay = min(2 * delay, 60)
edge_vnic_bindings = nsxv_db.get_edge_vnic_bindings_by_int_lswitch(
context.session, network_id)
if not edge_vnic_bindings:
return
LOG.warning(_('NSXv: network is still in use at the backend'))
LOG.error(_('NSXv: network is still in use at the backend'))
class NsxVCallbacks(object):
"""Edge callback implementation Callback functions for
asynchronous tasks.

View File

@ -76,6 +76,15 @@ class FakeVcns(object):
return False
return True
def get_edge_jobs(self, edge_id):
if edge_id not in self._edges:
raise Exception(_("Edge %s does not exist") % edge_id)
header = {
'status': 200
}
response = {"edgeJob": []}
return (header, response)
def deploy_edge(self, request):
if (self._unique_router_name and
not self._validate_edge_name(request['name'])):