[debexpo-devel] Sqlite lock race conditions!

Asheesh Laroia asheesh at asheesh.org
Wed Nov 10 21:33:51 CET 2010


It seems that two requests came in to the server at approximately the same 
time, so

I guess one way to 'fix' this is to limit the number of WSGI processes to 
1! I'll do that. Done. I still have 15 threads available; hopefully that 
will take care of it? (If not, I can do threads=1 processes=1.)

But it would behoove us to switch to MySQL, I suppose, rather than 
sqlite3. For that reason I've installed mysql in the debexpo vserver, and 
the MySQL root password is in /home/debexpo/mysql-root-password .

P.S. Mega thanks to all those helping out so far, including bug reporters!

-- Asheesh.

---------- Forwarded message ----------
Date: Tue, 9 Nov 2010 11:39:37
From: debexpo at debexpo.makesad.us
To: asheesh at asheesh.org
Subject:  WHERE users.id = ?' (None, 13)

URL: http://expo.debian.net/register/activate/0f66b68703dbe7403fc129f7adf0f4f8
File '/home/debexpo/debexpo/lib/python2.6/site-packages/WebError-0.10.2-py2.6.egg/weberror/errormiddleware.py', line 162 in __call__
   app_iter = self.application(environ, sr_checker)
File '/home/debexpo/debexpo/lib/python2.6/site-packages/Beaker-1.5.4-py2.6.egg/beaker/middleware.py', line 152 in __call__
   return self.wrap_app(environ, session_start_response)
File '/home/debexpo/debexpo/lib/python2.6/site-packages/Routes-1.12.3-py2.6.egg/routes/middleware.py', line 131 in __call__
   response = self.app(environ, start_response)
File '/home/debexpo/debexpo/lib/python2.6/site-packages/Pylons-1.0-py2.6.egg/pylons/wsgiapp.py', line 107 in __call__
   response = self.dispatch(controller, environ, start_response)
File '/home/debexpo/debexpo/lib/python2.6/site-packages/Pylons-1.0-py2.6.egg/pylons/wsgiapp.py', line 312 in dispatch
   return controller(environ, start_response)
File '/home/debexpo/debexpo/debexpo/lib/base.py', line 86 in __call__
   return WSGIController.__call__(self, environ, start_response)
File '/home/debexpo/debexpo/lib/python2.6/site-packages/Pylons-1.0-py2.6.egg/pylons/controllers/core.py', line 211 in __call__
   response = self._dispatch_call()
File '/home/debexpo/debexpo/lib/python2.6/site-packages/Pylons-1.0-py2.6.egg/pylons/controllers/core.py', line 162 in _dispatch_call
   response = self._inspect_call(func)
File '/home/debexpo/debexpo/lib/python2.6/site-packages/Pylons-1.0-py2.6.egg/pylons/controllers/core.py', line 105 in _inspect_call
   result = self._perform_call(func, args)
File '/home/debexpo/debexpo/lib/python2.6/site-packages/Pylons-1.0-py2.6.egg/pylons/controllers/core.py', line 57 in _perform_call
   return func(**args)
File '/home/debexpo/debexpo/debexpo/controllers/register.py', line 184 in activate
   meta.session.commit()
File '/home/debexpo/debexpo/lib/python2.6/site-packages/SQLAlchemy-0.6.5-py2.6.egg/sqlalchemy/orm/scoping.py', line 139 in do
   return getattr(self.registry(), name)(*args, **kwargs)
File '/home/debexpo/debexpo/lib/python2.6/site-packages/SQLAlchemy-0.6.5-py2.6.egg/sqlalchemy/orm/session.py', line 623 in commit
   self.transaction.commit()
File '/home/debexpo/debexpo/lib/python2.6/site-packages/SQLAlchemy-0.6.5-py2.6.egg/sqlalchemy/orm/session.py', line 385 in commit
   self._prepare_impl()
File '/home/debexpo/debexpo/lib/python2.6/site-packages/SQLAlchemy-0.6.5-py2.6.egg/sqlalchemy/orm/session.py', line 369 in _prepare_impl
   self.session.flush()
File '/home/debexpo/debexpo/lib/python2.6/site-packages/SQLAlchemy-0.6.5-py2.6.egg/sqlalchemy/orm/session.py', line 1397 in flush
   self._flush(objects)
File '/home/debexpo/debexpo/lib/python2.6/site-packages/SQLAlchemy-0.6.5-py2.6.egg/sqlalchemy/orm/session.py', line 1478 in _flush
   flush_context.execute()
File '/home/debexpo/debexpo/lib/python2.6/site-packages/SQLAlchemy-0.6.5-py2.6.egg/sqlalchemy/orm/unitofwork.py', line 304 in execute
   rec.execute(self)
File '/home/debexpo/debexpo/lib/python2.6/site-packages/SQLAlchemy-0.6.5-py2.6.egg/sqlalchemy/orm/unitofwork.py', line 448 in execute
   uow
File '/home/debexpo/debexpo/lib/python2.6/site-packages/SQLAlchemy-0.6.5-py2.6.egg/sqlalchemy/orm/mapper.py', line 1839 in _save_obj
   execute(statement, params)
File '/home/debexpo/debexpo/lib/python2.6/site-packages/SQLAlchemy-0.6.5-py2.6.egg/sqlalchemy/engine/base.py', line 1191 in execute
   params)
