[wait-for-feedback] "MySQL server has gone away" when running in embedded mode using MySQL

Issue #265 closed
freakrob created an issue

I recently updated from kallithea 0.3.1 to 0.3.2 -- in part due to the SQLite database having become corrupted. There was raw HTML put into the DB at some point...

Anyway, I installed a fresh copy of kallithea 0.3.2, followed the installation instructions, recovered a backup of the SQLite DB, converted it to MySQL and edited the my.ini according to my understanding. The installation instructions now by default instruct one to run in mod_wsgi daemon mode. So everything just worked after I had figured out how to convert the database and found the proper encoding.

Then, an issue with daemon mode and git push came up -- see #264 -- and I wanted to quickly change back to running in mod_wsgi embedded mode. However, I could not use kallithea anymore, because the database connection to my MySQL db would time out and kallithea apparently doesn't try to reconnect in embedded mode.

Here's the log:

[Tue Jan 24 17:32:41.743620 2017] [wsgi:error] [pid 6796:tid 140172129711872] 2017-01-24 17:32:41.743 INFO  [kallithea.lib.auth_modules.auth_ldap] user USER_A authenticated correctly
[Tue Jan 24 17:32:41.942545 2017] [wsgi:error] [pid 6796:tid 140172129711872] 2017-01-24 17:32:41.942 INFO  [kallithea.lib.base] Access for IP:MY_IP allowed
[Tue Jan 24 17:32:42.047881 2017] [wsgi:error] [pid 6796:tid 140172129711872] 2017-01-24 17:32:42.047 INFO  [kallithea.lib.middleware.simplegit] push action on Git repo "REPO" by "USER_A" from MY_IP
[Tue Jan 24 17:32:42.089527 2017] [wsgi:error] [pid 6796:tid 140172129711872] 2017-01-24 17:32:42.089 INFO  [kallithea.RequestWrapper] IP: MY_IP Request to /REPO/git-receive-pack time: 0.608s
[Tue Jan 24 17:32:42.187430 2017] [wsgi:error] [pid 6796:tid 140172121319168] 2017-01-24 17:32:42.187 ERROR [kallithea.lib.middleware.simplegit] Traceback (most recent call last):
[Tue Jan 24 17:32:42.187453 2017] [wsgi:error] [pid 6796:tid 140172121319168]   File "/srv/kallithea-0.3.2/kallithea/lib/middleware/simplegit.py", line 243, in __get_repository
[Tue Jan 24 17:32:42.187456 2017] [wsgi:error] [pid 6796:tid 140172121319168]     environ['PATH_INFO'] = self._get_by_id(environ['PATH_INFO'])
[Tue Jan 24 17:32:42.187458 2017] [wsgi:error] [pid 6796:tid 140172121319168]   File "/srv/kallithea-0.3.2/kallithea/lib/base.py", line 202, in _get_by_id
[Tue Jan 24 17:32:42.187460 2017] [wsgi:error] [pid 6796:tid 140172121319168]     by_id_match = get_repo_by_id(repo_name)
[Tue Jan 24 17:32:42.187463 2017] [wsgi:error] [pid 6796:tid 140172121319168]   File "/srv/kallithea-0.3.2/kallithea/lib/utils.py", line 145, in get_repo_by_id
[Tue Jan 24 17:32:42.187465 2017] [wsgi:error] [pid 6796:tid 140172121319168]     repo = Repository.get(_repo_id)
[Tue Jan 24 17:32:42.187467 2017] [wsgi:error] [pid 6796:tid 140172121319168]   File "/srv/kallithea-0.3.2/kallithea/model/db.py", line 123, in get
[Tue Jan 24 17:32:42.187469 2017] [wsgi:error] [pid 6796:tid 140172121319168]     return cls.query().get(id_)
[Tue Jan 24 17:32:42.187471 2017] [wsgi:error] [pid 6796:tid 140172121319168]   File "/srv/kallithea-venv/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 775, in get
[Tue Jan 24 17:32:42.187473 2017] [wsgi:error] [pid 6796:tid 140172121319168]     return self._load_on_ident(key)
[Tue Jan 24 17:32:42.187475 2017] [wsgi:error] [pid 6796:tid 140172121319168]   File "/srv/kallithea-venv/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2514, in _load_on_ident
[Tue Jan 24 17:32:42.187477 2017] [wsgi:error] [pid 6796:tid 140172121319168]     return q.one()
[Tue Jan 24 17:32:42.187479 2017] [wsgi:error] [pid 6796:tid 140172121319168]   File "/srv/kallithea-venv/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2184, in one
[Tue Jan 24 17:32:42.187492 2017] [wsgi:error] [pid 6796:tid 140172121319168]     ret = list(self)
[Tue Jan 24 17:32:42.187494 2017] [wsgi:error] [pid 6796:tid 140172121319168]   File "/srv/kallithea-0.3.2/kallithea/lib/caching_query.py", line 83, in __iter__
[Tue Jan 24 17:32:42.187496 2017] [wsgi:error] [pid 6796:tid 140172121319168]     return Query.__iter__(self)
[Tue Jan 24 17:32:42.187498 2017] [wsgi:error] [pid 6796:tid 140172121319168]   File "/srv/kallithea-venv/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2227, in __iter__
[Tue Jan 24 17:32:42.187500 2017] [wsgi:error] [pid 6796:tid 140172121319168]     return self._execute_and_instances(context)
[Tue Jan 24 17:32:42.187502 2017] [wsgi:error] [pid 6796:tid 140172121319168]   File "/srv/kallithea-venv/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2242, in _execute_and_instances
[Tue Jan 24 17:32:42.187505 2017] [wsgi:error] [pid 6796:tid 140172121319168]     result = conn.execute(querycontext.statement, self._params)
[Tue Jan 24 17:32:42.187507 2017] [wsgi:error] [pid 6796:tid 140172121319168]   File "/srv/kallithea-venv/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1449, in execute
[Tue Jan 24 17:32:42.187509 2017] [wsgi:error] [pid 6796:tid 140172121319168]     params)
[Tue Jan 24 17:32:42.187511 2017] [wsgi:error] [pid 6796:tid 140172121319168]   File "/srv/kallithea-venv/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1584, in _execute_clauseelement
[Tue Jan 24 17:32:42.187513 2017] [wsgi:error] [pid 6796:tid 140172121319168]     compiled_sql, distilled_params
[Tue Jan 24 17:32:42.187515 2017] [wsgi:error] [pid 6796:tid 140172121319168]   File "/srv/kallithea-venv/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1698, in _execute_context
[Tue Jan 24 17:32:42.187517 2017] [wsgi:error] [pid 6796:tid 140172121319168]     context)
[Tue Jan 24 17:32:42.187519 2017] [wsgi:error] [pid 6796:tid 140172121319168]   File "/srv/kallithea-venv/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1691, in _execute_context
[Tue Jan 24 17:32:42.187521 2017] [wsgi:error] [pid 6796:tid 140172121319168]     context)
[Tue Jan 24 17:32:42.187523 2017] [wsgi:error] [pid 6796:tid 140172121319168]   File "/srv/kallithea-venv/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 331, in do_execute
[Tue Jan 24 17:32:42.187525 2017] [wsgi:error] [pid 6796:tid 140172121319168]     cursor.execute(statement, parameters)
[Tue Jan 24 17:32:42.187527 2017] [wsgi:error] [pid 6796:tid 140172121319168]   File "/srv/kallithea-venv/lib/python2.7/site-packages/MySQLdb/cursors.py", line 205, in execute
[Tue Jan 24 17:32:42.187529 2017] [wsgi:error] [pid 6796:tid 140172121319168]     self.errorhandler(self, exc, value)
[Tue Jan 24 17:32:42.187531 2017] [wsgi:error] [pid 6796:tid 140172121319168]   File "/srv/kallithea-venv/lib/python2.7/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
[Tue Jan 24 17:32:42.187533 2017] [wsgi:error] [pid 6796:tid 140172121319168]     raise errorclass, errorvalue
[Tue Jan 24 17:32:42.187536 2017] [wsgi:error] [pid 6796:tid 140172121319168] OperationalError: (OperationalError) (2006, 'MySQL server has gone away') 'SELECT repositories.statistics AS repositories_statistics, repositories.downloads AS repositories_downloads, repositories.landing_revision AS repositories_landing_revision, repositories.locked AS repositories_locked, repositories.changeset_cache AS repositories_changeset_cache, repositories.repo_id AS repositories_repo_id, repositories.repo_name AS repositories_repo_name, repositories.repo_state AS repositories_repo_state, repositories.clone_uri AS repositories_clone_uri, repositories.repo_type AS repositories_repo_type, repositories.user_id AS repositories_user_id, repositories.private AS repositories_private, repositories.description AS repositories_description, repositories.created_on AS repositories_created_on, repositories.updated_on AS repositories_updated_on, repositories.enable_locking AS repositories_enable_locking, repositories.fork_id AS repositories_fork_id, repositories.group_id AS repositories_group_id \\nFROM repositories \\nWHERE repositories.repo_id = %s' ('REPO_ID',)
[Tue Jan 24 17:32:42.187544 2017] [wsgi:error] [pid 6796:tid 140172121319168]
[Tue Jan 24 17:32:42.187845 2017] [wsgi:error] [pid 6796:tid 140172121319168] 2017-01-24 17:32:42.187 ERROR [kallithea.lib.middleware.simplegit] error extracting repo_name: OperationalError("(OperationalError) (2006, 'MySQL server has gone away')",)
[Tue Jan 24 17:32:42.188336 2017] [wsgi:error] [pid 6796:tid 140172121319168] 2017-01-24 17:32:42.188 INFO  [kallithea.RequestWrapper] IP: MY_IP Request to /_REPO_ID/git-receive-pack time: 0.019s

My my.ini looks as follows:

#########################################################
### DB CONFIGS - EACH DB WILL HAVE IT'S OWN CONFIG    ###
#########################################################

# SQLITE [default]
#sqlalchemy.db1.url = sqlite:///%(here)s/kallithea.db?timeout=60

# POSTGRESQL
#sqlalchemy.db1.url = postgresql://user:pass@localhost/kallithea

# MySQL
sqlalchemy.db1.url = mysql://kallithea@localhost/kallithea?charset=utf8

# see sqlalchemy docs for others

sqlalchemy.db1.echo = false
sqlalchemy.db1.pool_recycle = 3600
sqlalchemy.db1.convert_unicode = true

I'm not sure if it's something in the my.ini I misconfigured or if my setup (MySQL DB + running in embedded mode) is just not a supported use case. In any way, the instructions for using MySQL as DB could be a little clearer for the less knowledgeable such as myself :D

Comments (3)

  1. Mads Kiilerich

    I guess that could be because your mysql environment has a timeout that is lower than sqlalchemy.db1.pool_recycle . Could you try tweaking either of these and see if that make the problem go away?

    (I have been using postgresql and haven't seen such problems.)

  2. Log in to comment