Opened 12 years ago
Closed 12 years ago
#616 closed defect (fixed)
Deleting user account crashes if you have attachements on your media
Reported by: | joar | Owned by: | Elrond |
---|---|---|---|
Priority: | critical | Milestone: | 0.3.3 |
Component: | programming | Keywords: | sql |
Cc: | Elrond, joar | Parent Tickets: |
Description
File '/home/joar/git/mediagoblin/local/lib/python2.7/site-packages/Paste-1.7.5.1-py2.7.egg/paste/exceptions/errormiddleware.py', line 144 in __call__ app_iter = self.application(environ, sr_checker) File '/home/joar/git/mediagoblin/local/lib/python2.7/site-packages/Paste-1.7.5.1-py2.7.egg/paste/urlmap.py', line 203 in __call__ return app(environ, start_response) File '/home/joar/git/mediagoblin/local/lib/python2.7/site-packages/Beaker-1.6.3-py2.7.egg/beaker/middleware.py', line 155 in __call__ return self.wrap_app(environ, session_start_response) File '/home/joar/git/mediagoblin/mediagoblin/app.py', line 236 in __call__ return self.call_backend(environ, start_response) File '/home/joar/git/mediagoblin/mediagoblin/app.py', line 216 in call_backend response = controller(request) File '/home/joar/git/mediagoblin/mediagoblin/decorators.py', line 48 in new_controller_func return controller(request, *args, **kwargs) File '/home/joar/git/mediagoblin/mediagoblin/edit/views.py', line 277 in delete_account request.user.delete() File '/home/joar/git/mediagoblin/mediagoblin/db/models.py', line 93 in delete media.delete(del_orphan_tags=False, commit=False) File '/home/joar/git/mediagoblin/mediagoblin/db/models.py', line 251 in delete for comment in self.get_comments(): File '/home/joar/git/mediagoblin/local/lib/python2.7/site-packages/SQLAlchemy-0.7.8-py2.7.egg/sqlalchemy/orm/query.py', line 2226 in __iter__ self.session._autoflush() File '/home/joar/git/mediagoblin/local/lib/python2.7/site-packages/SQLAlchemy-0.7.8-py2.7.egg/sqlalchemy/orm/session.py', line 1012 in _autoflush self.flush() File '/home/joar/git/mediagoblin/local/lib/python2.7/site-packages/SQLAlchemy-0.7.8-py2.7.egg/sqlalchemy/orm/session.py', line 1583 in flush self._flush(objects) File '/home/joar/git/mediagoblin/local/lib/python2.7/site-packages/SQLAlchemy-0.7.8-py2.7.egg/sqlalchemy/orm/session.py', line 1654 in _flush flush_context.execute() File '/home/joar/git/mediagoblin/local/lib/python2.7/site-packages/SQLAlchemy-0.7.8-py2.7.egg/sqlalchemy/orm/unitofwork.py', line 331 in execute rec.execute(self) File '/home/joar/git/mediagoblin/local/lib/python2.7/site-packages/SQLAlchemy-0.7.8-py2.7.egg/sqlalchemy/orm/unitofwork.py', line 475 in execute uow File '/home/joar/git/mediagoblin/local/lib/python2.7/site-packages/SQLAlchemy-0.7.8-py2.7.egg/sqlalchemy/orm/persistence.py', line 59 in save_obj mapper, table, update) File '/home/joar/git/mediagoblin/local/lib/python2.7/site-packages/SQLAlchemy-0.7.8-py2.7.egg/sqlalchemy/orm/persistence.py', line 485 in _emit_update_statements execute(statement, params) File '/home/joar/git/mediagoblin/local/lib/python2.7/site-packages/SQLAlchemy-0.7.8-py2.7.egg/sqlalchemy/engine/base.py', line 1449 in execute params) File '/home/joar/git/mediagoblin/local/lib/python2.7/site-packages/SQLAlchemy-0.7.8-py2.7.egg/sqlalchemy/engine/base.py', line 1584 in _execute_clauseelement compiled_sql, distilled_params File '/home/joar/git/mediagoblin/local/lib/python2.7/site-packages/SQLAlchemy-0.7.8-py2.7.egg/sqlalchemy/engine/base.py', line 1698 in _execute_context context) File '/home/joar/git/mediagoblin/local/lib/python2.7/site-packages/SQLAlchemy-0.7.8-py2.7.egg/sqlalchemy/engine/base.py', line 1691 in _execute_context context) File '/home/joar/git/mediagoblin/local/lib/python2.7/site-packages/SQLAlchemy-0.7.8-py2.7.egg/sqlalchemy/engine/default.py', line 331 in do_execute cursor.execute(statement, parameters) IntegrityError: (IntegrityError) core__attachment_files.media_entry may not be NULL u'UPDATE core__attachment_files SET media_entry=? WHERE core__attachment_files.id = ?' (None, 2)
Change History (4)
comment:1 by , 12 years ago
comment:2 by , 12 years ago
Cc: | added |
---|
comment:3 by , 12 years ago
Owner: | set to |
---|---|
Status: | new → accepted |
Okay, because I wanted to reproduce another error that joar found, I wrote a unit test and then fixed both. It's in a local tree, just wanted to take the bug, so that nobody else needs to invest time.
News at 10.
comment:4 by , 12 years ago
Resolution: | → fixed |
---|---|
Status: | accepted → closed |
Should be fixed with df5b142ab9bfc590f17768079104f6cfa2cd7bba
.
So, I think there's some question about how we handle cascading deletes. This is both an issue for MediaEntries, and it's an issue for here.
Assuming we do the .delete() of a user, what about the other things that need to happen for each of their media entries? That is to say, deleting each of their media entries' files as well.
What I think is we probably need to do this: Deleting a user sets up a celery task with a series of subtasks for each media deletion. This way there isn't an http timeout as a bunch of files are potentially deleted from disk (which would be totally wonky)
So, this wouldn't be relying on the de-facto cascading delete code of sqlalchemy. (Also, I'll note that cascading deletes are just going to get more and more complex as we go the way of the plugin..)