In order to improve the performance of Tacker in commercial systems, This patch provides the following code refactoring to improve system performance. 1. Reduce transaction of getting OpenStack resource from Heat (for Tacker v2 API) 2. Support subscription filter of vnfdId (for Tacker v1 API) 3. Refactor the Tacker Output Logs (for Tacker v1/v2 API) Implement: blueprint system-performance-management Change-Id: I8879a690e455fb196c2e28a251bf46cea7376b56
78 lines
2.8 KiB
Python
78 lines
2.8 KiB
Python
# Copyright 2013, 2014 Intel Corporation.
|
|
# All Rights Reserved.
|
|
#
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
#
|
|
|
|
from oslo_log import log as logging
|
|
|
|
import stevedore.named
|
|
|
|
from tacker._i18n import _
|
|
|
|
LOG = logging.getLogger(__name__)
|
|
|
|
|
|
class DriverManager(object):
|
|
def __init__(self, namespace, driver_list, **kwargs):
|
|
super(DriverManager, self).__init__()
|
|
manager = stevedore.named.NamedExtensionManager(
|
|
namespace, driver_list, invoke_on_load=True, **kwargs)
|
|
|
|
drivers = {}
|
|
for ext in manager:
|
|
type_ = ext.obj.get_type()
|
|
if type_ in drivers:
|
|
msg = _("driver '%(new_driver)s' ignored because "
|
|
"driver '%(old_driver)s' is already "
|
|
"registered for driver '%(type)s'") % {
|
|
'new_driver': ext.name,
|
|
'old_driver': drivers[type].name,
|
|
'type': type_}
|
|
LOG.error(msg)
|
|
raise SystemExit(msg)
|
|
drivers[type_] = ext
|
|
self._drivers = dict((type_, ext.obj)
|
|
for (type_, ext) in drivers.items())
|
|
LOG.debug("Registered drivers from %(namespace)s: %(keys)s",
|
|
{'namespace': namespace, 'keys': self._drivers.keys()})
|
|
|
|
@staticmethod
|
|
def _driver_name(driver):
|
|
return driver.__module__ + '.' + driver.__class__.__name__
|
|
|
|
def register(self, type_, driver):
|
|
if type_ in self._drivers:
|
|
new_driver = self._driver_name(driver)
|
|
old_driver = self._driver_name(self._drivers[type_])
|
|
msg = _("can't load driver '%(new_driver)s' because "
|
|
"driver '%(old_driver)s' is already "
|
|
"registered for driver '%(type)s'") % {
|
|
'new_driver': new_driver,
|
|
'old_driver': old_driver,
|
|
'type': type_}
|
|
LOG.error(msg)
|
|
raise SystemExit(msg)
|
|
self._drivers[type_] = driver
|
|
|
|
def invoke(self, type_, method_name, **kwargs):
|
|
driver = self._drivers[type_]
|
|
return getattr(driver, method_name)(**kwargs)
|
|
|
|
def __getitem__(self, type_):
|
|
return self._drivers[type_]
|
|
|
|
def __contains__(self, type_):
|
|
return type_ in self._drivers
|