From: Abhishek Raut Date: Sat, 14 Jun 2014 15:14:24 +0000 (-0700) Subject: Control active number of REST calls from Cisco N1kv plugin to VSM X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=3eef1ae80fcd7d9fe82b5c7485702991992b2766;p=openstack-build%2Fneutron-build.git Control active number of REST calls from Cisco N1kv plugin to VSM Add a config parameter to Cisco N1kv plugin to determine the total number of active REST calls that can be made to the VSM. Change-Id: I66433ef5673d35badcd3adc2defa43e578d4094f Closes-Bug: #1329099 --- diff --git a/etc/neutron/plugins/cisco/cisco_plugins.ini b/etc/neutron/plugins/cisco/cisco_plugins.ini index e065e73a4..5249bb8cd 100644 --- a/etc/neutron/plugins/cisco/cisco_plugins.ini +++ b/etc/neutron/plugins/cisco/cisco_plugins.ini @@ -132,3 +132,7 @@ # # poll_duration = # Example: poll_duration = 180 + +# (IntOpt) Number of threads to use to make HTTP requests to the VSM. +# +# http_pool_size = 4 diff --git a/neutron/plugins/cisco/common/config.py b/neutron/plugins/cisco/common/config.py index a4a1196a8..c3f25093e 100644 --- a/neutron/plugins/cisco/common/config.py +++ b/neutron/plugins/cisco/common/config.py @@ -80,6 +80,8 @@ cisco_n1k_opts = [ help=_("N1K policy profile for network node")), cfg.StrOpt('poll_duration', default='10', help=_("N1K Policy profile polling duration in seconds")), + cfg.IntOpt('http_pool_size', default=4, + help=_("Number of threads to use to make HTTP requests")), ] cfg.CONF.register_opts(cisco_opts, "CISCO") diff --git a/neutron/plugins/cisco/n1kv/n1kv_client.py b/neutron/plugins/cisco/n1kv/n1kv_client.py index 7389eadfb..541750835 100644 --- a/neutron/plugins/cisco/n1kv/n1kv_client.py +++ b/neutron/plugins/cisco/n1kv/n1kv_client.py @@ -18,6 +18,7 @@ # @author: Rudrajit Tapadar, Cisco Systems, Inc. import base64 +import eventlet import netaddr import requests @@ -28,6 +29,7 @@ from neutron.openstack.common import log as logging from neutron.plugins.cisco.common import cisco_constants as c_const from neutron.plugins.cisco.common import cisco_credentials_v2 as c_cred from neutron.plugins.cisco.common import cisco_exceptions as c_exc +from neutron.plugins.cisco.common import config as c_conf from neutron.plugins.cisco.db import network_db_v2 from neutron.plugins.cisco.extensions import n1kv @@ -122,6 +124,8 @@ class Client(object): encap_profiles_path = "/encapsulation-profile" encap_profile_path = "/encapsulation-profile/%s" + pool = eventlet.GreenPool(c_conf.CISCO_N1K.http_pool_size) + def __init__(self, **kwargs): """Initialize a new client for the plugin.""" self.format = 'json' @@ -433,11 +437,12 @@ class Client(object): body = jsonutils.dumps(body, indent=2) LOG.debug(_("req: %s"), body) try: - resp = requests.request(method, - url=action, - data=body, - headers=headers, - timeout=self.timeout) + resp = self.pool.spawn(requests.request, + method, + url=action, + data=body, + headers=headers, + timeout=self.timeout).wait() except Exception as e: raise c_exc.VSMConnectionFailed(reason=e) LOG.debug(_("status_code %s"), resp.status_code)