summaryrefslogtreecommitdiff
path: root/oslo_db/concurrency.py
diff options
context:
space:
mode:
authorDoug Hellmann <doug@doughellmann.com>2014-12-12 14:23:13 -0500
committerRoman Podoliaka <rpodolyaka@mirantis.com>2014-12-24 13:28:48 +0200
commit7063585c60205fe031e1c74289d88886705cfb57 (patch)
tree85d18890b25d9fb4e76365ce8dbbf282d8479711 /oslo_db/concurrency.py
parent571433bfc4936d90602bfac4cbd7e9170c0a8d07 (diff)
downloadoslo-db-7063585c60205fe031e1c74289d88886705cfb57.tar.gz
Move files out of the namespace package
Move the public API out of oslo.db to oslo_db. Retain the ability to import from the old namespace package for backwards compatibility for this release cycle. Blueprint: drop-namespace-packages Change-Id: Ie96b482b9fbcb1d85203ad35bb65c1f43e912a44
Diffstat (limited to 'oslo_db/concurrency.py')
-rw-r--r--oslo_db/concurrency.py81
1 files changed, 81 insertions, 0 deletions
diff --git a/oslo_db/concurrency.py b/oslo_db/concurrency.py
new file mode 100644
index 0000000..2c59623
--- /dev/null
+++ b/oslo_db/concurrency.py
@@ -0,0 +1,81 @@
+# Copyright 2014 Mirantis.inc
+# 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.
+
+import copy
+import logging
+import threading
+
+from oslo.config import cfg
+
+from oslo_db._i18n import _LE
+from oslo_db import api
+
+
+LOG = logging.getLogger(__name__)
+
+tpool_opts = [
+ cfg.BoolOpt('use_tpool',
+ default=False,
+ deprecated_name='dbapi_use_tpool',
+ deprecated_group='DEFAULT',
+ help='Enable the experimental use of thread pooling for '
+ 'all DB API calls'),
+]
+
+
+class TpoolDbapiWrapper(object):
+ """DB API wrapper class.
+
+ This wraps the oslo DB API with an option to be able to use eventlet's
+ thread pooling. Since the CONF variable may not be loaded at the time
+ this class is instantiated, we must look at it on the first DB API call.
+ """
+
+ def __init__(self, conf, backend_mapping):
+ self._db_api = None
+ self._backend_mapping = backend_mapping
+ self._conf = conf
+ self._conf.register_opts(tpool_opts, 'database')
+ self._lock = threading.Lock()
+
+ @property
+ def _api(self):
+ if not self._db_api:
+ with self._lock:
+ if not self._db_api:
+ db_api = api.DBAPI.from_config(
+ conf=self._conf, backend_mapping=self._backend_mapping)
+ if self._conf.database.use_tpool:
+ try:
+ from eventlet import tpool
+ except ImportError:
+ LOG.exception(_LE("'eventlet' is required for "
+ "TpoolDbapiWrapper."))
+ raise
+ self._db_api = tpool.Proxy(db_api)
+ else:
+ self._db_api = db_api
+ return self._db_api
+
+ def __getattr__(self, key):
+ return getattr(self._api, key)
+
+
+def list_opts():
+ """Returns a list of oslo.config options available in this module.
+
+ :returns: a list of (group_name, opts) tuples
+ """
+ return [('database', copy.deepcopy(tpool_opts))]