Fixes bug
1020024
The router will simply use the QuantumManager which stores the instance
of the plugin being used by the Quantum server. Changes to unit tests
are for ensuring plugin instances are recycled across tests.
Change-Id: I339a40ee6fef74d938245e9c50c7ed695d866e3b
def __init__(self, **local_config):
mapper = routes_mapper.Mapper()
- plugin_provider = cfg.CONF.core_plugin
- LOG.debug("Plugin location:%s", plugin_provider)
- plugin = manager.get_plugin(plugin_provider)
+ plugin = manager.QuantumManager.get_plugin()
col_kwargs = dict(collection_actions=COLLECTION_ACTIONS,
member_actions=MEMBER_ACTIONS)
LOG = logging.getLogger(__name__)
-def get_plugin(plugin_provider):
- # If the plugin can't be found let them know gracefully
- try:
- LOG.info("Loading Plugin: %s" % plugin_provider)
- plugin_klass = importutils.import_class(plugin_provider)
- except ClassNotFound:
- LOG.exception("Error loading plugin")
- raise Exception("Plugin not found. You can install a "
- "plugin with: pip install <plugin-name>\n"
- "Example: pip install quantum-sample-plugin")
- return plugin_klass()
-
-
class QuantumManager(object):
_instance = None
# for performance metrics.
plugin_provider = cfg.CONF.core_plugin
LOG.debug("Plugin location:%s", plugin_provider)
- self.plugin = get_plugin(plugin_provider)
+ # If the plugin can't be found let them know gracefully
+ try:
+ LOG.info("Loading Plugin: %s" % plugin_provider)
+ plugin_klass = importutils.import_class(plugin_provider)
+ except ClassNotFound:
+ LOG.exception("Error loading plugin")
+ raise Exception("Plugin not found. You can install a "
+ "plugin with: pip install <plugin-name>\n"
+ "Example: pip install quantum-sample-plugin")
+ self.plugin = plugin_klass()
@classmethod
def get_plugin(cls):
from quantum.common import config
from quantum.common import exceptions as q_exc
from quantum import context
+from quantum.manager import QuantumManager
from quantum.openstack.common import cfg
# will get around this.
def setUp(self):
plugin = 'quantum.quantum_plugin_base_v2.QuantumPluginBaseV2'
+ # Ensure 'stale' patched copies of the plugin are never returned
+ QuantumManager._instance = None
# Create the default configurations
args = ['--config-file', etcdir('quantum.conf.test')]
config.parse(args=args)
from quantum.common import exceptions as q_exc
from quantum import context
from quantum.db import api as db
+from quantum.manager import QuantumManager
from quantum.openstack.common import cfg
from quantum.tests.unit.testlib_api import create_request
from quantum.wsgi import Serializer, JSONDeserializer
# doesn't like when the plugin changes ;)
db._ENGINE = None
db._MAKER = None
+ # Make sure at each test a new instance of the plugin is returned
+ QuantumManager._instance = None
self._tenant_id = 'test-tenant'