Merge lp:~salvatore-orlando/neutron/bug804237 into lp:neutron/diablo

Proposed by Salvatore Orlando
Status: Merged
Approved by: Somik Behera
Approved revision: 24
Merged at revision: 22
Proposed branch: lp:~salvatore-orlando/neutron/bug804237
Merge into: lp:neutron/diablo
Diff against target: 261 lines (+29/-34)
5 files modified
quantum/api/__init__.py (+8/-7)
quantum/api/api_common.py (+2/-6)
quantum/api/networks.py (+7/-7)
quantum/api/ports.py (+10/-10)
quantum/manager.py (+2/-4)
To merge this branch: bzr merge lp:~salvatore-orlando/neutron/bug804237
Reviewer Review Type Date Requested Status
Brad Hall (community) Approve
Somik Behera netstack-core Approve
dan wendlandt Pending
Review via email: mp+66767@code.launchpad.net

Description of the change

The proposed bug fix will avoid loading the plugin multiple times by loading it once when API routes are set up.
The same plugin instance will be passed to all controllers.

To post a comment you must log in.
Revision history for this message
Salvatore Orlando (salvatore-orlando) wrote :

Moving back to WIP until we merge the unit-tests branch

Revision history for this message
Somik Behera (somikbehera) wrote :

Changes look good and uptil they pass the existing unit test, I dont see this change requiring full exhaustive tests, since if this change works ok for couple of API tests, it will work for everything else.

This seems to be a critical fix, so I vote that we merge it to trunk.

review: Approve (netstack-core)
Revision history for this message
Brad Hall (bgh) wrote :

