NSXv: ensure that locking is done with flag 'external=True'
All opertaions that are menat to be atomic should be done across multiple API workers. This patch ensure that this is done globally. In general the plugin can and should run with multiple API workers. Change-Id: Ifdd4aa7b4254d4a35783d9749085405c17b038ce
This commit is contained in:
parent
d8eeda9baf
commit
e95db00149
@ -36,6 +36,8 @@ class LockManager:
|
||||
if cfg.CONF.nsxv.locking_coordinator_url:
|
||||
return LockManager._get_lock_distributed(name)
|
||||
else:
|
||||
# Ensure that external=True
|
||||
kwargs['external'] = True
|
||||
return LockManager._get_lock_local(name, **kwargs)
|
||||
|
||||
@staticmethod
|
||||
|
@ -470,8 +470,7 @@ class NsxVPluginV2(agents_db.AgentDbMixin,
|
||||
|
||||
def _add_member_to_security_group(self, sg_id, vnic_id):
|
||||
with locking.LockManager.get_lock(
|
||||
str(sg_id), lock_file_prefix='neutron-security-ops',
|
||||
external=True):
|
||||
str(sg_id), lock_file_prefix='neutron-security-ops'):
|
||||
try:
|
||||
self.nsx_v.vcns.add_member_to_security_group(
|
||||
sg_id, vnic_id)
|
||||
@ -497,8 +496,7 @@ class NsxVPluginV2(agents_db.AgentDbMixin,
|
||||
|
||||
def _remove_member_from_security_group(self, sg_id, vnic_id):
|
||||
with locking.LockManager.get_lock(
|
||||
str(sg_id), lock_file_prefix='neutron-security-ops',
|
||||
external=True):
|
||||
str(sg_id), lock_file_prefix='neutron-security-ops'):
|
||||
try:
|
||||
h, c = self.nsx_v.vcns.remove_member_from_security_group(
|
||||
sg_id, vnic_id)
|
||||
@ -1078,7 +1076,7 @@ class NsxVPluginV2(agents_db.AgentDbMixin,
|
||||
raise n_exc.InvalidInput(error_message=err_msg)
|
||||
|
||||
with locking.LockManager.get_lock(
|
||||
'nsx-edge-pool', lock_file_prefix='edge-bind-', external=True):
|
||||
'nsx-edge-pool', lock_file_prefix='edge-bind-'):
|
||||
s = super(NsxVPluginV2, self).create_subnet(context, subnet)
|
||||
if s['enable_dhcp']:
|
||||
try:
|
||||
@ -1223,8 +1221,8 @@ class NsxVPluginV2(agents_db.AgentDbMixin,
|
||||
edge_id = self._get_edge_id_by_rtr_id(context, resource_id)
|
||||
if edge_id:
|
||||
with locking.LockManager.get_lock(
|
||||
str(edge_id), lock_file_prefix='nsxv-dhcp-config-',
|
||||
external=True):
|
||||
str(edge_id),
|
||||
lock_file_prefix='nsxv-dhcp-config-'):
|
||||
if self.metadata_proxy_handler:
|
||||
LOG.debug('Update metadata for resource %s',
|
||||
resource_id)
|
||||
|
@ -69,7 +69,7 @@ class RouterExclusiveDriver(router_driver.RouterBaseDriver):
|
||||
|
||||
def update_routes(self, context, router_id, nexthop):
|
||||
with locking.LockManager.get_lock(
|
||||
self._get_router_edge_id(context, router_id), external=True):
|
||||
self._get_router_edge_id(context, router_id)):
|
||||
self.plugin._update_routes(context, router_id, nexthop)
|
||||
|
||||
def _update_router_gw_info(self, context, router_id, info,
|
||||
@ -91,7 +91,7 @@ class RouterExclusiveDriver(router_driver.RouterBaseDriver):
|
||||
context, router))
|
||||
|
||||
edge_id = self._get_router_edge_id(context, router_id)
|
||||
with locking.LockManager.get_lock(edge_id, external=True):
|
||||
with locking.LockManager.get_lock(edge_id):
|
||||
if new_ext_net_id != org_ext_net_id and orgnexthop:
|
||||
# network changed, so need to remove default gateway before
|
||||
# vnic can be configured
|
||||
@ -130,7 +130,7 @@ class RouterExclusiveDriver(router_driver.RouterBaseDriver):
|
||||
address_groups = self.plugin._get_address_groups(
|
||||
context, router_id, network_id)
|
||||
with locking.LockManager.get_lock(
|
||||
self._get_router_edge_id(context, router_id), external=True):
|
||||
self._get_router_edge_id(context, router_id)):
|
||||
edge_utils.update_internal_interface(
|
||||
self.nsx_v, context, router_id, network_id, address_groups,
|
||||
router_db['admin_state_up'])
|
||||
@ -166,7 +166,7 @@ class RouterExclusiveDriver(router_driver.RouterBaseDriver):
|
||||
network_id = subnet['network_id']
|
||||
|
||||
with locking.LockManager.get_lock(
|
||||
self._get_router_edge_id(context, router_id), external=True):
|
||||
self._get_router_edge_id(context, router_id)):
|
||||
if router_db.gw_port and router_db.enable_snat:
|
||||
# First update nat rules
|
||||
self.plugin._update_nat_rules(context, router_db)
|
||||
@ -189,7 +189,7 @@ class RouterExclusiveDriver(router_driver.RouterBaseDriver):
|
||||
def _update_edge_router(self, context, router_id):
|
||||
router = self.plugin._get_router(context.elevated(), router_id)
|
||||
with locking.LockManager.get_lock(
|
||||
self._get_router_edge_id(context, router_id), external=True):
|
||||
self._get_router_edge_id(context, router_id)):
|
||||
self.plugin._update_external_interface(context, router)
|
||||
self.plugin._update_nat_rules(context, router)
|
||||
self.plugin._update_subnets_and_dnat_firewall(context, router)
|
||||
|
@ -53,8 +53,7 @@ class RouterSharedDriver(router_driver.RouterBaseDriver):
|
||||
context, router_id, router)
|
||||
else:
|
||||
with locking.LockManager.get_lock(
|
||||
str(edge_id), lock_file_prefix=NSXV_ROUTER_RECONFIG,
|
||||
external=True):
|
||||
str(edge_id), lock_file_prefix=NSXV_ROUTER_RECONFIG):
|
||||
gw_info = self.plugin._extract_external_gw(
|
||||
context, router, is_extract=True)
|
||||
super(nsx_v.NsxVPluginV2, self.plugin).update_router(
|
||||
@ -214,7 +213,7 @@ class RouterSharedDriver(router_driver.RouterBaseDriver):
|
||||
router_id)
|
||||
with locking.LockManager.get_lock(
|
||||
str(new_edge_id),
|
||||
lock_file_prefix=NSXV_ROUTER_RECONFIG, external=True):
|
||||
lock_file_prefix=NSXV_ROUTER_RECONFIG):
|
||||
self._add_router_services_on_available_edge(context,
|
||||
router_id)
|
||||
else:
|
||||
@ -455,8 +454,7 @@ class RouterSharedDriver(router_driver.RouterBaseDriver):
|
||||
return optional_router_ids, conflict_router_ids
|
||||
|
||||
def _bind_router_on_available_edge(self, context, router_id, admin_state):
|
||||
with locking.LockManager.get_lock("router", lock_file_prefix="bind-",
|
||||
external=True):
|
||||
with locking.LockManager.get_lock("router", lock_file_prefix="bind-"):
|
||||
conflict_network_ids, conflict_router_ids, intf_num = (
|
||||
self._get_conflict_network_and_router_ids_by_intf(context,
|
||||
router_id))
|
||||
@ -478,8 +476,7 @@ class RouterSharedDriver(router_driver.RouterBaseDriver):
|
||||
edge_id = edge_utils.get_router_edge_id(context, router_id)
|
||||
with locking.LockManager.get_lock(
|
||||
str(edge_id),
|
||||
lock_file_prefix=NSXV_ROUTER_RECONFIG,
|
||||
external=True):
|
||||
lock_file_prefix=NSXV_ROUTER_RECONFIG):
|
||||
# add all internal interfaces of the router on edge
|
||||
intf_net_ids = (
|
||||
self.plugin._get_internal_network_ids_by_router(context,
|
||||
@ -540,8 +537,7 @@ class RouterSharedDriver(router_driver.RouterBaseDriver):
|
||||
is_migrated = False
|
||||
with locking.LockManager.get_lock(
|
||||
str(edge_id),
|
||||
lock_file_prefix=NSXV_ROUTER_RECONFIG,
|
||||
external=True):
|
||||
lock_file_prefix=NSXV_ROUTER_RECONFIG):
|
||||
router_ids = self.edge_manager.get_routers_on_same_edge(
|
||||
context, router_id)
|
||||
org_ext_net_id = (router.gw_port_id and
|
||||
@ -620,8 +616,7 @@ class RouterSharedDriver(router_driver.RouterBaseDriver):
|
||||
edge_id = edge_utils.get_router_edge_id(context, router_id)
|
||||
with locking.LockManager.get_lock(
|
||||
str(edge_id),
|
||||
lock_file_prefix=NSXV_ROUTER_RECONFIG,
|
||||
external=True):
|
||||
lock_file_prefix=NSXV_ROUTER_RECONFIG):
|
||||
self._add_router_services_on_available_edge(context,
|
||||
router_id)
|
||||
|
||||
@ -633,8 +628,7 @@ class RouterSharedDriver(router_driver.RouterBaseDriver):
|
||||
is_migrated = False
|
||||
with locking.LockManager.get_lock(
|
||||
str(edge_id),
|
||||
lock_file_prefix=NSXV_ROUTER_RECONFIG,
|
||||
external=True):
|
||||
lock_file_prefix=NSXV_ROUTER_RECONFIG):
|
||||
router_ids = self.edge_manager.get_routers_on_same_edge(
|
||||
context, router_id)
|
||||
info = super(nsx_v.NsxVPluginV2,
|
||||
@ -694,8 +688,7 @@ class RouterSharedDriver(router_driver.RouterBaseDriver):
|
||||
edge_id = edge_utils.get_router_edge_id(context, router_id)
|
||||
with locking.LockManager.get_lock(
|
||||
str(edge_id),
|
||||
lock_file_prefix=NSXV_ROUTER_RECONFIG,
|
||||
external=True):
|
||||
lock_file_prefix=NSXV_ROUTER_RECONFIG):
|
||||
self._add_router_services_on_available_edge(context,
|
||||
router_id)
|
||||
else:
|
||||
@ -707,8 +700,7 @@ class RouterSharedDriver(router_driver.RouterBaseDriver):
|
||||
edge_id = edge_utils.get_router_edge_id(context, router_id)
|
||||
with locking.LockManager.get_lock(
|
||||
str(edge_id),
|
||||
lock_file_prefix=NSXV_ROUTER_RECONFIG,
|
||||
external=True):
|
||||
lock_file_prefix=NSXV_ROUTER_RECONFIG):
|
||||
self._add_router_services_on_available_edge(context,
|
||||
router_id)
|
||||
return info
|
||||
@ -717,8 +709,7 @@ class RouterSharedDriver(router_driver.RouterBaseDriver):
|
||||
edge_id = edge_utils.get_router_edge_id(context, router_id)
|
||||
with locking.LockManager.get_lock(
|
||||
str(edge_id),
|
||||
lock_file_prefix=NSXV_ROUTER_RECONFIG,
|
||||
external=True):
|
||||
lock_file_prefix=NSXV_ROUTER_RECONFIG):
|
||||
info = super(
|
||||
nsx_v.NsxVPluginV2, self.plugin).remove_router_interface(
|
||||
context, router_id, interface_info)
|
||||
@ -750,8 +741,7 @@ class RouterSharedDriver(router_driver.RouterBaseDriver):
|
||||
edge_id = edge_utils.get_router_edge_id(context, router_id)
|
||||
with locking.LockManager.get_lock(
|
||||
str(edge_id),
|
||||
lock_file_prefix=NSXV_ROUTER_RECONFIG,
|
||||
external=True):
|
||||
lock_file_prefix=NSXV_ROUTER_RECONFIG):
|
||||
router_ids = self.edge_manager.get_routers_on_same_edge(
|
||||
context, router_id)
|
||||
if router_ids:
|
||||
|
@ -277,8 +277,7 @@ class EdgeLbDriver(object):
|
||||
if not self._fw_section_id:
|
||||
# Avoid concurrent creation of section by multiple neutron
|
||||
# instances
|
||||
with locking.LockManager.get_lock('lbaas-section-creation',
|
||||
external=True):
|
||||
with locking.LockManager.get_lock('lbaas-section-creation'):
|
||||
fw_section_id = self.vcns.get_section_id(LBAAS_FW_SECTION_NAME)
|
||||
if not fw_section_id:
|
||||
section = et.Element('section')
|
||||
@ -310,7 +309,7 @@ class EdgeLbDriver(object):
|
||||
return rtr_bindings['edge_id']
|
||||
|
||||
def _vip_as_secondary_ip(self, edge_id, vip, handler):
|
||||
with locking.LockManager.get_lock(edge_id, external=True):
|
||||
with locking.LockManager.get_lock(edge_id):
|
||||
r = self.vcns.get_interfaces(edge_id)[1]
|
||||
vnics = r.get('vnics', [])
|
||||
for vnic in vnics:
|
||||
@ -377,7 +376,7 @@ class EdgeLbDriver(object):
|
||||
edge_ips = self._get_edge_ips(edge_id)
|
||||
|
||||
plugin = self._get_lb_plugin()
|
||||
with locking.LockManager.get_lock('lbaas-fw-section', external=True):
|
||||
with locking.LockManager.get_lock('lbaas-fw-section'):
|
||||
members = plugin.get_members(
|
||||
context,
|
||||
filters={'pool_id': [pool_id]},
|
||||
@ -435,14 +434,14 @@ class EdgeLbDriver(object):
|
||||
'enabled': True,
|
||||
'name': vip_id}]}
|
||||
|
||||
with locking.LockManager.get_lock(edge_id, external=True):
|
||||
with locking.LockManager.get_lock(edge_id):
|
||||
h = self.vcns.add_firewall_rule(edge_id, fw_rule)[0]
|
||||
fw_rule_id = extract_resource_id(h['location'])
|
||||
|
||||
return fw_rule_id
|
||||
|
||||
def _del_vip_fw_rule(self, edge_id, vip_fw_rule_id):
|
||||
with locking.LockManager.get_lock(edge_id, external=True):
|
||||
with locking.LockManager.get_lock(edge_id):
|
||||
self.vcns.delete_firewall_rule(edge_id, vip_fw_rule_id)
|
||||
|
||||
def create_pool(self, context, pool):
|
||||
@ -457,7 +456,7 @@ class EdgeLbDriver(object):
|
||||
|
||||
edge_pool = convert_lbaas_pool(pool)
|
||||
try:
|
||||
with locking.LockManager.get_lock(edge_id, external=True):
|
||||
with locking.LockManager.get_lock(edge_id):
|
||||
h = self.vcns.create_pool(edge_id, edge_pool)[0]
|
||||
edge_pool_id = extract_resource_id(h['location'])
|
||||
self._lb_driver.create_pool_successful(
|
||||
@ -472,8 +471,7 @@ class EdgeLbDriver(object):
|
||||
LOG.debug('Updating pool %s to %s', old_pool, pool)
|
||||
edge_pool = convert_lbaas_pool(pool)
|
||||
try:
|
||||
with locking.LockManager.get_lock(pool_mapping['edge_id'],
|
||||
external=True):
|
||||
with locking.LockManager.get_lock(pool_mapping['edge_id']):
|
||||
self.vcns.update_pool(pool_mapping['edge_id'],
|
||||
pool_mapping['edge_pool_id'],
|
||||
edge_pool)
|
||||
@ -489,8 +487,7 @@ class EdgeLbDriver(object):
|
||||
|
||||
if pool_mapping:
|
||||
try:
|
||||
with locking.LockManager.get_lock(pool_mapping['edge_id'],
|
||||
external=True):
|
||||
with locking.LockManager.get_lock(pool_mapping['edge_id']):
|
||||
self.vcns.delete_pool(pool_mapping['edge_id'],
|
||||
pool_mapping['edge_pool_id'])
|
||||
except nsxv_exc.VcnsApiException:
|
||||
@ -517,7 +514,7 @@ class EdgeLbDriver(object):
|
||||
|
||||
app_profile_id = None
|
||||
try:
|
||||
with locking.LockManager.get_lock(edge_id, external=True):
|
||||
with locking.LockManager.get_lock(edge_id):
|
||||
h = (self.vcns.create_app_profile(edge_id, app_profile))[0]
|
||||
app_profile_id = extract_resource_id(h['location'])
|
||||
except nsxv_exc.VcnsApiException:
|
||||
@ -529,7 +526,7 @@ class EdgeLbDriver(object):
|
||||
edge_vip = convert_lbaas_vip(vip, app_profile_id, pool_mapping)
|
||||
try:
|
||||
self._add_vip_as_secondary_ip(edge_id, vip['address'])
|
||||
with locking.LockManager.get_lock(edge_id, external=True):
|
||||
with locking.LockManager.get_lock(edge_id):
|
||||
h = self.vcns.create_vip(edge_id, edge_vip)[0]
|
||||
edge_vip_id = extract_resource_id(h['location'])
|
||||
edge_fw_rule_id = self._add_vip_fw_rule(edge_id, vip['id'],
|
||||
@ -542,7 +539,7 @@ class EdgeLbDriver(object):
|
||||
with excutils.save_and_reraise_exception():
|
||||
self._lb_driver.vip_failed(context, vip)
|
||||
LOG.error(_LE('Failed to create vip on Edge: %s'), edge_id)
|
||||
with locking.LockManager.get_lock(edge_id, external=True):
|
||||
with locking.LockManager.get_lock(edge_id):
|
||||
self.vcns.delete_app_profile(edge_id, app_profile_id)
|
||||
|
||||
def update_vip(self, context, old_vip, vip, pool_mapping, vip_mapping):
|
||||
@ -555,7 +552,7 @@ class EdgeLbDriver(object):
|
||||
vip['name'], vip.get('session_persistence') or {},
|
||||
vip.get('protocol'))
|
||||
try:
|
||||
with locking.LockManager.get_lock(edge_id, external=True):
|
||||
with locking.LockManager.get_lock(edge_id):
|
||||
self.vcns.update_app_profile(edge_id, app_profile_id,
|
||||
app_profile)
|
||||
except nsxv_exc.VcnsApiException:
|
||||
@ -566,7 +563,7 @@ class EdgeLbDriver(object):
|
||||
|
||||
edge_vip = convert_lbaas_vip(vip, app_profile_id, pool_mapping)
|
||||
try:
|
||||
with locking.LockManager.get_lock(edge_id, external=True):
|
||||
with locking.LockManager.get_lock(edge_id):
|
||||
self.vcns.update_vip(edge_id, edge_vip_id, edge_vip)
|
||||
self._lb_driver.vip_successful(context, vip)
|
||||
except nsxv_exc.VcnsApiException:
|
||||
@ -585,7 +582,7 @@ class EdgeLbDriver(object):
|
||||
app_profile_id = vip_mapping['edge_app_profile_id']
|
||||
|
||||
try:
|
||||
with locking.LockManager.get_lock(edge_id, external=True):
|
||||
with locking.LockManager.get_lock(edge_id):
|
||||
self.vcns.delete_vip(edge_id, edge_vse_id)
|
||||
self._del_vip_as_secondary_ip(edge_id, vip['address'])
|
||||
self._del_vip_fw_rule(edge_id, vip_mapping['edge_fw_rule_id'])
|
||||
@ -598,7 +595,7 @@ class EdgeLbDriver(object):
|
||||
_LE('Failed to delete vip on edge: %s'), edge_id)
|
||||
|
||||
try:
|
||||
with locking.LockManager.get_lock(edge_id, external=True):
|
||||
with locking.LockManager.get_lock(edge_id):
|
||||
self.vcns.delete_app_profile(edge_id, app_profile_id)
|
||||
except nsxv_exc.ResourceNotFound:
|
||||
LOG.error(_LE('app profile not found on edge: %s'), edge_id)
|
||||
@ -614,8 +611,7 @@ class EdgeLbDriver(object):
|
||||
def create_member(self, context, member, pool_mapping):
|
||||
LOG.debug('Creating member %s', member)
|
||||
|
||||
with locking.LockManager.get_lock(pool_mapping['edge_id'],
|
||||
external=True):
|
||||
with locking.LockManager.get_lock(pool_mapping['edge_id']):
|
||||
edge_pool = self.vcns.get_pool(pool_mapping['edge_id'],
|
||||
pool_mapping['edge_pool_id'])[1]
|
||||
edge_member = convert_lbaas_member(member)
|
||||
@ -646,8 +642,7 @@ class EdgeLbDriver(object):
|
||||
def update_member(self, context, old_member, member, pool_mapping):
|
||||
LOG.debug('Updating member %s to %s', old_member, member)
|
||||
|
||||
with locking.LockManager.get_lock(pool_mapping['edge_id'],
|
||||
external=True):
|
||||
with locking.LockManager.get_lock(pool_mapping['edge_id']):
|
||||
edge_pool = self.vcns.get_pool(pool_mapping['edge_id'],
|
||||
pool_mapping['edge_pool_id'])[1]
|
||||
|
||||
@ -672,8 +667,7 @@ class EdgeLbDriver(object):
|
||||
LOG.debug('Deleting member %s', member)
|
||||
|
||||
if pool_mapping:
|
||||
with locking.LockManager.get_lock(pool_mapping['edge_id'],
|
||||
external=True):
|
||||
with locking.LockManager.get_lock(pool_mapping['edge_id']):
|
||||
edge_pool = self.vcns.get_pool(
|
||||
pool_mapping['edge_id'],
|
||||
pool_mapping['edge_pool_id'])[1]
|
||||
@ -705,8 +699,7 @@ class EdgeLbDriver(object):
|
||||
LOG.debug('Create HM %s', health_monitor)
|
||||
|
||||
edge_mon_id = None
|
||||
with locking.LockManager.get_lock(pool_mapping['edge_id'],
|
||||
external=True):
|
||||
with locking.LockManager.get_lock(pool_mapping['edge_id']):
|
||||
# 1st, we find if we already have a pool with the same monitor, on
|
||||
# the same Edge appliance.
|
||||
# If there is no pool on this Edge which is already associated with
|
||||
@ -762,8 +755,7 @@ class EdgeLbDriver(object):
|
||||
edge_monitor = convert_lbaas_monitor(health_monitor)
|
||||
|
||||
try:
|
||||
with locking.LockManager.get_lock(mon_mapping['edge_id'],
|
||||
external=True):
|
||||
with locking.LockManager.get_lock(mon_mapping['edge_id']):
|
||||
self.vcns.update_health_monitor(
|
||||
mon_mapping['edge_id'],
|
||||
mon_mapping['edge_monitor_id'],
|
||||
@ -790,8 +782,7 @@ class EdgeLbDriver(object):
|
||||
if not mon_mapping:
|
||||
return
|
||||
|
||||
with locking.LockManager.get_lock(pool_mapping['edge_id'],
|
||||
external=True):
|
||||
with locking.LockManager.get_lock(pool_mapping['edge_id']):
|
||||
edge_pool = self.vcns.get_pool(edge_id,
|
||||
pool_mapping['edge_pool_id'])[1]
|
||||
edge_pool['monitorId'].remove(mon_mapping['edge_monitor_id'])
|
||||
|
@ -498,7 +498,7 @@ class EdgeManager(object):
|
||||
return
|
||||
|
||||
with locking.LockManager.get_lock(
|
||||
'nsx-edge-request', lock_file_prefix='get-', external=True):
|
||||
'nsx-edge-request', lock_file_prefix='get-'):
|
||||
self._clean_all_error_edge_bindings(context)
|
||||
available_router_binding = self._get_available_router_binding(
|
||||
context, appliance_size=appliance_size, edge_type=edge_type)
|
||||
@ -585,7 +585,7 @@ class EdgeManager(object):
|
||||
return
|
||||
|
||||
with locking.LockManager.get_lock(
|
||||
'nsx-edge-request', lock_file_prefix='get-', external=True):
|
||||
'nsx-edge-request', lock_file_prefix='get-'):
|
||||
self._clean_all_error_edge_bindings(context)
|
||||
backup_router_bindings = self._get_backup_edge_bindings(
|
||||
context, appliance_size=binding['appliance_size'],
|
||||
@ -661,8 +661,7 @@ class EdgeManager(object):
|
||||
return
|
||||
with locking.LockManager.get_lock(
|
||||
str(edge_binding['edge_id']),
|
||||
lock_file_prefix='nsxv-dhcp-config-',
|
||||
external=True):
|
||||
lock_file_prefix='nsxv-dhcp-config-'):
|
||||
self.update_dhcp_service_config(context, edge_binding['edge_id'])
|
||||
|
||||
def update_dhcp_service_config(self, context, edge_id):
|
||||
@ -786,7 +785,7 @@ class EdgeManager(object):
|
||||
def allocate_new_dhcp_edge(self, context, network_id, resource_id):
|
||||
self._allocate_dhcp_edge_appliance(context, resource_id)
|
||||
with locking.LockManager.get_lock(
|
||||
'nsx-edge-pool', lock_file_prefix='edge-bind-', external=True):
|
||||
'nsx-edge-pool', lock_file_prefix='edge-bind-'):
|
||||
new_edge = nsxv_db.get_nsxv_router_binding(context.session,
|
||||
resource_id)
|
||||
nsxv_db.allocate_edge_vnic_with_tunnel_index(
|
||||
@ -809,8 +808,7 @@ class EdgeManager(object):
|
||||
# case 1: update a subnet to an existing dhcp edge
|
||||
if dhcp_edge_binding:
|
||||
with locking.LockManager.get_lock(
|
||||
'nsx-edge-pool', lock_file_prefix='edge-bind-',
|
||||
external=True):
|
||||
'nsx-edge-pool', lock_file_prefix='edge-bind-'):
|
||||
edge_id = dhcp_edge_binding['edge_id']
|
||||
(conflict_edge_ids,
|
||||
available_edge_ids) = self._get_used_edges(context, subnet)
|
||||
@ -818,8 +816,7 @@ class EdgeManager(object):
|
||||
"at present is using edge %s",
|
||||
available_edge_ids, conflict_edge_ids, edge_id)
|
||||
with locking.LockManager.get_lock(
|
||||
str(edge_id), lock_file_prefix='nsxv-dhcp-config-',
|
||||
external=True):
|
||||
str(edge_id), lock_file_prefix='nsxv-dhcp-config-'):
|
||||
# Delete the existing vnic interface if there is
|
||||
# and overlapping subnet
|
||||
if edge_id in conflict_edge_ids:
|
||||
@ -843,8 +840,7 @@ class EdgeManager(object):
|
||||
# case 2: attach the subnet to a new edge and update vnic
|
||||
else:
|
||||
with locking.LockManager.get_lock(
|
||||
'nsx-edge-pool', lock_file_prefix='edge-bind-',
|
||||
external=True):
|
||||
'nsx-edge-pool', lock_file_prefix='edge-bind-'):
|
||||
(conflict_edge_ids,
|
||||
available_edge_ids) = self._get_used_edges(context, subnet)
|
||||
LOG.debug('The available edges %s, the conflict edges %s',
|
||||
@ -885,8 +881,7 @@ class EdgeManager(object):
|
||||
edge_id, vnic_index, tunnel_index)
|
||||
try:
|
||||
with locking.LockManager.get_lock(
|
||||
str(edge_id), lock_file_prefix='nsxv-dhcp-config-',
|
||||
external=True):
|
||||
str(edge_id), lock_file_prefix='nsxv-dhcp-config-'):
|
||||
self._update_dhcp_internal_interface(
|
||||
context, edge_id, vnic_index, tunnel_index, network_id,
|
||||
address_groups)
|
||||
@ -899,8 +894,7 @@ class EdgeManager(object):
|
||||
'vnic_index': vnic_index,
|
||||
'tunnel_index': tunnel_index})
|
||||
with locking.LockManager.get_lock(
|
||||
str(edge_id), lock_file_prefix='nsxv-dhcp-config-',
|
||||
external=True):
|
||||
str(edge_id), lock_file_prefix='nsxv-dhcp-config-'):
|
||||
ports = self.nsxv_plugin.get_ports(
|
||||
context, filters={'network_id': [network_id]})
|
||||
inst_ports = [port
|
||||
@ -930,8 +924,8 @@ class EdgeManager(object):
|
||||
network_id)
|
||||
try:
|
||||
with locking.LockManager.get_lock(
|
||||
str(edge_id), lock_file_prefix='nsxv-dhcp-config-',
|
||||
external=True):
|
||||
str(edge_id),
|
||||
lock_file_prefix='nsxv-dhcp-config-'):
|
||||
self._delete_dhcp_internal_interface(context, edge_id,
|
||||
vnic_index,
|
||||
tunnel_index,
|
||||
@ -956,12 +950,10 @@ class EdgeManager(object):
|
||||
|
||||
if dhcp_edge_binding:
|
||||
with locking.LockManager.get_lock(
|
||||
'nsx-edge-pool', lock_file_prefix='edge-bind-',
|
||||
external=True):
|
||||
'nsx-edge-pool', lock_file_prefix='edge-bind-'):
|
||||
edge_id = dhcp_edge_binding['edge_id']
|
||||
with locking.LockManager.get_lock(
|
||||
str(edge_id), lock_file_prefix='nsxv-dhcp-config-',
|
||||
external=True):
|
||||
str(edge_id), lock_file_prefix='nsxv-dhcp-config-'):
|
||||
self.remove_network_from_dhcp_edge(context, network_id,
|
||||
edge_id)
|
||||
|
||||
@ -987,8 +979,7 @@ class EdgeManager(object):
|
||||
|
||||
if not self.per_interface_rp_filter:
|
||||
with locking.LockManager.get_lock(
|
||||
'nsx-edge-pool', lock_file_prefix='edge-bind-',
|
||||
external=True):
|
||||
'nsx-edge-pool', lock_file_prefix='edge-bind-'):
|
||||
self.nsxv_manager.vcns.set_system_control(
|
||||
dhcp_edge_id,
|
||||
[RP_FILTER_PROPERTY_OFF_TEMPLATE % ('all', '0')])
|
||||
@ -1027,8 +1018,7 @@ class EdgeManager(object):
|
||||
if vnic_index:
|
||||
vnic_id = 'vNic_%d' % vnic_index
|
||||
with locking.LockManager.get_lock(
|
||||
str(edge_id), lock_file_prefix='nsxv-dhcp-config-',
|
||||
external=True):
|
||||
str(edge_id), lock_file_prefix='nsxv-dhcp-config-'):
|
||||
sysctl_props = []
|
||||
h, sysctl = self.nsxv_manager.vcns.get_system_control(edge_id)
|
||||
if sysctl:
|
||||
@ -1047,8 +1037,7 @@ class EdgeManager(object):
|
||||
if vnic_index:
|
||||
vnic_id = 'vNic_%d' % vnic_index
|
||||
with locking.LockManager.get_lock(
|
||||
str(edge_id), lock_file_prefix='nsxv-dhcp-config-',
|
||||
external=True):
|
||||
str(edge_id), lock_file_prefix='nsxv-dhcp-config-'):
|
||||
h, sysctl = self.nsxv_manager.vcns.get_system_control(edge_id)
|
||||
if sysctl:
|
||||
sysctl_props = sysctl['property']
|
||||
@ -1175,7 +1164,7 @@ class EdgeManager(object):
|
||||
Return True if the logical router is bound to a new edge.
|
||||
"""
|
||||
with locking.LockManager.get_lock(
|
||||
"edge-router", lock_file_prefix="bind-", external=True):
|
||||
"edge-router", lock_file_prefix="bind-"):
|
||||
optional_edge_ids = []
|
||||
conflict_edge_ids = []
|
||||
for router_id in optional_router_ids:
|
||||
@ -1234,7 +1223,7 @@ class EdgeManager(object):
|
||||
Return True if no logical router bound to the edge.
|
||||
"""
|
||||
with locking.LockManager.get_lock(
|
||||
"edge-router", lock_file_prefix="bind-", external=True):
|
||||
"edge-router", lock_file_prefix="bind-"):
|
||||
# free edge if no other routers bound to the edge
|
||||
router_ids = self.get_routers_on_same_edge(context, router_id)
|
||||
if router_ids == [router_id]:
|
||||
@ -1248,7 +1237,7 @@ class EdgeManager(object):
|
||||
conflict_network_ids,
|
||||
intf_num=0):
|
||||
with locking.LockManager.get_lock(
|
||||
"edge-router", lock_file_prefix="bind-", external=True):
|
||||
"edge-router", lock_file_prefix="bind-"):
|
||||
router_ids = self.get_routers_on_same_edge(context, router_id)
|
||||
if set(router_ids) & set(conflict_router_ids):
|
||||
return True
|
||||
@ -1364,8 +1353,7 @@ def create_dhcp_bindings(context, nsxv_manager, network_id, bindings):
|
||||
if edge_id:
|
||||
with locking.LockManager.get_lock(
|
||||
str(edge_id),
|
||||
lock_file_prefix='nsxv-dhcp-config-',
|
||||
external=True):
|
||||
lock_file_prefix='nsxv-dhcp-config-'):
|
||||
for binding in bindings:
|
||||
nsxv_manager.vcns.create_dhcp_binding(edge_id, binding)
|
||||
bindings_get = get_dhcp_binding_mappings(nsxv_manager, edge_id)
|
||||
@ -1401,8 +1389,7 @@ def delete_dhcp_binding(context, nsxv_manager, network_id, mac_address):
|
||||
if edge_id and dhcp_binding:
|
||||
with locking.LockManager.get_lock(
|
||||
str(edge_id),
|
||||
lock_file_prefix='nsxv-dhcp-config-',
|
||||
external=True):
|
||||
lock_file_prefix='nsxv-dhcp-config-'):
|
||||
nsxv_manager.vcns.delete_dhcp_binding(
|
||||
edge_id, dhcp_binding.binding_id)
|
||||
nsxv_db.delete_edge_dhcp_static_binding(
|
||||
|
Loading…
x
Reference in New Issue
Block a user