summaryrefslogtreecommitdiffstats
path: root/openstack/common/db/sqlalchemy
Commit message (Collapse)AuthorAgeFilesLines
* Clean up sqlalchemy exception codeChris Behrens2013-02-221-30/+42
| | | | | | | | | | | Moves DB exceptions that can be shared between DB implementations into their own module. Adds DBDeadlock() exception wrapping. Nova has its own code for determining Deadlock and it's better to consolidate it with DBDuplicateKey checking. Change-Id: I108bd0da2a14d62e460a997b1472f0b65bfc9b95
* Move DB thread pooling to DB API loaderChris Behrens2013-02-181-35/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes bug 1128605 The dbpool code in sqlalchemy session is the wrong place to implement thread pooling as it wraps each individual SQL call to run in its own thread. When combined with SQL server locking, all threads can be eaten waiting on locks with none available to run a 'COMMIT'. The correct place to do thread pooling is around each DB API call. This patch removes dbpool from sqlalchemy and creates a common DB API loader for all openstack projects which implements the following configuration options: db_backend: Full path to DB API backend module (or a known short name if a project chooses to implement a mapping) dbapi_use_tpool: True or False whether to use thread pooling around all DB API calls. DB backend modules must implement a 'get_backend()' method. Example usage for nova/db/api.py would be: """ from nova.openstack.common.db import api as db_api _KNOWN_BACKENDS = {'sqlalchemy': 'nova.db.sqlalchemy.api'} IMPL = db_api.DBAPI(backend_mapping=_KNOWN_BACKENDS) """ NOTE: Enabling thread pooling will be broken until this issue is resolved in eventlet _OR_ until we modify our eventlet.monkey_patch() calls to include 'thread=False': https://bitbucket.org/eventlet/eventlet/issue/137/ Change-Id: Idf14563ea07cf8ccf2a77b3f53659d8528927fc7
* Use oslo-config-2013.1b3Mark McLoughlin2013-02-171-1/+1
| | | | | | | | | | | | | | | The cfg API is now available via the oslo-config library, so switch to it and remove the copied-and-pasted version. Add the 2013.1b3 tarball to tools/pip-requires - this will be changed to 'oslo-config>=2013.1' when oslo-config is published to pypi. This will happen in time for grizzly final. Remove the 'deps = pep8==1.3.3' and 'deps = pyflakes' from tox.ini as it means all the other deps get installed with easy_install which can't install oslo-config from the URL. Change-Id: I4815aeb8a9341a31a250e920157f15ee15cfc5bc
* Use importutils.try_import() for MySQLdbMark McLoughlin2013-02-071-6/+4
| | | | | | This is a common pattern we've adopted elsewhere, so use it here too. Change-Id: I2e0947b4857005b478e796e9c9a7c05ea1f0d926
* Minor tweak to make update.py happyMark McLoughlin2013-02-071-1/+1
| | | | | | | Fairly lame to do this instead of just fixing update.py, but we seem to do it this way everywhere else, so ... Change-Id: Ie1cebcfec57c6138b9b726d7d3bc6e0ea456f146
* Remove openstack.common.db.commonMark McLoughlin2013-02-072-7/+28
| | | | | | | | | | | | Since this only contains exceptions that are either used in session.py or utils.py (not both), it seems sensible to move them into the modules where they are used. Also, remove the use of the Invalid base exception class since we don't seem to be making use of the base class anywhere by catching it rather than the more specialized exceptions. Change-Id: Ib05bb2e0a9494e1dc60c60b8eee0e76b5d2ee555
* Provide creating real unique constraints for columnsBoris Pavlovic2013-02-072-4/+4
| | | | | | | | | | | | | | | | | | | | | | Main issue is that we can't create unique constraint for columns, because we are using soft deletion of entries (set `deleted` column to True). The main idea is to use `deleted` columns to create unique constraint for columns. For example (`col1`, `deleted`). To make (`col1`, `deleted`) unique after entry deletion, we should assign the value of `id` to `deleted` column. Change type of `deleted` column from Boolean to table.id.type for all tables. Change models.soft_delete() method to assign table.id instead of True to `deleted` column. Change query.soft_delete() method to assign literal_column("id") instead of True blueprint db-unique-keys Change-Id: Ie1f67f49a5d085e6371efb63fc23a1c8b25d9464
* Fix missing wrap_db_error for Session.execute() methodBoris Pavlovic2013-02-071-0/+4
| | | | | | | | | | | | | We should add wrap_db_error for Session.execute() method, because Query.update() method will call Session.execute() and it is not inside Session.flush(), so exceptions from Query.update() wouldn't be wrapped. Add test for Session.flush() wrapper Add test for Session.execute() wrapper Fixes bug 1107890 Change-Id: I96894e502f9f279999b61a1e66469e34a07a022d
* Fix eventlet/mysql db pooling codeBrian Elliott2013-02-071-3/+17
| | | | | | | | | | | | | Eventlet versions >= 0.10 return a tuple from db_pool.ConnectionPool().create(), not a scalar. Also, set the FOUND_ROWS client flag, which sqlalchemy appears to require to sanity check the number of rows touch. bug 1097992 Change-Id: I64e798660c506fcd13947a232cb7832db0318360
* Be explicit about set_default() parametersMark McLoughlin2013-02-051-2/+4
| | | | | | | | We probably only want to support people using set_defaults() for a limited set of config options, so explicitly list those as parameters to the method. This is what we do for rpc and log options too. Change-Id: I3bfc5355e82eec17480b9547662e847dc0d74138
* Remove duplicate DB optionsMark McLoughlin2013-02-051-6/+0
| | | | | | | | | sql_dbpool_enable and sql_connection_trace are declared twice. Looks like this was a merge conflict when sql_dbpool_enable changed from int to bool. Change-Id: I553c5beea916e0ee296648342324fd53167c073a
* Eliminate gratuitous DB difference vs NovaMark McLoughlin2013-02-051-3/+2
| | | | | | | | | | Looks like this was an abritrary cleanup done as part of the import. It conflicts with a more recent change in Nova. We can move to using try_import() once we've killed the Nova copy of this code. Change-Id: I5c67d3fbd846a262feb724e26b14447a76561ae6
* Import sqlalchemy session/models/utilsEric Windisch2013-02-054-0/+884
Bring in session, base model, utilities, and tests for sqlalchemy from Nova. Add sqlalchemy to pip-requires and and python-mysql to test-requires. Partially implements blueprint common-db Change-Id: I3e0065cdac87e10c4e0742d66c293c72bb3acbb2