NSX_V3: make sure that member creation is serialized
The serailizes the threads. This also removes unnecessary check the number of member in a pool before adding the member to the pool. Co-Authored-By: Tong Liu <tongl@vmware.com> Change-Id: Ief2c655fcc7652f16ae1fc2c0b3ed0697f15ef27
This commit is contained in:
parent
d18e17af8f
commit
8a752f3a31
@ -20,6 +20,7 @@ from oslo_utils import excutils
|
|||||||
|
|
||||||
from vmware_nsx._i18n import _
|
from vmware_nsx._i18n import _
|
||||||
from vmware_nsx.common import exceptions as nsx_exc
|
from vmware_nsx.common import exceptions as nsx_exc
|
||||||
|
from vmware_nsx.common import locking
|
||||||
from vmware_nsx.db import db as nsx_db
|
from vmware_nsx.db import db as nsx_db
|
||||||
from vmware_nsx.services.lbaas import base_mgr
|
from vmware_nsx.services.lbaas import base_mgr
|
||||||
from vmware_nsx.services.lbaas import lb_const
|
from vmware_nsx.services.lbaas import lb_const
|
||||||
@ -104,6 +105,11 @@ class EdgeMemberManager(base_mgr.Nsxv3LoadbalancerBaseManager):
|
|||||||
|
|
||||||
@log_helpers.log_method_call
|
@log_helpers.log_method_call
|
||||||
def create(self, context, member):
|
def create(self, context, member):
|
||||||
|
with locking.LockManager.get_lock('member-%s' %
|
||||||
|
str(member.pool.loadbalancer_id)):
|
||||||
|
self._member_create(context, member)
|
||||||
|
|
||||||
|
def _member_create(self, context, member):
|
||||||
lb_id = member.pool.loadbalancer_id
|
lb_id = member.pool.loadbalancer_id
|
||||||
pool_id = member.pool.id
|
pool_id = member.pool.id
|
||||||
loadbalancer = member.pool.loadbalancer
|
loadbalancer = member.pool.loadbalancer
|
||||||
@ -116,8 +122,6 @@ class EdgeMemberManager(base_mgr.Nsxv3LoadbalancerBaseManager):
|
|||||||
|
|
||||||
pool_client = self.core_plugin.nsxlib.load_balancer.pool
|
pool_client = self.core_plugin.nsxlib.load_balancer.pool
|
||||||
service_client = self.core_plugin.nsxlib.load_balancer.service
|
service_client = self.core_plugin.nsxlib.load_balancer.service
|
||||||
pool_members = self.lbv2_driver.plugin.get_pool_members(
|
|
||||||
context, pool_id)
|
|
||||||
|
|
||||||
network = lb_utils.get_network_from_subnet(
|
network = lb_utils.get_network_from_subnet(
|
||||||
context, self.core_plugin, member.subnet_id)
|
context, self.core_plugin, member.subnet_id)
|
||||||
@ -136,7 +140,7 @@ class EdgeMemberManager(base_mgr.Nsxv3LoadbalancerBaseManager):
|
|||||||
lb_pool_id = binding.get('lb_pool_id')
|
lb_pool_id = binding.get('lb_pool_id')
|
||||||
lb_binding = nsx_db.get_nsx_lbaas_loadbalancer_binding(
|
lb_binding = nsx_db.get_nsx_lbaas_loadbalancer_binding(
|
||||||
context.session, lb_id)
|
context.session, lb_id)
|
||||||
if not lb_binding and len(pool_members) == 1:
|
if not lb_binding:
|
||||||
nsx_router_id = nsx_db.get_nsx_router_id(context.session,
|
nsx_router_id = nsx_db.get_nsx_router_id(context.session,
|
||||||
router_id)
|
router_id)
|
||||||
lb_service = service_client.get_router_lb_service(
|
lb_service = service_client.get_router_lb_service(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user