Looks good to me

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'quantum/api/__init__.py'
2--- quantum/api/__init__.py 2011-06-08 10:21:47 +0000
3+++ quantum/api/__init__.py 2011-07-05 10:28:00 +0000
4@@ -24,6 +24,7 @@
5 import webob.dec
6 import webob.exc
7
8+from quantum import manager
9 from quantum.api import faults
10 from quantum.api import networks
11 from quantum.api import ports
12@@ -46,32 +47,32 @@
13 super(APIRouterV01, self).__init__(mapper)
14
15 def _setup_routes(self, mapper):
16-
17+ # Loads the quantum plugin
18+ plugin = manager.QuantumManager().get_plugin()
19 uri_prefix = '/tenants/{tenant_id}/'
20 mapper.resource('network', 'networks',
21- controller=networks.Controller(),
22+ controller=networks.Controller(plugin),
23 path_prefix=uri_prefix)
24 mapper.resource('port', 'ports',
25- controller=ports.Controller(),
26+ controller=ports.Controller(plugin),
27 parent_resource=dict(member_name='network',
28 collection_name=uri_prefix +\
29 'networks'))
30-
31 mapper.connect("get_resource",
32 uri_prefix + 'networks/{network_id}/' \
33 'ports/{id}/attachment{.format}',
34- controller=ports.Controller(),
35+ controller=ports.Controller(plugin),
36 action="get_resource",
37 conditions=dict(method=['GET']))
38 mapper.connect("attach_resource",
39 uri_prefix + 'networks/{network_id}/' \
40 'ports/{id}/attachment{.format}',
41- controller=ports.Controller(),
42+ controller=ports.Controller(plugin),
43 action="attach_resource",
44 conditions=dict(method=['PUT']))
45 mapper.connect("detach_resource",
46 uri_prefix + 'networks/{network_id}/' \
47 'ports/{id}/attachment{.format}',
48- controller=ports.Controller(),
49+ controller=ports.Controller(plugin),
50 action="detach_resource",
51 conditions=dict(method=['DELETE']))
52
53=== modified file 'quantum/api/api_common.py'
54--- quantum/api/api_common.py 2011-05-31 17:15:00 +0000
55+++ quantum/api/api_common.py 2011-07-05 10:28:00 +0000
56@@ -19,7 +19,6 @@
57
58 from webob import exc
59
60-from quantum import manager
61 from quantum.common import wsgi
62
63 XML_NS_V01 = 'http://netstack.org/quantum/api/v0.1'
64@@ -30,8 +29,8 @@
65 class QuantumController(wsgi.Controller):
66 """ Base controller class for Quantum API """
67
68- def __init__(self, plugin_conf_file=None):
69- self._setup_network_manager()
70+ def __init__(self, plugin):
71+ self._plugin = plugin
72 super(QuantumController, self).__init__()
73
74 def _parse_request_params(self, req, params):
75@@ -65,6 +64,3 @@
76 raise exc.HTTPBadRequest(msg)
77 results[param_name] = param_value or param.get('default-value')
78 return results
79-
80- def _setup_network_manager(self):
81- self.network_manager = manager.QuantumManager().get_manager()
82
83=== modified file 'quantum/api/networks.py'
84--- quantum/api/networks.py 2011-06-08 10:21:47 +0000
85+++ quantum/api/networks.py 2011-07-05 10:28:00 +0000
86@@ -40,9 +40,9 @@
87 },
88 }
89
90- def __init__(self, plugin_conf_file=None):
91+ def __init__(self, plugin):
92 self._resource_name = 'network'
93- super(Controller, self).__init__()
94+ super(Controller, self).__init__(plugin)
95
96 def index(self, request, tenant_id):
97 """ Returns a list of network ids """
98@@ -51,7 +51,7 @@
99
100 def _items(self, request, tenant_id, is_detail):
101 """ Returns a list of networks. """
102- networks = self.network_manager.get_all_networks(tenant_id)
103+ networks = self._plugin.get_all_networks(tenant_id)
104 builder = networks_view.get_view_builder(request)
105 result = [builder.build(network, is_detail)['network']
106 for network in networks]
107@@ -60,7 +60,7 @@
108 def show(self, request, tenant_id, id):
109 """ Returns network details for the given network id """
110 try:
111- network = self.network_manager.get_network_details(
112+ network = self._plugin.get_network_details(
113 tenant_id, id)
114 builder = networks_view.get_view_builder(request)
115 #build response with details
116@@ -78,7 +78,7 @@
117 self._network_ops_param_list)
118 except exc.HTTPError as e:
119 return faults.Fault(e)
120- network = self.network_manager.\
121+ network = self._plugin.\
122 create_network(tenant_id,
123 request_params['network-name'])
124 builder = networks_view.get_view_builder(request)
125@@ -94,7 +94,7 @@
126 except exc.HTTPError as e:
127 return faults.Fault(e)
128 try:
129- network = self.network_manager.rename_network(tenant_id,
130+ network = self._plugin.rename_network(tenant_id,
131 id, request_params['network-name'])
132
133 builder = networks_view.get_view_builder(request)
134@@ -106,7 +106,7 @@
135 def delete(self, request, tenant_id, id):
136 """ Destroys the network with the given id """
137 try:
138- self.network_manager.delete_network(tenant_id, id)
139+ self._plugin.delete_network(tenant_id, id)
140 return exc.HTTPAccepted()
141 except exception.NetworkNotFound as e:
142 return faults.Fault(faults.NetworkNotFound(e))
143
144=== modified file 'quantum/api/ports.py'
145--- quantum/api/ports.py 2011-06-08 10:21:47 +0000
146+++ quantum/api/ports.py 2011-07-05 10:28:00 +0000
147@@ -42,9 +42,9 @@
148 "attributes": {
149 "port": ["id", "state"], }, }, }
150
151- def __init__(self, plugin_conf_file=None):
152+ def __init__(self, plugin):
153 self._resource_name = 'port'
154- super(Controller, self).__init__()
155+ super(Controller, self).__init__(plugin)
156
157 def index(self, request, tenant_id, network_id):
158 """ Returns a list of port ids for a given network """
159@@ -53,7 +53,7 @@
160 def _items(self, request, tenant_id, network_id, is_detail):
161 """ Returns a list of networks. """
162 try:
163- ports = self.network_manager.get_all_ports(tenant_id, network_id)
164+ ports = self._plugin.get_all_ports(tenant_id, network_id)
165 builder = ports_view.get_view_builder(request)
166 result = [builder.build(port, is_detail)['port']
167 for port in ports]
168@@ -64,7 +64,7 @@
169 def show(self, request, tenant_id, network_id, id):
170 """ Returns port details for given port and network """
171 try:
172- port = self.network_manager.get_port_details(
173+ port = self._plugin.get_port_details(
174 tenant_id, network_id, id)
175 builder = ports_view.get_view_builder(request)
176 #build response with details
177@@ -84,7 +84,7 @@
178 except exc.HTTPError as e:
179 return faults.Fault(e)
180 try:
181- port = self.network_manager.create_port(tenant_id,
182+ port = self._plugin.create_port(tenant_id,
183 network_id,
184 request_params['port-state'])
185 builder = ports_view.get_view_builder(request)
186@@ -104,7 +104,7 @@
187 except exc.HTTPError as e:
188 return faults.Fault(e)
189 try:
190- port = self.network_manager.update_port(tenant_id, network_id, id,
191+ port = self._plugin.update_port(tenant_id, network_id, id,
192 request_params['port-state'])
193 builder = ports_view.get_view_builder(request)
194 result = builder.build(port, True)
195@@ -120,7 +120,7 @@
196 """ Destroys the port with the given id """
197 #look for port state in request
198 try:
199- self.network_manager.delete_port(tenant_id, network_id, id)
200+ self._plugin.delete_port(tenant_id, network_id, id)
201 return exc.HTTPAccepted()
202 #TODO(salvatore-orlando): Handle portInUse error
203 except exception.NetworkNotFound as e:
204@@ -132,7 +132,7 @@
205
206 def get_resource(self, request, tenant_id, network_id, id):
207 try:
208- result = self.network_manager.get_interface_details(
209+ result = self._plugin.get_interface_details(
210 tenant_id, network_id, id)
211 return dict(attachment=result)
212 except exception.NetworkNotFound as e:
213@@ -151,7 +151,7 @@
214 except exc.HTTPError as e:
215 return faults.Fault(e)
216 try:
217- self.network_manager.plug_interface(tenant_id,
218+ self._plugin.plug_interface(tenant_id,
219 network_id, id,
220 request_params['attachment-id'])
221 return exc.HTTPAccepted()
222@@ -167,7 +167,7 @@
223 #TODO - Complete implementation of these APIs
224 def detach_resource(self, request, tenant_id, network_id, id):
225 try:
226- self.network_manager.unplug_interface(tenant_id,
227+ self._plugin.unplug_interface(tenant_id,
228 network_id, id)
229 return exc.HTTPAccepted()
230 except exception.NetworkNotFound as e:
231
232=== modified file 'quantum/manager.py'
233--- quantum/manager.py 2011-06-08 10:21:47 +0000
234+++ quantum/manager.py 2011-07-05 10:28:00 +0000
235@@ -26,10 +26,9 @@
236 """
237 import gettext
238 import os
239+
240 gettext.install('quantum', unicode=1)
241
242-import os
243-
244 from common import utils
245 from quantum_plugin_base import QuantumPluginBase
246
247@@ -51,7 +50,6 @@
248 else:
249 self.configuration_file = config
250 plugin_location = utils.getPluginFromConfig(self.configuration_file)
251- print "PLUGIN LOCATION:%s" % plugin_location
252 plugin_klass = utils.import_class(plugin_location)
253 if not issubclass(plugin_klass, QuantumPluginBase):
254 raise Exception("Configured Quantum plug-in " \
255@@ -61,5 +59,5 @@
256 "All compatibility tests passed\n")
257 self.plugin = plugin_klass()
258
259- def get_manager(self):
260+ def get_plugin(self):
261 return self.plugin

Subscribers

People subscribed via source and target branches