Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AUSTransaction raising an exception when trying to handle some exceptions #1111

Open
bhearsum opened this issue Dec 20, 2019 · 0 comments
Open
Labels
db database layer

Comments

@bhearsum
Copy link
Contributor

For example:
OperationalError: (1053, 'Server shutdown in progress')
File "sqlalchemy/engine/base.py", line 1244, in _execute_context
cursor, statement, parameters, context
File "sqlalchemy/engine/default.py", line 552, in do_execute
cursor.execute(statement, parameters)
File "MySQLdb/cursors.py", line 209, in execute
res = self._query(query)
File "MySQLdb/cursors.py", line 315, in _query
db.query(q)
File "MySQLdb/connections.py", line 226, in query
_mysql.connection.query(self, query)

OperationalError: (MySQLdb._exceptions.OperationalError) (1053, 'Server shutdown in progress')
[SQL: SELECT releases.name, releases.product, releases.data_version
FROM releases
WHERE releases.name = %s
LIMIT %s]
[parameters: ('Firefox-60.9.0esr-build1', 1)]
(Background on this error at: http://sqlalche.me/e/e3q8)
File "auslib/db.py", line 230, in execute
return self.conn.execute(statement)
File "sqlalchemy/engine/base.py", line 988, in execute
return meth(self, multiparams, params)
File "sqlalchemy/sql/elements.py", line 287, in _execute_on_connection
return connection._execute_clauseelement(self, multiparams, params)
File "sqlalchemy/engine/base.py", line 1107, in _execute_clauseelement
distilled_params,
File "sqlalchemy/engine/base.py", line 1248, in _execute_context
e, statement, parameters, cursor, context
File "sqlalchemy/engine/base.py", line 1466, in _handle_dbapi_exception
util.raise_from_cause(sqlalchemy_exception, exc_info)
File "sqlalchemy/util/compat.py", line 398, in raise_from_cause
reraise(type(exception), exception, tb=exc_tb, cause=cause)
File "sqlalchemy/util/compat.py", line 152, in reraise
raise value.with_traceback(tb)
File "sqlalchemy/engine/base.py", line 1244, in _execute_context
cursor, statement, parameters, context
File "sqlalchemy/engine/default.py", line 552, in do_execute
cursor.execute(statement, parameters)
File "MySQLdb/cursors.py", line 209, in execute
res = self._query(query)
File "MySQLdb/cursors.py", line 315, in _query
db.query(q)
File "MySQLdb/connections.py", line 226, in query
_mysql.connection.query(self, query)

OperationalError: (2006, 'MySQL server has gone away')
File "sqlalchemy/engine/base.py", line 739, in _rollback_impl
self.engine.dialect.do_rollback(self.connection)
File "sqlalchemy/dialects/mysql/base.py", line 2251, in do_rollback
dbapi_connection.rollback()

OperationalError: (MySQLdb._exceptions.OperationalError) (2006, 'MySQL server has gone away')
(Background on this error at: http://sqlalche.me/e/e3q8)
File "auslib/web/public/client.py", line 132, in wrapper
return f(*args, transaction=transaction, **kwargs)
File "auslib/web/public/client.py", line 151, in get_update_blob
release, update_type = AUS.evaluateRules(query, transaction=transaction)
File "auslib/AUS.py", line 120, in evaluateRules
release = dbo.releases.getReleases(name=rule["mapping"], limit=1, transaction=transaction)[0]
File "auslib/db.py", line 1835, in getReleases
rows = self.select(columns=[self.name, self.product, self.data_version], where=where, limit=limit, transaction=transaction)
File "auslib/db.py", line 391, in select
result = transaction.execute(query).fetchall()
File "auslib/db.py", line 237, in execute
self.rollback()
File "auslib/db.py", line 248, in rollback
self.trans.rollback()
File "sqlalchemy/engine/base.py", line 1705, in rollback
self._do_rollback()
File "sqlalchemy/engine/base.py", line 1743, in _do_rollback
self.connection._rollback_impl()
File "sqlalchemy/engine/base.py", line 741, in _rollback_impl
self._handle_dbapi_exception(e, None, None, None, None)
File "sqlalchemy/engine/base.py", line 1466, in _handle_dbapi_exception
util.raise_from_cause(sqlalchemy_exception, exc_info)
File "sqlalchemy/util/compat.py", line 398, in raise_from_cause
reraise(type(exception), exception, tb=exc_tb, cause=cause)
File "sqlalchemy/util/compat.py", line 152, in reraise
raise value.with_traceback(tb)
File "sqlalchemy/engine/base.py", line 739, in _rollback_impl
self.engine.dialect.do_rollback(self.connection)
File "sqlalchemy/dialects/mysql/base.py", line 2251, in do_rollback
dbapi_connection.rollback()

TypeError: init() missing 2 required positional arguments: 'params' and 'orig'
File "flask/app.py", line 1949, in full_dispatch_request
rv = self.dispatch_request()
File "flask/app.py", line 1935, in dispatch_request
return self.view_functionsrule.endpoint
File "connexion/decorators/decorator.py", line 73, in wrapper
response = function(request)
File "connexion/decorators/uri_parsing.py", line 117, in wrapper
response = function(request)
File "connexion/decorators/validation.py", line 336, in wrapper
return function(request)
File "connexion/decorators/produces.py", line 38, in wrapper
response = function(request)
File "connexion/decorators/response.py", line 104, in wrapper
response = function(request)
File "connexion/decorators/decorator.py", line 44, in wrapper
response = function(request)
File "connexion/decorators/parameter.py", line 207, in wrapper
return function(**kwargs)
File "auslib/web/public/client.py", line 132, in wrapper
return f(*args, transaction=transaction, **kwargs)
File "auslib/db.py", line 209, in exit
e = exc_type(exc_value)

It looks like something changed in the constructor for some SQLAlchemy exceptions, and we're calling them incorrectly now.

Instead of just trying to fix this, I think it's worth considering whether or not we can get rid of AUSTransaction instead. I don't remember the justification for creating it in the first place, nor do I see much value in it. After pursuing some history it looks like it was added in https://bugzilla.mozilla.org/show_bug.cgi?id=678163#c13, and I may have thought it would help avoid data races?

(Imported from https://bugzilla.mozilla.org/show_bug.cgi?id=1578476)

@bhearsum bhearsum added the db database layer label Dec 20, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
db database layer
Projects
None yet
Development

No branches or pull requests

1 participant