﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
20470	Querying crashes with RuntimeError (dictionary changed size during iteration)	Joonas Paalasmaa	nobody	"We have defined the following model.

{{{
class SignalAnalysisTask(models.Model):
    continuous_signal = models.ForeignKey(ContinuousSignal, related_name='signal_analysis_tasks')
    closed = models.BooleanField(default=False, db_index=True)
    ticket = models.OneToOneField(AnalysisTicket, null=True, blank=True, related_name='analysis_task')
    latest_fragment = models.ForeignKey(SignalFragment, null=True, blank=True, related_name='analysis_task_latest_fragments')
}}}

When the below query is performed with the model, Django crashes with ""RuntimeError: dictionary changed size during iteration"". See the full traceback. Django is configured to run with Apache and mod_wsgi on Linux.

{{{
open_tasks = SignalAnalysisTask.objects.filter(closed=False)
open_tasks_with_new_data = open_tasks.exclude(latest_fragment=F('continuous_signal__last_signal_fragment'))
open_tasks_with_new_data = open_tasks_with_new_data.order_by(""continuous_signal__start_time"")
}}}

Traceback:

{{{
Traceback (most recent call last):
  File ""/usr/lib/finsor/virtualenvs/signalstorage/local/lib/python2.7/site-packages/django/core/handlers/base.py"", line 115, in get_response
    response = callback(request, *callback_args, **callback_kwargs)
  File ""/usr/lib/finsor/virtualenvs/signalstorage/local/lib/python2.7/site-packages/bedsenseweb/utils/viewutils.py"", line 27, in check
    return view_func(request, *args, **kwargs)
  File ""/usr/lib/finsor/virtualenvs/signalstorage/local/lib/python2.7/site-packages/bedsenseweb/tickets/views.py"", line 21, in acquire
    ticket = models.create_new_ticket()
  File ""/usr/lib/finsor/virtualenvs/signalstorage/local/lib/python2.7/site-packages/bedsenseweb/tickets/models.py"", line 41, in create_new_ticket
    open_tasks_with_new_data = open_tasks_with_new_data.order_by(""continuous_signal__start_time"")
  File ""/usr/lib/finsor/virtualenvs/signalstorage/local/lib/python2.7/site-packages/django/db/models/query.py"", line 791, in order_by
    obj = self._clone()
  File ""/usr/lib/finsor/virtualenvs/signalstorage/local/lib/python2.7/site-packages/django/db/models/query.py"", line 907, in _clone
    query = self.query.clone()
  File ""/usr/lib/finsor/virtualenvs/signalstorage/local/lib/python2.7/site-packages/django/db/models/sql/query.py"", line 264, in clone
    obj.where = copy.deepcopy(self.where, memo=memo)
  File ""/usr/lib/python2.7/copy.py"", line 174, in deepcopy
    y = copier(memo)
  File ""/usr/lib/finsor/virtualenvs/signalstorage/local/lib/python2.7/site-packages/django/utils/tree.py"", line 61, in __deepcopy__
    obj.children = copy.deepcopy(self.children, memodict)
  File ""/usr/lib/python2.7/copy.py"", line 163, in deepcopy
    y = copier(x, memo)
  File ""/usr/lib/python2.7/copy.py"", line 230, in _deepcopy_list
    y.append(deepcopy(a, memo))
  File ""/usr/lib/python2.7/copy.py"", line 174, in deepcopy
    y = copier(memo)
  File ""/usr/lib/finsor/virtualenvs/signalstorage/local/lib/python2.7/site-packages/django/utils/tree.py"", line 61, in __deepcopy__
    obj.children = copy.deepcopy(self.children, memodict)
  File ""/usr/lib/python2.7/copy.py"", line 163, in deepcopy
    y = copier(x, memo)
  File ""/usr/lib/python2.7/copy.py"", line 230, in _deepcopy_list
    y.append(deepcopy(a, memo))
  File ""/usr/lib/python2.7/copy.py"", line 174, in deepcopy
    y = copier(memo)
  File ""/usr/lib/finsor/virtualenvs/signalstorage/local/lib/python2.7/site-packages/django/utils/tree.py"", line 61, in __deepcopy__
    obj.children = copy.deepcopy(self.children, memodict)
  File ""/usr/lib/python2.7/copy.py"", line 163, in deepcopy
    y = copier(x, memo)
  File ""/usr/lib/python2.7/copy.py"", line 230, in _deepcopy_list
    y.append(deepcopy(a, memo))
  File ""/usr/lib/python2.7/copy.py"", line 174, in deepcopy
    y = copier(memo)
  File ""/usr/lib/finsor/virtualenvs/signalstorage/local/lib/python2.7/site-packages/django/utils/tree.py"", line 61, in __deepcopy__
    obj.children = copy.deepcopy(self.children, memodict)
  File ""/usr/lib/python2.7/copy.py"", line 163, in deepcopy
    y = copier(x, memo)
  File ""/usr/lib/python2.7/copy.py"", line 230, in _deepcopy_list
    y.append(deepcopy(a, memo))
  File ""/usr/lib/python2.7/copy.py"", line 163, in deepcopy
    y = copier(x, memo)
  File ""/usr/lib/python2.7/copy.py"", line 237, in _deepcopy_tuple
    y.append(deepcopy(a, memo))
  File ""/usr/lib/python2.7/copy.py"", line 190, in deepcopy
    y = _reconstruct(x, rv, 1, memo)
  File ""/usr/lib/python2.7/copy.py"", line 334, in _reconstruct
    state = deepcopy(state, memo)
  File ""/usr/lib/python2.7/copy.py"", line 163, in deepcopy
    y = copier(x, memo)
  File ""/usr/lib/python2.7/copy.py"", line 257, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File ""/usr/lib/python2.7/copy.py"", line 190, in deepcopy
    y = _reconstruct(x, rv, 1, memo)
  File ""/usr/lib/python2.7/copy.py"", line 334, in _reconstruct
    state = deepcopy(state, memo)
  File ""/usr/lib/python2.7/copy.py"", line 163, in deepcopy
    y = copier(x, memo)
  File ""/usr/lib/python2.7/copy.py"", line 257, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File ""/usr/lib/python2.7/copy.py"", line 163, in deepcopy
    y = copier(x, memo)
  File ""/usr/lib/python2.7/copy.py"", line 256, in _deepcopy_dict
    for key, value in x.iteritems():
RuntimeError: dictionary changed size during iteration
}}}"	Bug	closed	Database layer (models, ORM)	1.5	Normal	needsinfo		bmispelon@…	Unreviewed	0	0	0	0	0	0
