yahoo-eng-team team mailing list archive
-
yahoo-eng-team team
-
Mailing list archive
-
Message #24589
[Bug 1376211] Re: Retry mechanism does not work on startup when used with MySQL
** Changed in: oslo.db
Status: Fix Committed => Fix Released
--
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to neutron.
https://bugs.launchpad.net/bugs/1376211
Title:
Retry mechanism does not work on startup when used with MySQL
Status in OpenStack Neutron (virtual network service):
Confirmed
Status in Oslo Database library:
Fix Released
Status in oslo.db juno series:
Confirmed
Bug description:
This is initially revealed as Red Hat bug:
https://bugzilla.redhat.com/show_bug.cgi?id=1144181
The problem shows up when Neutron or any other oslo.db based projects
start while MySQL server is not up yet. Instead of retrying connection
as per max_retries and retry_interval, service just crashes with
return code 1.
This is because during engine initialization, "engine.execute("SHOW
VARIABLES LIKE 'sql_mode'")" is called, which opens the connection,
*before* _test_connection() succeeds. So the server just bail out to
sys.exit() at the top of the stack.
This behaviour was checked for both oslo.db 0.4.0 and 1.0.1.
I suspect this is a regression from the original db code from oslo-
incubator though I haven't checked it specifically.
The easiest way to reproduce the traceback is:
1. stop MariaDB.
2. execute the following Python script:
'''
import oslo.db.sqlalchemy.session
url = 'mysql://neutron:123456@10.35.161.235/neutron'
engine = oslo.db.sqlalchemy.session.EngineFacade(url)
'''
The following traceback can be seen in service log:
2014-10-01 13:46:10.588 5812 TRACE neutron Traceback (most recent call last):
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/bin/neutron-server", line 10, in <module>
2014-10-01 13:46:10.588 5812 TRACE neutron sys.exit(main())
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/neutron/server/__init__.py", line 47, in main
2014-10-01 13:46:10.588 5812 TRACE neutron neutron_api = service.serve_wsgi(service.NeutronApiService)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/neutron/service.py", line 105, in serve_wsgi
2014-10-01 13:46:10.588 5812 TRACE neutron LOG.exception(_('Unrecoverable error: please check log '
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/neutron/openstack/common/excutils.py", line 82, in __exit__
2014-10-01 13:46:10.588 5812 TRACE neutron six.reraise(self.type_, self.value, self.tb)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/neutron/service.py", line 102, in serve_wsgi
2014-10-01 13:46:10.588 5812 TRACE neutron service.start()
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/neutron/service.py", line 73, in start
2014-10-01 13:46:10.588 5812 TRACE neutron self.wsgi_app = _run_wsgi(self.app_name)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/neutron/service.py", line 168, in _run_wsgi
2014-10-01 13:46:10.588 5812 TRACE neutron app = config.load_paste_app(app_name)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/neutron/common/config.py", line 182, in load_paste_app
2014-10-01 13:46:10.588 5812 TRACE neutron app = deploy.loadapp("config:%s" % config_path, name=app_name)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 247, in loadapp
2014-10-01 13:46:10.588 5812 TRACE neutron return loadobj(APP, uri, name=name, **kw)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 272, in loadobj
2014-10-01 13:46:10.588 5812 TRACE neutron return context.create()
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 710, in create
2014-10-01 13:46:10.588 5812 TRACE neutron return self.object_type.invoke(self)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 144, in invoke
2014-10-01 13:46:10.588 5812 TRACE neutron **context.local_conf)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/paste/deploy/util.py", line 56, in fix_call
2014-10-01 13:46:10.588 5812 TRACE neutron val = callable(*args, **kw)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/paste/urlmap.py", line 25, in urlmap_factory
2014-10-01 13:46:10.588 5812 TRACE neutron app = loader.get_app(app_name, global_conf=global_conf)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 350, in get_app
2014-10-01 13:46:10.588 5812 TRACE neutron name=name, global_conf=global_conf).create()
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 710, in create
2014-10-01 13:46:10.588 5812 TRACE neutron return self.object_type.invoke(self)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 144, in invoke
2014-10-01 13:46:10.588 5812 TRACE neutron **context.local_conf)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/paste/deploy/util.py", line 56, in fix_call
2014-10-01 13:46:10.588 5812 TRACE neutron val = callable(*args, **kw)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/neutron/auth.py", line 67, in pipeline_factory
2014-10-01 13:46:10.588 5812 TRACE neutron app = loader.get_app(pipeline[-1])
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 350, in get_app
2014-10-01 13:46:10.588 5812 TRACE neutron name=name, global_conf=global_conf).create()
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 710, in create
2014-10-01 13:46:10.588 5812 TRACE neutron return self.object_type.invoke(self)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 146, in invoke
2014-10-01 13:46:10.588 5812 TRACE neutron return fix_call(context.object, context.global_conf, **context.local_conf)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/paste/deploy/util.py", line 56, in fix_call
2014-10-01 13:46:10.588 5812 TRACE neutron val = callable(*args, **kw)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/neutron/api/v2/router.py", line 71, in factory
2014-10-01 13:46:10.588 5812 TRACE neutron return cls(**local_config)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/neutron/api/v2/router.py", line 75, in __init__
2014-10-01 13:46:10.588 5812 TRACE neutron plugin = manager.NeutronManager.get_plugin()
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/neutron/manager.py", line 219, in get_plugin
2014-10-01 13:46:10.588 5812 TRACE neutron return weakref.proxy(cls.get_instance().plugin)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/neutron/manager.py", line 213, in get_instance
2014-10-01 13:46:10.588 5812 TRACE neutron cls._create_instance()
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/neutron/openstack/common/lockutils.py", line 249, in inner
2014-10-01 13:46:10.588 5812 TRACE neutron return f(*args, **kwargs)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/neutron/manager.py", line 199, in _create_instance
2014-10-01 13:46:10.588 5812 TRACE neutron cls._instance = cls()
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/neutron/manager.py", line 114, in __init__
2014-10-01 13:46:10.588 5812 TRACE neutron plugin_provider)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/neutron/manager.py", line 140, in _get_plugin_instance
2014-10-01 13:46:10.588 5812 TRACE neutron return plugin_class()
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/neutron/plugins/ml2/plugin.py", line 113, in __init__
2014-10-01 13:46:10.588 5812 TRACE neutron self.type_manager.initialize()
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/neutron/plugins/ml2/managers.py", line 74, in initialize
2014-10-01 13:46:10.588 5812 TRACE neutron driver.obj.initialize()
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/neutron/plugins/ml2/drivers/type_vlan.py", line 162, in initialize
2014-10-01 13:46:10.588 5812 TRACE neutron self._sync_vlan_allocations()
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/neutron/plugins/ml2/drivers/type_vlan.py", line 99, in _sync_vlan_allocations
2014-10-01 13:46:10.588 5812 TRACE neutron session = db_api.get_session()
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/neutron/db/api.py", line 60, in get_session
2014-10-01 13:46:10.588 5812 TRACE neutron facade = _create_facade_lazily()
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/neutron/db/api.py", line 34, in _create_facade_lazily
2014-10-01 13:46:10.588 5812 TRACE neutron _FACADE = session.EngineFacade.from_config(cfg.CONF, sqlite_fk=True)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/oslo/db/sqlalchemy/session.py", line 795, in from_config
2014-10-01 13:46:10.588 5812 TRACE neutron retry_interval=conf.database.retry_interval)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/oslo/db/sqlalchemy/session.py", line 711, in __init__
2014-10-01 13:46:10.588 5812 TRACE neutron **engine_kwargs)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/oslo/db/sqlalchemy/session.py", line 386, in create_engine
2014-10-01 13:46:10.588 5812 TRACE neutron connection_trace=connection_trace
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/oslo/db/sqlalchemy/utils.py", line 890, in __call__
2014-10-01 13:46:10.588 5812 TRACE neutron self._url_from_target(target), target, arg, kw)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/oslo/db/sqlalchemy/utils.py", line 927, in _dispatch_on
2014-10-01 13:46:10.588 5812 TRACE neutron return self._dispatch_on_db_driver(dbname, driver, arg, kw)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/oslo/db/sqlalchemy/utils.py", line 981, in _dispatch_on_db_driver
2014-10-01 13:46:10.588 5812 TRACE neutron if self._invoke_fn(fn, arg, kw) is not None:
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/oslo/db/sqlalchemy/utils.py", line 930, in _invoke_fn
2014-10-01 13:46:10.588 5812 TRACE neutron return fn(*arg, **kw)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib/python2.7/site-packages/oslo/db/sqlalchemy/session.py", line 456, in _init_events
2014-10-01 13:46:10.588 5812 TRACE neutron realmode = engine.execute("SHOW VARIABLES LIKE 'sql_mode'").fetchone()
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib64/python2.7/site-packages/sqlalchemy/engine/base.py", line 1751, in execute
2014-10-01 13:46:10.588 5812 TRACE neutron connection = self.contextual_connect(close_with_result=True)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib64/python2.7/site-packages/sqlalchemy/engine/base.py", line 1799, in contextual_connect
2014-10-01 13:46:10.588 5812 TRACE neutron self.pool.connect(),
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib64/python2.7/site-packages/sqlalchemy/pool.py", line 338, in connect
2014-10-01 13:46:10.588 5812 TRACE neutron return _ConnectionFairy._checkout(self)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib64/python2.7/site-packages/sqlalchemy/pool.py", line 641, in _checkout
2014-10-01 13:46:10.588 5812 TRACE neutron fairy = _ConnectionRecord.checkout(pool)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib64/python2.7/site-packages/sqlalchemy/pool.py", line 440, in checkout
2014-10-01 13:46:10.588 5812 TRACE neutron rec = pool._do_get()
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib64/python2.7/site-packages/sqlalchemy/pool.py", line 961, in _do_get
2014-10-01 13:46:10.588 5812 TRACE neutron return self._create_connection()
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib64/python2.7/site-packages/sqlalchemy/pool.py", line 285, in _create_connection
2014-10-01 13:46:10.588 5812 TRACE neutron return _ConnectionRecord(self)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib64/python2.7/site-packages/sqlalchemy/pool.py", line 411, in __init__
2014-10-01 13:46:10.588 5812 TRACE neutron self.connection = self.__connect()
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib64/python2.7/site-packages/sqlalchemy/pool.py", line 537, in __connect
2014-10-01 13:46:10.588 5812 TRACE neutron connection = self.__pool._creator()
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib64/python2.7/site-packages/sqlalchemy/engine/strategies.py", line 96, in connect
2014-10-01 13:46:10.588 5812 TRACE neutron connection_invalidated=invalidated
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib64/python2.7/site-packages/sqlalchemy/util/compat.py", line 199, in raise_from_cause
2014-10-01 13:46:10.588 5812 TRACE neutron reraise(type(exception), exception, tb=exc_tb)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib64/python2.7/site-packages/sqlalchemy/engine/strategies.py", line 90, in connect
2014-10-01 13:46:10.588 5812 TRACE neutron return dialect.connect(*cargs, **cparams)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib64/python2.7/site-packages/sqlalchemy/engine/default.py", line 377, in connect
2014-10-01 13:46:10.588 5812 TRACE neutron return self.dbapi.connect(*cargs, **cparams)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib64/python2.7/site-packages/MySQLdb/__init__.py", line 81, in Connect
2014-10-01 13:46:10.588 5812 TRACE neutron return Connection(*args, **kwargs)
2014-10-01 13:46:10.588 5812 TRACE neutron File "/usr/lib64/python2.7/site-packages/MySQLdb/connections.py", line 187, in __init__
2014-10-01 13:46:10.588 5812 TRACE neutron super(Connection, self).__init__(*args, **kwargs2)
2014-10-01 13:46:10.588 5812 TRACE neutron OperationalError: (OperationalError) (2003, "Can't connect to MySQL server on '10.35.161.235' (111)") None None
To manage notifications about this bug go to:
https://bugs.launchpad.net/neutron/+bug/1376211/+subscriptions