Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

(WIP) Performance mode 4 for create/delete member #1020

Open
wants to merge 1 commit into
base: stable/pike
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Performance mode 4 for create/delete member
zhaoqin-github committed Oct 27, 2020
commit a3dd679fab8bd2ee8a7185f716d4da20353978de
34 changes: 18 additions & 16 deletions f5lbaasdriver/v2/bigip/driver_v2.py
Original file line number Diff line number Diff line change
@@ -46,7 +46,7 @@
cfg.IntOpt(
'f5_driver_perf_mode',
default=0,
help=('switch driver performance mode from 0 to 3')
help=('switch driver performance mode from 0 to 4')
),
cfg.StrOpt(
'f5_loadbalancer_pool_scheduler_driver_v2',
@@ -211,7 +211,7 @@ def _append_listeners(self, context, service, listener):
return

def get_db_listener():
if cfg.CONF.f5_driver_perf_mode == 3:
if cfg.CONF.f5_driver_perf_mode in (3, 4):
return listener
else:
return self.driver.plugin.db.get_listener(
@@ -240,7 +240,7 @@ def _append_pools_monitors(self, context, service, pool):
return

def get_db_pool():
if cfg.CONF.f5_driver_perf_mode == 3:
if cfg.CONF.f5_driver_perf_mode == (3, 4):
return pool
else:
return self.driver.plugin.db.get_pool(
@@ -274,7 +274,7 @@ def get_db_pool():
return

def get_db_healthmonitor():
if cfg.CONF.f5_driver_perf_mode == 3:
if cfg.CONF.f5_driver_perf_mode in (3, 4):
return pool.healthmonitor
else:
return self.driver.plugin.db.get_healthmonitor(
@@ -466,7 +466,7 @@ def append_pools_monitors(context, loadbalancer, service):
self._append_pools_monitors(context, service, pool)
break

if cfg.CONF.f5_driver_perf_mode in (2, 3):
if cfg.CONF.f5_driver_perf_mode in (2, 3, 4):
# Listener may have default pool who are already created.
# Utilize default behavior to append members
# Listener does not have l7policies.
@@ -514,7 +514,7 @@ def delete(self, context, listener):
def append_listeners(context, lb, service):
self._append_listeners(context, service, listener)

if cfg.CONF.f5_driver_perf_mode in (2, 3):
if cfg.CONF.f5_driver_perf_mode in (2, 3, 4):
# L7policy should already be deleted.
# Needn't modify pool.
self._call_rpc(
@@ -564,7 +564,7 @@ def append_listeners(context, loadbalancer, service):
def append_pools_monitors(context, loadbalancer, service):
self._append_pools_monitors(context, service, pool)

if cfg.CONF.f5_driver_perf_mode in (2, 3):
if cfg.CONF.f5_driver_perf_mode in (2, 3, 4):
# Pool and l7plicies ???
# Pool may be associated with listener, maybe not.
# Pool has no members
@@ -620,7 +620,7 @@ def append_listeners(context, loadbalancer, service):
def append_pools_monitors(context, loadbalancer, service):
self._append_pools_monitors(context, service, pool)

if cfg.CONF.f5_driver_perf_mode in (2, 3):
if cfg.CONF.f5_driver_perf_mode in (2, 3, 4):
# Pool may be associated with a listener
# Utilize default behavior to load member, l7policy and rule
self._call_rpc(
@@ -667,8 +667,9 @@ def create(self, context, member):
def append_pools_monitors(context, loadbalancer, service):
self._append_pools_monitors(context, service, member.pool)

if cfg.CONF.f5_driver_perf_mode in (2, 3):
if cfg.CONF.f5_driver_perf_mode in (2, 3, 4):
# Utilize default behavior to append all members
# In mode 4, it will only include one pool member.
self._call_rpc(
context, lb, member, api_dict, 'create_member',
append_listeners=lambda *args: None,
@@ -779,8 +780,9 @@ def delete(self, context, member):
def append_pools_monitors(context, loadbalancer, service):
self._append_pools_monitors(context, service, member.pool)

if cfg.CONF.f5_driver_perf_mode in (2, 3):
if cfg.CONF.f5_driver_perf_mode in (2, 3, 4):
# Utilize default behavior to append all members
# In mode 4, it will only include one pool member.
agent_host, service = self._setup_crud(
context, lb, member,
append_listeners=lambda *args: None,
@@ -838,7 +840,7 @@ def create(self, context, health_monitor):
def append_pools_monitors(context, loadbalancer, service):
self._append_pools_monitors(context, service, health_monitor.pool)

if cfg.CONF.f5_driver_perf_mode in (2, 3):
if cfg.CONF.f5_driver_perf_mode in (2, 3, 4):
# Utilize default behavior to append all members
self._call_rpc(
context, lb, health_monitor, api_dict, 'create_health_monitor',
@@ -884,7 +886,7 @@ def delete(self, context, health_monitor):
def append_pools_monitors(context, loadbalancer, service):
self._append_pools_monitors(context, service, health_monitor.pool)

if cfg.CONF.f5_driver_perf_mode in (2, 3):
if cfg.CONF.f5_driver_perf_mode in (2, 3, 4):
# Utilize default behavior to append all members
self._call_rpc(
context, lb, health_monitor, api_dict, 'delete_health_monitor',
@@ -916,7 +918,7 @@ def append_pools_monitors(context, loadbalancer, service):
self._append_pools_monitors(
context, service, policy.listener.default_pool)

if cfg.CONF.f5_driver_perf_mode in (2, 3):
if cfg.CONF.f5_driver_perf_mode in (2, 3, 4):
# Utilize default behavior to load policies and rules
# Listener may have default pool
# Utilize default behavior to load members
@@ -966,7 +968,7 @@ def append_pools_monitors(context, loadbalancer, service):
self._append_pools_monitors(
context, service, policy.listener.default_pool)

if cfg.CONF.f5_driver_perf_mode in (2, 3):
if cfg.CONF.f5_driver_perf_mode in (2, 3, 4):
# Utilize default behavior to load policies and rules
# Listener may have default pool
# Utilize default behavior to load members
@@ -998,7 +1000,7 @@ def append_pools_monitors(context, loadbalancer, service):
self._append_pools_monitors(
context, service, rule.policy.listener.default_pool)

if cfg.CONF.f5_driver_perf_mode in (2, 3):
if cfg.CONF.f5_driver_perf_mode in (2, 3, 4):
# Utilize default behavior to load policies and rules
# Listener may have default pool
# Utilize default behavior to load members
@@ -1048,7 +1050,7 @@ def append_pools_monitors(context, loadbalancer, service):
self._append_pools_monitors(
context, service, rule.policy.listener.default_pool)

if cfg.CONF.f5_driver_perf_mode in (2, 3):
if cfg.CONF.f5_driver_perf_mode in (2, 3, 4):
# Utilize default behavior to load policies and rules
# Listener may have default pool
# Utilize default behavior to load members
27 changes: 18 additions & 9 deletions f5lbaasdriver/v2/bigip/service_builder.py
Original file line number Diff line number Diff line change
@@ -17,6 +17,7 @@
import datetime
import json

from neutron.plugins.common import constants as plugin_constants
from neutron_lbaas.common import keystone
from oslo_config import cfg
from oslo_log import helpers as log_helpers
@@ -474,7 +475,7 @@ def _get_l7policies(self, context, loadbalancer, listeners):
listener_ids = [listener['id'] for listener in listeners]

def get_db_policies():
if cfg.CONF.f5_driver_perf_mode in (1, 3):
if cfg.CONF.f5_driver_perf_mode in (1, 3, 4):
db_policies = []
for l1 in loadbalancer.listeners:
for l2 in listeners:
@@ -511,7 +512,7 @@ def _get_l7policy_rules(self, context, loadbalancer, l7policies):
for pol_id in policy_ids:

def get_db_rules():
if cfg.CONF.f5_driver_perf_mode in (1, 3):
if cfg.CONF.f5_driver_perf_mode in (1, 3, 4):
for listener in loadbalancer.listeners:
for policy in listener.l7_policies:
if policy.id == pol_id:
@@ -543,7 +544,7 @@ def _get_listeners(self, context, loadbalancer):
listeners = []

def get_db_listeners():
if cfg.CONF.f5_driver_perf_mode in (1, 3):
if cfg.CONF.f5_driver_perf_mode in (1, 3, 4):
return loadbalancer.listeners
else:
return self.plugin.db.get_listeners(
@@ -575,7 +576,7 @@ def _get_pools_and_healthmonitors(self, context, loadbalancer):
pools = []

def get_db_pools():
if cfg.CONF.f5_driver_perf_mode in (1, 3):
if cfg.CONF.f5_driver_perf_mode in (1, 3, 4):
return loadbalancer.pools
else:
return self.plugin.db.get_pools(
@@ -592,7 +593,7 @@ def get_db_pools():
healthmonitor_id = pool.healthmonitor_id

def get_db_healthmonitor():
if cfg.CONF.f5_driver_perf_mode in (1, 3):
if cfg.CONF.f5_driver_perf_mode in (1, 3, 4):
return pool.healthmonitor
else:
return self.plugin.db.get_healthmonitor(
@@ -614,12 +615,20 @@ def _get_members(self, context, loadbalancer, pools,
pool_members = []

def get_db_members():
if cfg.CONF.f5_driver_perf_mode in (1, 3):
if cfg.CONF.f5_driver_perf_mode in (1, 3, 4):
members = []
for p1 in loadbalancer.pools:
for p2 in pools:
if p1.id == p2['id']:
members.extend([m for m in p1.members])
if cfg.CONF.f5_driver_perf_mode != 4:
members.extend([m for m in p1.members])
else:
for m in p1.members:
if m.provisioning_status in (
plugin_constants.PENDING_CREATE,
plugin_constants.PENDING_UPDATE,
plugin_constants.PENDING_DELETE):
members.append(m)
return members
else:
return self.plugin.db.get_pool_members(
@@ -678,7 +687,7 @@ def _l7policy_to_dict(self, l7policy):
# Listener attribte of policy fetched from loadbalancer object may be
# None. However, l7policy.to_api_dict() assumes it is not None. So we
# append its listener id.
if cfg.CONF.f5_driver_perf_mode in (1, 3) \
if cfg.CONF.f5_driver_perf_mode in (1, 3, 4) \
and l7policy_dict['listener_id'] \
and len(l7policy_dict['listeners']) == 0:
l7policy_dict['listeners'].append(
@@ -697,7 +706,7 @@ def _l7rule_to_dict(self, l7rule, l7policy_id):
# Policy attribte of rule fetched from loadbalancer object may be
# None. However, l7rule.to_api_dict() assumes it is not None. So we
# append its policy id.
if cfg.CONF.f5_driver_perf_mode in (1, 3) and l7policy_id \
if cfg.CONF.f5_driver_perf_mode in (1, 3, 4) and l7policy_id \
and len(l7rule_dict['policies']) == 0:
l7rule_dict['policies'].append({'id': l7policy_id})