File '/home/debexpo/debexpo/lib/python2.6/site-packages/SQLAlchemy-0.6.5-py2.6.egg/sqlalchemy/engine/base.py', line 1271 in _execute_clauseelement
   return self.__execute_context(context)
File '/home/debexpo/debexpo/lib/python2.6/site-packages/SQLAlchemy-0.6.5-py2.6.egg/sqlalchemy/engine/base.py', line 1302 in __execute_context
   context.parameters[0], context=context)
File '/home/debexpo/debexpo/lib/python2.6/site-packages/SQLAlchemy-0.6.5-py2.6.egg/sqlalchemy/engine/base.py', line 1401 in _cursor_execute
   context)
File '/home/debexpo/debexpo/lib/python2.6/site-packages/SQLAlchemy-0.6.5-py2.6.egg/sqlalchemy/engine/base.py', line 1394 in _cursor_execute
   context)
File '/home/debexpo/debexpo/lib/python2.6/site-packages/SQLAlchemy-0.6.5-py2.6.egg/sqlalchemy/engine/default.py', line 299 in do_execute
   cursor.execute(statement, parameters)
OperationalError: (OperationalError) database is locked u'UPDATE users SET verification=? WHERE users.id = ?' (None, 13)


CGI Variables
-------------
   DOCUMENT_ROOT: '/var/www'
   GATEWAY_INTERFACE: 'CGI/1.1'
   HTTP_ACCEPT: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
   HTTP_ACCEPT_CHARSET: 'ISO-8859-1,utf-8;q=0.7,*;q=0.7'
   HTTP_ACCEPT_ENCODING: 'gzip,deflate'
   HTTP_ACCEPT_LANGUAGE: 'en,en-us;q=0.5'
   HTTP_CONNECTION: 'keep-alive'
   HTTP_HOST: 'expo.debian.net'
   HTTP_KEEP_ALIVE: '300'
   HTTP_USER_AGENT: 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.15) Gecko/20101028 Iceweasel/3.5.15 (like Firefox/3.5.15)'
   PATH_INFO: '/register/activate/0f66b68703dbe7403fc129f7adf0f4f8'
   PATH_TRANSLATED: '/home/debexpo/debexpo/deploy.wsgi/register/activate/0f66b68703dbe7403fc129f7adf0f4f8'
   REMOTE_ADDR: '82.211.214.250'
   REMOTE_PORT: '35908'
   REQUEST_METHOD: 'GET'
   REQUEST_URI: '/register/activate/0f66b68703dbe7403fc129f7adf0f4f8'
   SCRIPT_FILENAME: '/home/debexpo/debexpo/deploy.wsgi'
   SERVER_ADDR: '219.105.37.21'
   SERVER_ADMIN: 'webmaster at localhost'
   SERVER_NAME: 'expo.debian.net'
   SERVER_PORT: '80'
   SERVER_PROTOCOL: 'HTTP/1.1'
   SERVER_SIGNATURE: '<address>Apache/2.2.16 (Debian) Server at expo.debian.net Port 80</address>\n'
   SERVER_SOFTWARE: 'Apache/2.2.16 (Debian)'


WSGI Variables
--------------
   application: <beaker.middleware.SessionMiddleware object at 0x7f144f76d950>
   beaker.get_session: <bound method SessionMiddleware._get_session of <beaker.middleware.SessionMiddleware object at 0x7f144f76d950>>
   beaker.session: {'_accessed_time': 1289320776.516952, '_creation_time': 1289320776.516952}
   mod_wsgi.application_group: 'dg3.makesad.us|'
   mod_wsgi.callable_object: 'application'
   mod_wsgi.handler_script: ''
   mod_wsgi.input_chunked: '0'
   mod_wsgi.listener_host: ''
   mod_wsgi.listener_port: '80'
   mod_wsgi.process_group: 'example.com'
   mod_wsgi.request_handler: 'wsgi-script'
   mod_wsgi.script_reloading: '1'
   mod_wsgi.version: (3, 3)
   paste.registry: <paste.registry.Registry object at 0x7f144fcaad90>
   paste.throw_errors: True
   pylons.action_method: <bound method RegisterController.activate of <debexpo.controllers.register.RegisterController object at 0x7f14500007d0>>
   pylons.controller: <debexpo.controllers.register.RegisterController object at 0x7f14500007d0>
   pylons.environ_config: {'session': 'beaker.session', 'cache': 'beaker.cache'}
   pylons.pylons: <pylons.util.PylonsContext object at 0x7f14500009d0>
   pylons.routes_dict: {'action': u'activate', 'controller': u'register', 'id': u'0f66b68703dbe7403fc129f7adf0f4f8'}
   routes.route: <routes.route.Route object at 0x7f144f6566d0>
   routes.url: <routes.util.URLGenerator object at 0x7f144fcaa350>
   webob.adhoc_attrs: {'language': 'en-us'}
   wsgi process: 'Multi process AND threads (?)'
   wsgi.file_wrapper: <built-in method file_wrapper of mod_wsgi.Adapter object at 0x7f144ffefe40>
   wsgi.version: (1, 1)
   wsgiorg.routing_args: (<routes.util.URLGenerator object at 0x7f144fcaa350>, {'action': u'activate', 'controller': u'register', 'id': u'0f66b68703dbe7403fc129f7adf0f4f8'})


More information about the debexpo-devel mailing list