Exemple #1
0
    def test_raise_connection_error_decorated(self):
        self.dbapi = api.DBAPI('sqlalchemy', {'sqlalchemy': __name__})

        self.test_db_api.error_counter = 5
        self.assertRaises(exception.DBConnectionError,
                          self.dbapi.api_raise_enable_retry)
        self.assertEqual(4, self.test_db_api.error_counter, 'Unexpected retry')
Exemple #2
0
    def test_raise_deadlock_error_connection_error_decorated(self):
        self.dbapi = api.DBAPI('sqlalchemy', {'sqlalchemy': __name__},
                               use_db_reconnect=True)

        self.test_db_api.error_counter = 5
        self.assertRaises(
            exception.DBDeadlock,
            self.dbapi.api_raise_deadlock_safe_db_retry_decorated)
Exemple #3
0
    def test_raise_deadlock_error_db_reconnect_enabled(self):
        self.dbapi = api.DBAPI('sqlalchemy', {'sqlalchemy': __name__},
                               use_db_reconnect=True)

        self.test_db_api.error_counter = 5
        self.assertRaises(exception.DBDeadlock,
                          self.dbapi.api_raise_deadlock_err_default)
        self.assertEqual(4, self.test_db_api.error_counter, 'Unexpected retry')
Exemple #4
0
    def test_retry_one(self):
        self.dbapi = api.DBAPI('sqlalchemy', {'sqlalchemy': __name__},
                               retry_interval=1)

        func = self.dbapi.api_raise_deadlock_err_decorated
        self.test_db_api.error_counter = 1
        self.assertTrue(func(), 'Single retry did not succeed.')

        self.assertEqual(
            0, self.test_db_api.error_counter,
            'Counter not decremented, retry logic probably failed.')
Exemple #5
0
    def test_retry_two_different_exception(self):
        self.dbapi = api.DBAPI('sqlalchemy', {'sqlalchemy': __name__},
                               use_db_reconnect=True,
                               retry_interval=1,
                               inc_retry_interval=False)

        func = self.dbapi.api_raise_deadlock_err_two_decorators
        self.test_db_api.error_counter = 2
        self.assertTrue(func(), 'Multiple retry did not succeed.')

        self.assertEqual(
            0, self.test_db_api.error_counter,
            'Counter not decremented, retry logic probably failed.')
Exemple #6
0
    def test_retry_one(self):
        self.dbapi = api.DBAPI('sqlalchemy', {'sqlalchemy': __name__},
                               use_db_reconnect=True,
                               retry_interval=1)

        try:
            func = self.dbapi.api_raise_enable_retry
            self.test_db_api.error_counter = 1
            self.assertTrue(func(), 'Single retry did not succeed.')
        except Exception:
            self.fail('Single retry raised an un-wrapped error.')

        self.assertEqual(
            0, self.test_db_api.error_counter,
            'Counter not decremented, retry logic probably failed.')
Exemple #7
0
    def test_retry_until_failure(self):
        self.dbapi = api.DBAPI('sqlalchemy', {'sqlalchemy': __name__},
                               use_db_reconnect=True,
                               retry_interval=1,
                               inc_retry_interval=False,
                               max_retries=3)

        func = self.dbapi.api_raise_enable_retry
        self.test_db_api.error_counter = 5
        self.assertRaises(
            exception.DBError, func,
            'Retry of permanent failure did not throw DBError exception.')

        self.assertNotEqual(
            0, self.test_db_api.error_counter,
            'Retry did not stop after sql_max_retries iterations.')
Exemple #8
0
#    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 contextlib

from oslo.db import api as db_api

from highlander.openstack.common import log as logging

_BACKEND_MAPPING = {
    'sqlalchemy': 'highlander.db.v1.sqlalchemy.api',
}

IMPL = db_api.DBAPI('sqlalchemy', backend_mapping=_BACKEND_MAPPING)
LOG = logging.getLogger(__name__)


def setup_db():
    IMPL.setup_db()


def drop_db():
    IMPL.drop_db()


# Transaction control.


def start_tx():
Exemple #9
0
    def test_dbapi_lazy_loading(self):
        dbapi = api.DBAPI('tests.test_api', lazy=True)

        self.assertIsNone(dbapi._backend)
        dbapi.api_class_call1(1, 'abc')
        self.assertIsNotNone(dbapi._backend)
Exemple #10
0
 def test_dbapi_full_path_module_method(self):
     dbapi = api.DBAPI('tests.test_api')
     result = dbapi.api_class_call1(1, 2, kwarg1='meow')
     expected = ((1, 2), {'kwarg1': 'meow'})
     self.assertEqual(expected, result)
Exemple #11
0
    def test_raise_connection_error(self):
        self.dbapi = api.DBAPI('sqlalchemy', {'sqlalchemy': __name__})

        self.test_db_api.error_counter = 5
        self.assertRaises(exception.DBConnectionError, self.dbapi._api_raise)
Exemple #12
0
    def test_raise_deadlock_error(self):
        self.dbapi = api.DBAPI('sqlalchemy', {'sqlalchemy': __name__})

        self.test_db_api.error_counter = 5
        self.assertRaises(exception.DBDeadlock,
                          self.dbapi.api_raise_deadlock_err_default)