Python oslo_db.exception.DBConnectionError() Examples
The following are 23
code examples of oslo_db.exception.DBConnectionError().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
oslo_db.exception
, or try the search function
.
Example #1
Source File: engines.py From oslo.db with Apache License 2.0 | 6 votes |
def _test_connection(engine, max_retries, retry_interval): if max_retries == -1: attempts = itertools.count() else: attempts = range(max_retries) # See: http://legacy.python.org/dev/peps/pep-3110/#semantic-changes for # why we are not using 'de' directly (it can be removed from the local # scope). de_ref = None for attempt in attempts: try: return engine.connect() except exception.DBConnectionError as de: msg = 'SQL connection failed. %s attempts left.' LOG.warning(msg, max_retries - attempt) time.sleep(retry_interval) de_ref = de else: if de_ref is not None: raise de_ref
Example #2
Source File: exc_filters.py From oslo.db with Apache License 2.0 | 6 votes |
def _raise_operational_errors_directly_filter(operational_error, match, engine_name, is_disconnect): """Filter for all remaining OperationalError classes and apply. Filter for all remaining OperationalError classes and apply special rules. """ if is_disconnect: # operational errors that represent disconnect # should be wrapped raise exception.DBConnectionError(operational_error) else: # NOTE(comstud): A lot of code is checking for OperationalError # so let's not wrap it for now. raise operational_error
Example #3
Source File: api.py From oslo.db with Apache License 2.0 | 6 votes |
def __init__(self, retry_interval=1, max_retries=20, inc_retry_interval=True, max_retry_interval=10, retry_on_disconnect=False, retry_on_deadlock=False, exception_checker=lambda exc: False, jitter=False): super(wrap_db_retry, self).__init__() self.jitter = jitter self.db_error = (exception.RetryRequest, ) # default is that we re-raise anything unexpected self.exception_checker = exception_checker if retry_on_disconnect: self.db_error += (exception.DBConnectionError, ) if retry_on_deadlock: self.db_error += (exception.DBDeadlock, ) self.retry_interval = retry_interval self.max_retries = max_retries self.inc_retry_interval = inc_retry_interval self.max_retry_interval = max_retry_interval
Example #4
Source File: test_exc_filters.py From oslo.db with Apache License 2.0 | 6 votes |
def test_rollback_doesnt_interfere_with_killed_conn(self): session = self.sessionmaker() session.begin() try: session.execute("select 1") # close underying DB connection session.connection().connection.connection.close() # alternate approach, but same idea: # conn_id = session.scalar("select connection_id()") # session.execute("kill connection %s" % conn_id) # try using it, will raise an error session.execute("select 1") except exception.DBConnectionError: # issue being tested is that this session.rollback() # does not itself try to re-connect and raise another # error. session.rollback() else: assert False, "no exception raised"
Example #5
Source File: test_exc_filters.py From oslo.db with Apache License 2.0 | 6 votes |
def test_savepoint_rollback_doesnt_interfere_with_killed_conn(self): session = self.sessionmaker() session.begin() try: session.begin_nested() session.execute("select 1") # close underying DB connection session.connection().connection.connection.close() # alternate approach, but same idea: # conn_id = session.scalar("select connection_id()") # session.execute("kill connection %s" % conn_id) # try using it, will raise an error session.execute("select 1") except exception.DBConnectionError: # issue being tested is that this session.rollback() # does not itself try to re-connect and raise another # error. session.rollback() else: assert False, "no exception raised"
Example #6
Source File: test_service.py From karbor with Apache License 2.0 | 6 votes |
def test_report_state_newly_disconnected(self): service_ref = {'host': self.host, 'binary': self.binary, 'topic': self.topic, 'report_count': 0, 'id': 1} with mock.patch.object(service, 'db') as mock_db: mock_db.service_get_by_args.side_effect = exception.NotFound() mock_db.service_create.return_value = service_ref mock_db.service_get.side_effect = db_exc.DBConnectionError() serv = service.Service( self.host, self.binary, self.topic, 'karbor.tests.unit.test_service.FakeManager' ) serv.start() serv.report_state() self.assertTrue(serv.model_disconnected) self.assertFalse(mock_db.service_update.called)
Example #7
Source File: test_api.py From oslo.db with Apache License 2.0 | 6 votes |
def _api_raise(self, *args, **kwargs): """Simulate raising a database-has-gone-away error This method creates a fake OperationalError with an ID matching a valid MySQL "database has gone away" situation. It also decrements the error_counter so that we can artificially keep track of how many times this function is called by the wrapper. When error_counter reaches zero, this function returns True, simulating the database becoming available again and the query succeeding. """ if self.error_counter > 0: self.error_counter -= 1 orig = sqla.exc.DBAPIError(False, False, False) orig.args = [2006, 'Test raise operational error'] e = exception.DBConnectionError(orig) raise e else: return True
Example #8
Source File: test_exc_filters.py From oslo.db with Apache License 2.0 | 5 votes |
def test_connect_retry_stops_infailure(self): self.assertRaises( exception.DBConnectionError, self._run_test, "mysql", self.OperationalError("Error: (2003) something wrong"), 3, 2 )
Example #9
Source File: test_api.py From neutron-lib with Apache License 2.0 | 5 votes |
def test_not_deadlock_time_elapsed(self): self._test_retry_time_cost(db_exc.DBConnectionError)
Example #10
Source File: test_api.py From neutron-lib with Apache License 2.0 | 5 votes |
def test_stacked_retries_dont_explode_retry_count(self): context = mock.Mock() context.session.is_active = False e = db_exc.DBConnectionError() mock.patch('time.sleep').start() with testtools.ExpectedException(db_exc.DBConnectionError): # after 20 failures, the inner retry should give up and # the exception should be tagged to prevent the outer retry self._alt_context_function(context, db_api.MAX_RETRIES + 1, e)
Example #11
Source File: test_api.py From neutron-lib with Apache License 2.0 | 5 votes |
def test_dbconnection_error_caught(self): e = db_exc.DBConnectionError() self.assertIsNone(self._decorated_function(1, e))
Example #12
Source File: api.py From neutron-lib with Apache License 2.0 | 5 votes |
def is_retriable(e): """Determine if the exception is retriable. :param e: The exception to check. :returns: True if e is retriable and False otherwise. """ if getattr(e, '_RETRY_EXCEEDED', False): return False if _is_nested_instance(e, (db_exc.DBDeadlock, exc.StaleDataError, db_exc.DBConnectionError, db_exc.DBDuplicateEntry, db_exc.RetryRequest, obj_exc.NeutronDbObjectDuplicateEntry)): return True # looking savepoints mangled by deadlocks. see bug/1590298 for details. return _is_nested_instance(e, db_exc.DBError) and '1305' in str(e)
Example #13
Source File: utils.py From neutron-lib with Apache License 2.0 | 5 votes |
def is_retriable(exception): """Determine if the said exception is retriable. :param exception: The exception to check. :returns: True if 'exception' is retriable, otherwise False. """ if _is_nested_instance(exception, (db_exc.DBDeadlock, exc.StaleDataError, db_exc.DBConnectionError, db_exc.DBDuplicateEntry, db_exc.RetryRequest)): return True # Look for savepoints mangled by deadlocks. See bug/1590298 for details. return (_is_nested_instance(exception, db_exc.DBError) and '1305' in str(exception))
Example #14
Source File: test_api.py From oslo.db with Apache License 2.0 | 5 votes |
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')
Example #15
Source File: test_api.py From oslo.db with Apache License 2.0 | 5 votes |
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)
Example #16
Source File: test_exc_filters.py From oslo.db with Apache License 2.0 | 5 votes |
def _test_ping_listener_disconnected( self, dialect_name, exc_obj, is_disconnect=True): with self._fixture(dialect_name, exc_obj, 3, is_disconnect): conn = self.engine.connect() self.assertEqual(1, conn.scalar(sqla.select([1]))) conn.close() with self._fixture(dialect_name, exc_obj, 1, is_disconnect): self.assertRaises( exception.DBConnectionError, self.engine.connect ) self.assertRaises( exception.DBConnectionError, self.engine.connect ) self.assertRaises( exception.DBConnectionError, self.engine.connect ) with self._fixture(dialect_name, exc_obj, 1, is_disconnect): self.assertRaises( exception.DBConnectionError, self.engine.connect ) self.assertRaises( exception.DBConnectionError, self.engine.connect ) self.assertRaises( exception.DBConnectionError, self.engine.connect )
Example #17
Source File: test_health_manager.py From octavia with Apache License 2.0 | 5 votes |
def test_health_check_stale_amphora(self, session_mock, get_stale_amp_mock, failover_mockv2, failover_mock, db_wait_mock): conf = oslo_fixture.Config(cfg.CONF) conf.config(group="health_manager", heartbeat_timeout=5) amphora_health = mock.MagicMock() amphora_health.amphora_id = AMPHORA_ID get_stale_amp_mock.side_effect = [amphora_health, None] exit_event = threading.Event() hm = healthmanager.HealthManager(exit_event) hm.health_check() # Test DBDeadlock and RetryRequest exceptions session_mock.reset_mock() get_stale_amp_mock.reset_mock() mock_session = mock.MagicMock() session_mock.return_value = mock_session get_stale_amp_mock.side_effect = [ db_exc.DBDeadlock, db_exc.RetryRequest(Exception('retry_test')), db_exc.DBConnectionError, TestException('test')] # Test that a DBDeadlock does not raise an exception self.assertIsNone(hm.health_check()) # Test that a RetryRequest does not raise an exception self.assertIsNone(hm.health_check()) # Test that a DBConnectionError does not raise an exception self.assertIsNone(hm.health_check()) # ... and that it waits for DB reconnection db_wait_mock.assert_called_once() # Other exceptions should raise self.assertRaises(TestException, hm.health_check) self.assertEqual(4, mock_session.rollback.call_count)
Example #18
Source File: test_exc_filters.py From oslo.db with Apache License 2.0 | 5 votes |
def test_operational_dbapi_disconnect(self): matched = self._run_test( "mysql", "select the_db_disconnected", self.OperationalError("connection lost"), exception.DBConnectionError, is_disconnect=True ) self.assertInnerException( matched, "OperationalError", "connection lost", "select the_db_disconnected", ()),
Example #19
Source File: test_exc_filters.py From oslo.db with Apache License 2.0 | 5 votes |
def test_generic_dbapi_disconnect(self): matched = self._run_test( "mysql", "select the_db_disconnected", self.InterfaceError("connection lost"), exception.DBConnectionError, is_disconnect=True ) self.assertInnerException( matched, "InterfaceError", "connection lost", "select the_db_disconnected", ()),
Example #20
Source File: exc_filters.py From oslo.db with Apache License 2.0 | 5 votes |
def _raise_for_remaining_DBAPIError(error, match, engine_name, is_disconnect): """Filter for remaining DBAPIErrors. Filter for remaining DBAPIErrors and wrap if they represent a disconnect error. """ if is_disconnect: raise exception.DBConnectionError(error) else: LOG.warning('DBAPIError exception wrapped.', exc_info=True) raise exception.DBError(error)
Example #21
Source File: exc_filters.py From oslo.db with Apache License 2.0 | 5 votes |
def _is_db_connection_error(operational_error, match, engine_name, is_disconnect): """Detect the exception as indicating a recoverable error on connect.""" raise exception.DBConnectionError(operational_error)
Example #22
Source File: engines.py From oslo.db with Apache License 2.0 | 5 votes |
def _connect_ping_listener(connection, branch): """Ping the server at connection startup. Ping the server at transaction begin and transparently reconnect if a disconnect exception occurs. """ if branch: return # turn off "close with result". This can also be accomplished # by branching the connection, however just setting the flag is # more performant and also doesn't get involved with some # connection-invalidation awkardness that occurs (see # https://bitbucket.org/zzzeek/sqlalchemy/issue/3215/) save_should_close_with_result = connection.should_close_with_result connection.should_close_with_result = False try: # run a SELECT 1. use a core select() so that # any details like that needed by Oracle, DB2 etc. are handled. connection.scalar(select([1])) except exception.DBConnectionError: # catch DBConnectionError, which is raised by the filter # system. # disconnect detected. The connection is now # "invalid", but the pool should be ready to return # new connections assuming they are good now. # run the select again to re-validate the Connection. LOG.exception( 'Database connection was found disconnected; reconnecting') connection.scalar(select([1])) finally: connection.should_close_with_result = save_should_close_with_result
Example #23
Source File: service.py From karbor with Apache License 2.0 | 4 votes |
def report_state(self): """Update the state of this service in the datastore.""" if not self.manager.is_working(): # NOTE(dulek): If manager reports a problem we're not sending # heartbeats - to indicate that service is actually down. LOG.error('Manager for service %(binary)s %(host)s is ' 'reporting problems, not sending heartbeat. ' 'Service will appear "down".', {'binary': self.binary, 'host': self.host}) return ctxt = context.get_admin_context() state_catalog = {} try: try: service_ref = db.service_get(ctxt, self.service_id) except exception.NotFound: LOG.debug('The service database object disappeared, ' 'recreating it.') self._create_service_ref(ctxt) service_ref = db.service_get(ctxt, self.service_id) state_catalog['report_count'] = service_ref['report_count'] + 1 db.service_update(ctxt, self.service_id, state_catalog) # TODO(termie): make this pattern be more elegant. if getattr(self, 'model_disconnected', False): self.model_disconnected = False LOG.error('Recovered model server connection!') except db_exc.DBConnectionError: if not getattr(self, 'model_disconnected', False): self.model_disconnected = True LOG.exception('model server went away') # NOTE(jsbryant) Other DB errors can happen in HA configurations. # such errors shouldn't kill this thread, so we handle them here. except db_exc.DBError: if not getattr(self, 'model_disconnected', False): self.model_disconnected = True LOG.exception('DBError encountered: ') except Exception: if not getattr(self, 'model_disconnected', False): self.model_disconnected = True LOG.exception('Exception encountered: ')